文章目录
- 一、ansible模块
- 3.1ping模块
- 3.2command模块
- 3.3shell模块:可以执行任何linux命令
- 3.4script模块
- 3.5raw模块
- 3.6yum_repository模块
- 3.7yum模块
- 3.7service模块
- 3.8copy模块
- 3.9file模块
- 3.10lineinfile模块:用于远程主机文件内容修改
- 3.11repalce模块
- 3.12unarchive模块
- 3.13group模块
- 3.14user模块
- 3.15cron模块(用户默认为root)
- 3.16firewalld模块
- 3.17synchronize模块:在被控机和控制机都需要安装rsync。可以实现增量同步
- 3.18fetch模块:从被管理控制结点拉取文件到控制结点
- 3.19get_url模块:下载模块
- 3.20parted模块:创建分区:pv
- 3.21lvg模块:创建卷组
- 3.22lvol模块:创建逻辑卷
- 3.23filesystem模块:格式化文件系统
- 3.24mount模块:挂载
- 3.25setup模块:查看系统信息模块
ansible运行任务的方式:Ad-hoc:ansible命令、Playbook剧本:YAML语言
Ad-hoc:ansible 主机或组 -m 模块名 -a '模块参数’
一、ansible模块
1.查看模块:ansible-doc -l | wc -l
[root@manager ansible]# ansible-doc -l |wc -l
3387
2.模块帮助:ansible-doc 模块名 (-s :查看模块参数)
[root@manager ansible]# ansible-doc ping
-v表示详细过程
ansible 模块名 -v
ansible 模块名 -vv
[root@manager ~]# ansible web -m ping -v
Using /etc/ansible/ansible.cfg as config file
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
-i 可以切换到配置路径
[root@master ~]# ansible -i /ansible/inventory test -m ping -o
node1 | SUCCESS => {"ansible_facts": {"discovered_interpreter_python": "/usr/bin/python"}, "changed": false, "ping": "pong"}
3.常用模块有哪些?
3.1ping模块
ping模块:没有参数,测试被管理方能否正常通信
[root@manager ansible]# ansible 192.168.131.108 -m ping
192.168.131.108 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"ping": "pong"
}
3.2command模块
command命令模块:作为ansible的默认模块,可以运行远程权限范围所有的shell命令,不支持管道符
没有-m参数,默认使用的是command模块:ansible node1 -a hostname
[root@manager ansible]# ansible node1 -m command -a hostname
node1 | CHANGED | rc=0 >>
node1
#command模块不支持管道符
[root@manager ansible]# ansible node1 -m command -a 'grep bash$ /etc/passwd | wc -l'
node1 | FAILED | rc=2 >>
/etc/passwdgrep: |: 没有那个文件或目录
grep: wc: 没有那个文件或目录non-zero return code
3.3shell模块:可以执行任何linux命令
shell模块:执行远程主机上的shell脚本文件或命令,支持管道符
[root@manager ansible]# ansible node1 -m shell -a 'grep bash$ /etc/passwd | wc -l'
node1 | CHANGED | rc=0 >>
4
[root@manager ansible]# ansible node1 -m shell -a '/scripts/day1/1.sh'
node1 | CHANGED | rc=0 >>
管理员
root@master ansible]# ansible-doc -s shell #查看shell模块的参数信息
[root@master ansible]# ansible all -m shell -a 'free -m' -o
node1 | CHANGED | rc=0 | (stdout) total used free shared buff/cache available\nMem: 1819 284 1207 9 326 1386\nSwap: 2047 0 2047
[root@master ansible]# ansible test -m shell -a 'chdir=/opt date > date.txt' -o
node1 | CHANGED | rc=0 | (stdout)
[root@master ansible]# ansible test -m shell -a 'cat /opt/date.txt' -o
node1 | CHANGED | rc=0 | (stdout) 2020年 09月 20日 星期日 08:33:26 CST
3.4script模块
script模块:在远程主机执行主控端存储的shell脚本文件,相当于scp+shell组合。
[root@manager ansible]# ansible node1 -m script -a '/scripts/day1/2.sh'
node1 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to node1 closed.\r\n",
"stderr_lines": [
"Shared connection to node1 closed."
],
"stdout": "Welcome to shell script\r\n",
"stdout_lines": [
"Welcome to shell script"
]
}
3.5raw模块
raw模块:执行运城主机上的命令,但没有chdir create remove等参数,能执行大部分操作
[root@manager ~]# ansible node1 -m raw -a 'chdir=/tmp touch f3'
node1 | CHANGED | rc=0 >>
Shared connection to node1 closed.
[root@manager ~]# ansible node1 -m shell -a 'ls -l . | grep f3'
node1 | CHANGED | rc=0 >>
-rw-r--r-- 1 root root 0 6月 17 17:41 f3
f3会在当前目录创建,并不会在/tmp下创建,因为raw不支持chdir操作
3.6yum_repository模块
3.6.1 添加yum源
[root@master ansible]# ansible test -m yum_repository -a 'name=ansible description=ansible baseurl=http://node1/ansible gpgcheck=no enabled=yes'
3.6.2 删除yum源
[root@master ansible]# ansible test -m yum_repository -a 'name=ansible state=absent'
3.7yum模块
yum模块:用来批量管理多台主机软件包
参数:name:软件包名 state:latest最新安装/absent移除/present安装
安装多个软件包:ansible web -m yum -a 'name="," state=present' 或者在剧本使用
移除多个软件包:ansible web -m yum -a 'name="," state=absent'
更新系统(更新所有软件包):ansible web -m yum -a 'name="*" state=latest'
安装互联网软件:ansible web -m yum -a 'name=http://rpmfind.net/linux/epel/7/x86_64/Packages/s/sl-5.02-1.el7.x86_64.rpm state=absent' state=present'
[root@manager ansible]# ansible node1 -m yum -a 'name=httpd state=present'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"changes": {
"installed": [
"httpd"
]
},
"msg": "Repository base is listed more than once in the configuration\n",
"rc": 0,
"results": [
"Loaded plugins: fastestmirror\nLoading mirror speeds from cached hostfile\n * base: mirrors.aliyun.com\n * epel: mirrors.bfsu.edu.cn\n * extras: mirrors.aliyun.com\n * updates: mirrors.aliyun.com\nResolving Dependencies\n--> Running transaction check\n---> Package httpd.x86_64 0:2.4.6-93.el7.centos will be installed\n--> Finished Dependency Resolution\n\nDependencies Resolved\n\n================================================================================\n Package Arch Version Repository Size\n================================================================================\nInstalling:\n httpd x86_64 2.4.6-93.el7.centos base 2.7 M\n\nTransaction Summary\n================================================================================\nInstall 1 Package\n\nTotal download size: 2.7 M\nInstalled size: 9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n Installing : httpd-2.4.6-93.el7.centos.x86_64 1/1 \n Verifying : httpd-2.4.6-93.el7.centos.x86_64 1/1 \n\nInstalled:\n httpd.x86_64 0:2.4.6-93.el7.centos \n\nComplete!\n"
]
}
[root@manager ansible]# ansible node1 -m yum -a 'name=httpd state=absent'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"changes": {
"removed": [
"httpd"
]
},
"msg": "Repository base is listed more than once in the configuration\n",
"rc": 0,
"results": [
"已加载插件:fastestmirror\n正在解决依赖关系\n--> 正在检查事务\n---> 软件包 httpd.x86_64.0.2.4.6-93.el7.centos 将被 删除\n--> 解决依赖关系完成\n\n依赖关系解决\n\n================================================================================\n Package 架构 版本 源 大小\n================================================================================\n正在删除:\n httpd x86_64 2.4.6-93.el7.centos @base 9.4 M\n\n事务概要\n================================================================================\n移除 1 软件包\n\n安装大小:9.4 M\nDownloading packages:\nRunning transaction check\nRunning transaction test\nTransaction test succeeded\nRunning transaction\n 正在删除 : httpd-2.4.6-93.el7.centos.x86_64 1/1 \n 验证中 : httpd-2.4.6-93.el7.centos.x86_64 1/1 \n\n删除:\n httpd.x86_64 0:2.4.6-93.el7.centos \n\n完毕!\n"
]
}
3.7service模块
service模块:远程主机系统服务管理模块
启动并开启自启动httpd:ansible web -m service -a 'name=httpd state=started enable=yes'
[root@manager ansible]# ansible node1 -m service -a 'name=httpd state=started enabled=yes'
node1 | SUCCESS => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false,
"enabled": true,
"name": "httpd",
"state": "started",
"status": {
"ActiveEnterTimestamp": "二 2020-06-16 19:04:57 CST",
"ActiveEnterTimestampMonotonic": "5003089739",
"ActiveExitTimestampMonotonic": "0",
"ActiveState": "active",
"After": "basic.target tmp.mount nss-lookup.target systemd-journald.socket system.slice -.mount network.target remote-fs.target",
"AllowIsolate": "no",
"AmbientCapabilities": "0",
"AssertResult": "yes",
"AssertTimestamp": "二 2020-06-16 19:04:57 CST",
"AssertTimestampMonotonic": "5002942190",
"Before": "multi-user.target shutdown.target",
"BlockIOAccounting": "no",
"BlockIOWeight": "18446744073709551615",
"CPUAccounting": "no",
"CPUQuotaPerSecUSec": "infinity",
"CPUSchedulingPolicy": "0",
"CPUSchedulingPriority": "0",
"CPUSchedulingResetOnFork": "no",
3.8copy模块
copy模块:复制文件到目标主机
ansible node1 -m copy -a 'src=原文件 desc=目标位置 ower=属主 group=数组 mode=权限 backup=是否备份'
备份的话,文件名会带上时间戳信息
[root@manager ansible]# ansible node1 -m copy -a 'src=/scripts/day1/1.sh dest=/1 mode=644 backup=yes '
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "fa1cbb78c8edfa79b1f11ec6178761f269e3b462",
"dest": "/1/1.sh",
"gid": 0,
"group": "root",
"md5sum": "3aef8d9879fac56db561113164060efe",
"mode": "0644",
"owner": "root",
"size": 241,
"src": "/root/.ansible/tmp/ansible-tmp-1592306224.75-3662-25575030013411/source",
"state": "file",
"uid": 0
}
[root@manager ansible]# ansible node1 -a 'ls /1'
node1 | CHANGED | rc=0 >>
1.sh
将centent内容放到目标文件
[root@manager ansible]# ansible node1 -m copy -a 'content="hello ansible" dest=/1/hello.txt'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"checksum": "7b320b1dc0c867516cf00728df488daa3532bc1f",
"dest": "/1/hello.txt",
"gid": 0,
"group": "root",
"md5sum": "37bc018071eae9a0e879c31b2f9aa554",
"mode": "0644",
"owner": "root",
"size": 13,
"src": "/root/.ansible/tmp/ansible-tmp-1592306387.09-3698-45787220128456/source",
"state": "file",
"uid": 0
}
[root@manager ansible]# ansible node1 -a 'cat /1/hello.txt'
node1 | CHANGED | rc=0 >>
hello ansible
3.9file模块
file模块:对远程主机的文件做一些操作:创建文件/目录、删除文件或/目录、修改文件权限、创建连接文件等
创建目录:
[root@manager ansible]# ansible node1 -m file -a 'path=/backup state=directory'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0755",
"owner": "root",
"path": "/backup",
"size": 6,
"state": "directory",
"uid": 0
}
删除目录
[root@manager ansible]# ansible node1 -m file -a 'path=/backup state=absent'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"path": "/backup",
"state": "absent"
}
创建软链接:
[root@manager ansible]# ansible node1 -m file -a 'src=/1/1.sh dest=/1/1_soft state=link'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"dest": "/1/1_soft",
"gid": 0,
"group": "root",
"mode": "0777",
"owner": "root",
"size": 7,
"src": "/1/1.sh",
"state": "link",
"uid": 0
}
[root@manager ansible]# ansible node1 -a 'ls -l /1'
node1 | CHANGED | rc=0 >>
总用量 12
-rw-r--r-- 1 root root 241 6月 16 19:17 1.sh
lrwxrwxrwx 1 root root 7 6月 16 19:29 1_soft -> /1/1.sh
3.10lineinfile模块:用于远程主机文件内容修改
lineinfile模块:用于远程主机文件内容修改、在某行前添加一行、删除、替换文本内容等
内容替换:
root@manager ansible]# ansible node1 -m lineinfile -a 'path=/1/1.sh regexp="^fi$" line="fifi"'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"backup": "",
"changed": true,
"msg": "line replaced"
}
[root@manager ansible]# ansible node1 -a 'cat /1/1.sh'
node1 | CHANGED | rc=0 >>
#!/bin/bash
#*************************************************************
#Author: pyy
#Date: 2020-06-06
#FileName: 1.sh
#*************************************************************
if [ $USER = 'root' ]
then
echo '管理员'
fifi
[root@master ansible]# ansible test -m lineinfile -a 'path=/etc/selinux/config regexp="^SELINUX=" line="SELINUX=disabled"'
[root@master ansible]# ansible test -m lineinfile -a 'path="/opt/ad-hoc.sh" regexp="^#" state=absent'
3.11repalce模块
replace模块:替换字符串
[root@manager ansible]# ansible node1 -m replace -a 'path=/1/1.sh regexp="^fifi$" replace="fi"'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"msg": "1 replacements made"
}
[root@manager ansible]# ansible node1 -a 'cat /1/1.sh'
node1 | CHANGED | rc=0 >>
#!/bin/bash
#*************************************************************
#Author: pyy
#Date: 2020-06-06
#FileName: 1.sh
#*************************************************************
if [ $USER = 'root' ]
then
echo '管理员'
fi
3.12unarchive模块
unarchive模块:解压缩模块
有两种用法:
1.将ansible主机上的压缩包解压传到远程主机的指定路径下,这种情况下,copy=yes
2.将远程主机上的某个压缩包解压缩到指定路径下,这种情况下,copy=no
[root@manager ansible]# ansible node1 -m unarchive -a 'src=/1/1.tar.gz dest=/2/ copy=no'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"dest": "/2/",
"extract_results": {
"cmd": [
"/usr/bin/gtar",
"--extract",
"-C",
"/2/",
"-z",
"-f",
"/1/1.tar.gz"
],
"err": "",
"out": "",
"rc": 0
},
"gid": 0,
"group": "root",
"handler": "TgzArchive",
"mode": "0755",
"owner": "root",
"size": 27,
"src": "/1/1.tar.gz",
"state": "directory",
"uid": 0
}
[root@manager ansible]# ansible node1 -a 'ls -l /2'
node1 | CHANGED | rc=0 >>
总用量 8
-rw-r--r-- 1 root root 241 6月 16 19:40 1.sh
-rw-r--r-- 1 root root 6 6月 8 21:47 q
3.13group模块
group模块:管理远程主机上的组
参数:name="" state=present创建/absent删除 gid=""
创建系统组
[root@manager ~]# ansible node1 -m group -a 'name=rhce state=present system=yes gid=777'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 777,
"name": "rhce",
"state": "present",
"system": true
}
[root@manager ~]# ansible node1 -m shell -a 'cat /etc/group | grep rhce'
node1 | CHANGED | rc=0 >>
rhce:x:777:
3.14user模块
user模块:管理远程主机上的用户,如创建用户、修改用户、删除用户、为用户创建密钥对
参数:name=用户名 group=基本组名 groups=附加组名 shell=默认shell uid="" expires=过期时间 comment=注释 state=present创建/absent删除(当state=absent时,表示删除用户,但不会删除用户的家目录和邮箱等) remove=yes/no(当remove=yes时,表示删除用户连同用户的家目录和邮箱等一块删除) password=密文密码
怎么生成密文密码:
第一种:使用Python模块中的crypt
[root@manager ~]# python
Python 2.7.5 (default, Aug 7 2019, 00:51:29)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-39)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import crypt
>>> crypt.crypt('123456')
'$6$yi6g3T7sxdABJKnM$Fj76qZczUCI6uWrs.VXYjwsXJUvxEmbW0ioYrg0qmASnsmEiX6c1Mqfs5SaxfpKHrIHZFTJPqMuNZQWwk1X5H.'
第二种:使用openssl
[root@manager ~]# openssl passwd -1 -salt $(openssl rand -base64 20) '123456'
$1$8VK7wpLK$/7uTOlD08h2xtMZBXtjUu0
创建用户:创建用户bob,并设置密码 附加组是rhce,系统用户
ansible web -m user -a 'name=bob password=$1$8VK7wpLK$/7uTOlD08h2xtMZBXtjUu0 groups=rhce system=yes’
[root@manager ~]# ansible node1 -m user -a 'name=bob password=$1$8VK7wpLK$/7uTOlD08h2xtMZBXtjUu0 groups=rhce system=yes'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"comment": "",
"create_home": true,
"group": 776,
"groups": "rhce",
"home": "/home/bob",
"name": "bob",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": true,
"uid": 993
}
[root@manager ~]# ansible node1 -m shell -a 'id bob'
node1 | CHANGED | rc=0 >>
uid=993(bob) gid=776(bob) 组=776(bob),777(rhce)
[root@node1 home]# ssh bob@192.168.131.108
The authenticity of host '192.168.131.108 (192.168.131.108)' can't be established.
ECDSA key fingerprint is SHA256:juTwG+tQbTHfoLMqHRgIGcmuyrAxNSvt2WE6IAFoaJI.
ECDSA key fingerprint is MD5:52:87:cd:ee:9c:a5:06:38:db:9c:57:34:f4:bb:ff:3f.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '192.168.131.108' (ECDSA) to the list of known hosts.
bob@192.168.131.108's password:
Last login: Wed Jun 17 18:10:23 2020
[bob@node1 ~]$
为所有被管理机器bob用户生成密钥对:
[root@master ansible]# ansible test -m user -a 'name=bob generate_ssh_key=yes ssh_key_bits=2048 ssh_key_file=.ssh/id_rsa'
3.15cron模块(用户默认为root)
cron模块:管理远程主机中的计划任务,功能相当于crontab命令
参数:name=任务名 hour=小时 minute=分 day=天(默认为*) month=月(默认为*) weekday=周(默认为*) special_time=@reboot/@hourly user= job=命令/脚本 state=absent(根据名称删除某个计划任务) backup=yes/no是否备份
创建定义一个任务,每周五的14点30分执行备份/var
[root@manager ~]# ansible node1 -m cron -a 'name="crontab test" weekday=5 hour=14 minute=30 job="/usr/bin/tar -czf /opt/var.tar.gz /var"'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": [],
"jobs": [
"crontab test"
]
}
删除这个计划任务
[root@manager ~]# ansible node1 -m cron -a 'name="crontab test" state=absent'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"envs": [],
"jobs": []
}
3.16firewalld模块
允许服务:
[root@master ansible]# ansible test -m firewalld -a 'service=http permanent=yes immediate=yes state=enabled'
允许端口:
[root@master ~]# ansible all -m firewalld -a 'port=80/tcp state=enabled immediate=yes permanent=yes'
富规则:允许某个网段
[root@master ~]# ansible all -m firewalld -a 'rich_rule="rule family=ipv4 source address=192.168.131.0/24 service name=http accept" state=enabled immediate=yes permanent=yes'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"msg": "Permanent and Non-Permanent(immediate) operation, Changed rich_rule rule family=ipv4 source address=192.168.131.0/24 service name=http accept to enabled"
}
端口转发:
[root@master ~]# ansible all -m firewalld -a 'rich_rule="rule family=ipv4 forward-port port=443 protocol=tcp to-port=8443" state=enabled immediate=yes permanent=yes'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"msg": "Permanent and Non-Permanent(immediate) operation, Changed rich_rule rule family=ipv4 forward-port port=443 protocol=tcp to-port=8443 to enabled"
}
3.17synchronize模块:在被控机和控制机都需要安装rsync。可以实现增量同步
recursive=yes (表示递归)
delete=yes (表示删除源中没有但目标存在的文件,使两边内容一样,以推送方为主)
[root@master ansible]# ansible all -m yum -a 'name=rsync state=present'
将主控端的文件推送到被控端:
[root@master ansible]# ansible test -m synchronize -a 'src=/etc/hosts dest=/tmp'
将被控端的文件拉取到主控端:mode=pull
[root@master ansible]# ansible test -m synchronize -a 'src=/tmp/hosts dest=/tmp mode=pull' (从被管理结点拉到控制节点)
3.18fetch模块:从被管理控制结点拉取文件到控制结点
[root@master ansible]# ansible test -m fetch -a 'src=/etc/hosts dest=/opt/'
[root@master ansible]# ll /opt/node1/etc/
总用量 4
-rw-r--r-- 1 root root 494 9月 20 11:47 hosts
3.19get_url模块:下载模块
[root@master ~]# ansible all -m get_url -a 'url=http://nginx.org/download/nginx-1.17.8.tar.gz dest=/opt '
3.20parted模块:创建分区:pv
使用parted模块创建一个500M主分区:
[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=1 state=present part_end=500MB'
[root@master ~]# ansible all -m shell -a 'lsblk'
node1 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 476M 0 part
[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=1 state=absent'
使用parted模块创建一个类型为lvm的1G分区:
[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=2 state=present flags=lvm part_end=1GiB'
[root@master ~]# ansible all -m shell -a 'lsblk'
node1 | CHANGED | rc=0 >>
NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT
sda 8:0 0 20G 0 disk
├─sda1 8:1 0 1G 0 part /boot
└─sda2 8:2 0 19G 0 part
├─centos-root 253:0 0 17G 0 lvm /
└─centos-swap 253:1 0 2G 0 lvm [SWAP]
sdb 8:16 0 10G 0 disk
└─sdb1 8:17 0 1023M 0 part
sr0 11:0 1 942M 0 rom /mnt
3.21lvg模块:创建卷组
使用lvg模块利用上面的lvm类型分区创建一个名为myvg的卷组:
[root@master ~]# ansible all -m lvg -a 'vg=myvg pvs=/dev/sdb1'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true
}
[root@master ~]# ansible all -m shell -a 'pvs'
node1 | CHANGED | rc=0 >>
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 myvg lvm2 a-- 1020.00m 1020.00m
[root@master ~]# ansible all -m shell -a 'vgs'
node1 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
myvg 1 0 0 wz--n- 1020.00m 1020.00m
再往myvg卷组添加pv:vg扩容
[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=3 flags=lvm part_start=2GiB part_end=3GiB state=present'
[root@master ~]# ansible all -m parted -a 'device=/dev/sdb number=4 flags=lvm part_start=3GiB part_end=4GiB state=present'
[root@master ~]# ansible all -m lvg -a 'vg=myvg pvs=/dev/sdb1,/dev/sdb2,/dev/sdb3'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true
}
[root@master ~]# ansible all -m shell -a 'pvs'
node1 | CHANGED | rc=0 >>
PV VG Fmt Attr PSize PFree
/dev/sda2 centos lvm2 a-- <19.00g 0
/dev/sdb1 myvg lvm2 a-- 1020.00m 1020.00m
/dev/sdb2 myvg lvm2 a-- 1020.00m 1020.00m
/dev/sdb3 myvg lvm2 a-- 1020.00m 1020.00m
[root@master ~]# ansible all -m shell -a 'vgs'
node1 | CHANGED | rc=0 >>
VG #PV #LV #SN Attr VSize VFree
centos 1 2 0 wz--n- <19.00g 0
myvg 3 0 0 wz--n- <2.99g <2.99g
3.22lvol模块:创建逻辑卷
使用lvol模块在myvg卷组上创建一个名为mylv的逻辑卷,大小为500M:
[root@master ~]# ansible all -m lvol -a 'vg=myvg lv=mylv size=500'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"msg": ""
}
[root@master ~]# ansible all -m shell -a 'lvs'
node1 | CHANGED | rc=0 >>
LV VG Attr LSize Pool Origin Data% Meta% Move Log Cpy%Sync Convert
root centos -wi-ao---- <17.00g
swap centos -wi-ao---- 2.00g
mylv myvg -wi-a----- 500.00m
3.23filesystem模块:格式化文件系统
使用filesystem模块为mylv逻辑卷创建xfs文件系统:
[root@master ~]# ansible all -m filesystem -a 'dev=/dev/myvg/mylv fstype=xfs'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true
}
3.24mount模块:挂载
创建挂载点:
[root@master ~]# ansible all -m file -a 'path=/tools state=directory'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"gid": 0,
"group": "root",
"mode": "0755",
"owner": "root",
"path": "/tools",
"size": 6,
"state": "directory",
"uid": 0
}
挂载mylv到/tools,并设置开机自动挂载:开机自动挂载:state=mounted
[root@master ~]# ansible all -m mount -a 'src=/dev/myvg/mylv path=/tools fstype=xfs state=mounted'
node1 | CHANGED => {
"ansible_facts": {
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": true,
"dump": "0",
"fstab": "/etc/fstab",
"fstype": "xfs",
"name": "/tools",
"opts": "defaults",
"passno": "0",
"src": "/dev/myvg/mylv"
}
[root@master ~]# ansible all -m shell -a 'df -Th'
node1 | CHANGED | rc=0 >>
文件系统 类型 容量 已用 可用 已用% 挂载点
devtmpfs devtmpfs 899M 0 899M 0% /dev
tmpfs tmpfs 910M 0 910M 0% /dev/shm
tmpfs tmpfs 910M 9.6M 901M 2% /run
tmpfs tmpfs 910M 0 910M 0% /sys/fs/cgroup
/dev/mapper/centos-root xfs 17G 5.4G 12G 32% /
/dev/sda1 xfs 1014M 281M 734M 28% /boot
/dev/sr0 iso9660 942M 942M 0 100% /mnt
tmpfs tmpfs 182M 0 182M 0% /run/user/0
/dev/mapper/myvg-mylv xfs 497M 26M 472M 6% /tools
[root@master ~]# ansible all -m shell -a 'tail -1 /etc/fstab'
node1 | CHANGED | rc=0 >>
/dev/myvg/mylv /tools xfs defaults 0 0
3.25setup模块:查看系统信息模块
[root@master ~]# ansible all -m setup
node1 | SUCCESS => {
"ansible_facts": {
"ansible_all_ipv4_addresses": [
"192.168.131.108"
],
"ansible_all_ipv6_addresses": [
"fe80::b6c0:3a78:4c0c:abf8"
],
"ansible_apparmor": {
"status": "disabled"
},
"ansible_architecture": "x86_64",
"ansible_bios_date": "04/13/2018",
"ansible_bios_version": "6.00",
"ansible_cmdline": {
"BOOT_IMAGE": "/vmlinuz-3.10.0-1127.19.1.el7.x86_64",
"LANG": "zh_CN.UTF-8",
"crashkernel": "auto",
"quiet": true,
"rd.lvm.lv": "centos/swap",
"rhgb": true,
"ro": true,
"root": "/dev/mapper/centos-root",
"spectre_v2": "retpoline"
},
也可以,在此基础上过滤出想获得的值:
[root@master ~]# ansible all -m setup -a 'filter=ansible_memory_mb'
node1 | SUCCESS => {
"ansible_facts": {
"ansible_memory_mb": {
"nocache": {
"free": 1393,
"used": 426
},
"real": {
"free": 626,
"total": 1819,
"used": 1193
},
"swap": {
"cached": 0,
"free": 2047,
"total": 2047,
"used": 0
}
},
"discovered_interpreter_python": "/usr/bin/python"
},
"changed": false
}
常用信息
ansible_all_ipv4_addresses:仅显示ipv4的信息
ansible_devices:仅显示磁盘设备信息
ansible_distribution:显示是什么系统,例:centos,suse等
ansible_distribution_version:仅显示系统版本
ansible_machine:显示系统类型,例:32位,还是64位
ansible_eth0:仅显示eth0的信息
ansible_hostname:仅显示主机名
ansible_kernel:仅显示内核版本
ansible_lvm:显示lvm相关信息
ansible_memtotal_mb:显示系统总内存
ansible_memfree_mb:显示可用系统内存
ansible_memory_mb:详细显示内存情况
ansible_swaptotal_mb:显示总的swap内存
ansible_swapfree_mb:显示swap内存的可用内存
ansible_mounts:显示系统磁盘挂载情况
ansible_processor:显示cpu个数(具体显示每个cpu的型号)
ansible_processor_vcpus:显示cpu个数(只显示总的个数)
ansible_python_version:显示python版本