第1章 ansible的模块以及参数讲解
1.1 ansible的模块说明
常用模块 | 模块说明 |
---|---|
command | 执行命令模块,ansible命令执行的默认模块 |
shell | 执行shell命令模块 |
script | 执行脚本在远端服务器上(本地服务器上没有脚本) |
copy | 把本地文件拷贝到远端服务器 |
file | 设定文件(目录)属性模块 |
service | 系统服务管理模块(CentOS6使用) |
systemd | 系统服务管理模块(CentOS7使用) |
cron | 定时任务管理模块 |
yum | yum软件包安装管理模块 |
mount | 挂载设备管理模块 |
user | 用户管理模块 |
1.2 ansible的模块说明
1.2.1 配置ansible主机列表,以下所有例子都使用此主机列表
[root@m01 ~]$ cat /etc/ansible/hosts
[oldboy]
172.16.1.31
172.16.1.41
1.2.2 shell模块功能说明
功能说明:执行一个命令在远程节点上
官方链接:http://docs.ansible.com/ansible/latest/shell_module.html
1、 可以支持> < | &等特殊符号,并且可以同时执行多条命令
例如:一条命令查看远端的内存和eth1的IP
[root@m01 ~]$ ansible oldboy -m shell -a "free -m;ifconfig eth1"
172.16.1.31 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 106 738 7 127 716
Swap: 767 0 767
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.1.31 netmask 255.255.0.0 broadcast 172.16.255.255
inet6 fe80::2ab4:7695:6d12:6e55 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:c9:33:b4 txqueuelen 1000 (Ethernet)
RX packets 389 bytes 307066 (299.8 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 271 bytes 33736 (32.9 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
172.16.1.41 | CHANGED | rc=0 >>
total used free shared buff/cache available
Mem: 972 100 745 7 126 724
Swap: 767 0 767
eth1: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 172.16.1.41 netmask 255.255.0.0 broadcast 172.16.255.255
inet6 fe80::6f63:e4ca:a29a:1712 prefixlen 64 scopeid 0x20<link>
ether 00:0c:29:4f:d0:0d txqueuelen 1000 (Ethernet)
RX packets 391 bytes 307134 (299.9 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 271 bytes 33604 (32.8 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
2、远程执行脚本:脚本必须在远端存在
远端脚本内容:
[root@nfs01 ~]$ cat /server/scripts/test.sh
#!/bin/bash
for n in {1..5}
do
echo $n
done
执行:
[root@m01 ~]$ ansible oldboy -m shell -a "/bin/sh /server/scripts/test.sh"
172.16.1.31 | CHANGED | rc=0 >>
1
2
3
4
5
172.16.1.41 | CHANGED | rc=0 >>
1
2
3
4
5
1.2.3 script模块功能说明
功能说明:在远程节点上运行本地脚本
官方链接:http://docs.ansible.com/ansible/latest/script_module.html
实践:远端运行本地脚本
查看本地脚本内容:
#!/bin/bash
for n in {6..10}
do
echo $n
done
执行:
[root@m01 ~]$ ansible oldboy -m script -a "/server/scripts/test.sh"
172.16.1.31 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.16.1.31 closed.\r\n",
"stderr_lines": [
"Shared connection to 172.16.1.31 closed."
],
"stdout": "6\r\n7\r\n8\r\n9\r\n10\r\n",
"stdout_lines": [
"6",
"7",
"8",
"9",
"10"
]
}
172.16.1.41 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 172.16.1.41 closed.\r\n",
"stderr_lines": [
"Shared connection to 172.16.1.41 closed."
],
"stdout": "6\r\n7\r\n8\r\n9\r\n10\r\n",
"stdout_lines": [
"6",
"7",
"8",
"9",
"10"
]
}
1.2.4 copy模块功能说明
功能说明:复制文件到远程主机
官方链接:http://docs.ansible.com/ansible/latest/copy_module.html
模块参数 | 说明 |
---|---|
src | 文件在本地的路径(可以是绝对路径,也可以是相对路径) 如果路径以“/”结束,只将该目录下的内容拷贝到目的地 如果路径不以“/”结束,那么目录和目录下的内容都会被复制 |
dest | 文件拷贝到远端的绝对路径 |
owner | 定义文件或目录在远端主机的属主名称 |
group | 定义文件或目录在远端主机的属组名称 |
mode | 定义文件或目录在远端主机的权限信息 |
backup | 创建一个包含时间戳信息的备份文件,默认为no,创建备份文件为yes |
content | 代替src参数时,将文件内容直接设置为指定值,并且只能设置简单值 |
force | 默认为yes,当远程文件内容和源文件内容不同时,将覆盖目标文件 |
参数实践:
1、将本地的/etc/hosts文件拷贝到远程主机的/tmp目录下,并且设置权限为755。
[root@m01 ~]$ ansible oldboy -m copy -a "src=/etc/hosts dest=/tmp/ mode=755"
172.16.1.31 | CHANGED => {
"changed": true,
"checksum": "e52c528913b5c22d388cc2a18f6943641c8442c3",
"dest": "/tmp/hosts",
"gid": 0,
"group": "root",
"md5sum": "fa2c31e4614da1256984a0307ba4f31f",
"mode": "0755",
"owner": "root",
"size": 332,
"src": "/root/.ansible/tmp/ansible-tmp-1556176066.11-6180630705927/source",
"state": "file",
"uid": 0
}
172.16.1.41 | CHANGED => {
"changed": true,
"checksum": "e52c528913b5c22d388cc2a18f6943641c8442c3",
"dest": "/tmp/hosts",
"gid": 0,
"group": "root",
"md5sum": "fa2c31e4614da1256984a0307ba4f31f",
"mode": "0755",
"owner": "root",
"size": 332,
"src": "/root/.ansible/tmp/ansible-tmp-1556176066.12-240612656636195/source",
"state": "file",
"uid": 0
}
查看结果:
[root@nfs01 /tmp]$ ll
总用量 4
-rwxr-xr-x 1 root root 332 4月 25 15:07 hosts
[root@backup /tmp]$ ll
总用量 4
-rwxr-xr-x 1 root root 332 4月 25 15:07 hosts
2、在第一个例子的前提下,将oldboy写入到远程主机的/tmp/hosts文件中,将属主和属组设为oldboy并备份:
[root@m01 ~]$ ansible oldboy -m copy -a "content=oldboy dest=/tmp/hosts owner=oldboy group=oldboy backup=yes"
172.16.1.31 | CHANGED => {
"backup_file": "/tmp/hosts.10398.2019-04-25@15:17:59~",
"changed": true,
"checksum": "da3a7ab3551120059810d0c7156a8150a0bc245a",
"dest": "/tmp/hosts",
"gid": 1000,
"group": "oldboy",
"md5sum": "890b185727556f1be31d7fe5ee5ce4dc",
"mode": "0755",
"owner": "oldboy",
"size": 6,
"src": "/root/.ansible/tmp/ansible-tmp-1556176677.67-124571767570836/source",
"state": "file",
"uid": 1000
}
172.16.1.41 | CHANGED => {
"backup_file": "/tmp/hosts.10977.2019-04-25@15:17:59~",
"changed": true,
"checksum": "da3a7ab3551120059810d0c7156a8150a0bc245a",
"dest": "/tmp/hosts",
"gid": 1000,
"group": "oldboy",
"md5sum": "890b185727556f1be31d7fe5ee5ce4dc",
"mode": "0755",
"owner": "oldboy",
"size": 6,
"src": "/root/.ansible/tmp/ansible-tmp-1556176677.68-215982150895297/source",
"state": "file",
"uid": 1000
查看结果:
[root@nfs01 /tmp]$ ll
总用量 8
-rwxr-xr-x 1 oldboy oldboy 6 4月 25 15:17 hosts
-rwxr-xr-x 1 root root 332 4月 25 15:11 hosts.10398.2019-04-25@15:17:59~
1.2.5 file模块功能说明
功能说明:设置文件属性
官方链接:http://docs.ansible.com/ansible/latest/file_module.html
模块参数 | 说明 |
---|---|
src | 要链接的文件路径(只能应用state=link),创建链接文件时使用 |
path | 远端创建的文件路径 |
owner | 定义文件或目录的属主名称 |
group | 定义文件或目录的属组名称 |
mode | 定义文件或目录的权限信息 |
recurse | 递归授权 |
state= | 指定参数touch:创建文件或更新时间戳信息 指定参数directory:创建目录 指定参数absent:目录以及文件被递归删除 指定参数link:创建或更改软链接 指定参数hard:创建硬链接 |
注:file模块可以使用command模块代替。
替代方案:
ansible oldboy -m command -a " mkdir /tmp/oldboy warn=false "
ansible oldboy -m command -a " touch /tmp/oldboy warn=false "
ansible oldboy -m command -a "chmod 644 /etc/hosts warn=false"
ansible oldboy -m command -a "chown oldboy.oldboy /etc/hosts warn=false"
举例对比说明:
1、创建目录:
mkdir /tmp/oldboy_dir
ansible oldboy -m file -a "dest=/tmp/oldboy_dir state=directory"
2、递归设置权限:
ansible oldboy -m file -a "dest=/tmp/oldboy_dir state=directory mode=644 recurse=yes"
3、创建文件:
touch /tmp/oldboy_file
ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch"
4、删除文件:
rm -f /tmp/oldboy_file
ansible oldboy -m file -a "dest=/tmp/oldboy_file state=absent"
5、创建链接文件:
ln -s /etc/hosts /tmp/link_file
ansible oldboy -m file -a "src=/etc/hosts dest=/tmp/link_file state=link"
6、更改文件属组、属主和权限
ansible oldboy -m file -a "dest=/tmp/oldboy_file state=touch owner=oldboy group=oldboy mode=644"
1.2.6 systemd模块功能说明
功能说明:启动停止服务
官方链接:http://docs.ansible.com/ansible/latest/service_module.html
模块参数 | 说明 | |
---|---|---|
name | 想要管理的服务的名称 | |
state | 想要管理的服务的状态,包括started、stopped、restarted | |
enable | 是否开机自启动,状态为yes | no |
实践:
[root@m01 ~]$ ansible oldboy -m systemd -a "name=crond.service enabled=no state=stopped "
[root@nfs01 ~]$ ansible oldboy -m command -a "systemctl status crond"
[root@m01 ~]$ ansible oldboy -m systemd -a "name=crond.service enabled=yes state=started"
1.2.7 cron模块功能说明
功能说明:管理定时任务条目信息模块
官方链接:http://docs.ansible.com/ansible/latest/cron_module.html
模块参数 | 说明 |
---|---|
name | 对想要执行的定时任务的描述 |
minute | 运行定时任务的分钟时间信息 |
hour | 运行定时任务的小时时间信息 |
day | 运行定时任务的日期时间信息 |
month | 运行定时任务的月份时间信息 |
weekday | 运行定时任务的星期时间信息 |
job | 运行的定时任务内容 |
state | 参数为absent是删除定时任务 |
disabled | 参数为yes是注释掉定时任务 |
backup | 在修改定时任务前进行备份 |
示例1:添加如下定时任务:
05 03 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1
命令如下:
ansible oldboy -m cron -a "name='backup data' minute=05 hour=03 job='/bin/sh /server/scripts/backup.sh >/dev/null 2>&1'"
结果:
#Ansible: backup data
05 03 * * * /bin/sh /server/scripts/backup.sh >/dev/null 2>&1
示例2:删除定时任务:
ansible oldboy -m cron -a "name='backup data' state=absent"
1.2.8 yum模块功能说明
功能说明:yum包管理模块
官方链接:http://docs.ansible.com/ansible/latest/yum_module.html
模块参数 | 说明 |
---|---|
name | 需要安装的软件包名称信息 |
state | 是安装(present or installed)或者卸载(absent or removed) |
注意:不要使用yum卸载,如果要卸载,就用rpm -e卸载。
示例:安装Nginx服务
ansible oldboy -m yum -a "name=nginx state=installed"
检查结果:
[root@nfs01 oldboy_dir]# rpm -qa nginx
nginx-1.10.2-1.el6.x86_64