版本更新:

  • 系统版本:CentOS Linux release 7.8.2003 (Core)
  • ansible版本:2.9.10

Ansible模块目前有3000多个,但实际经常使用的大概只有二三十个。

command模块

功能:在远程主机执行命令。

ansible默认模块是command,通常-m command可以省略。可修改/etc/ansible/ansible.cfg文件改成其他模块为默认模块。

1
module_name = command

例如:

1
ansible web_server -m command -a 'systemctl restart nginx'

Tips:此模块不支持<>|;;&等,也不支持变量,推荐使用shell模块,命令有局限性,一些命令不一定能执行成功。

shell模块

功能:和command相似,使用shell执行。

例如:

1
ansible web_server -m shell -a 'cat /var/log/nginx/access.log|wc -l'

Tips:使用shell模块执行某些复杂命令也可能会失败,推荐写成脚本,推送到远程服务器再执行。

script模块

功能:在远程主机上运行ansible服务器上的脚本。

也就是在ansible服务端的脚本直接推送到远程服务器上并执行,执行结束后,远程服务器上的这个临时脚本会自动删除。

临时脚本保存的路径:~/.ansible/tmp/

例如:

测试脚本test.sh如下:

1
echo My hostname is $HOSTNAME

执行命令:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
[root@ans_server scripts]#ansible web_server -m script -a '/scripts/test.sh'
192.168.10.31 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.10.31 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.10.31 closed."
],
"stdout": "My hostname is ans_node_1\r\n",
"stdout_lines": [
"My hostname is ans_node_1"
]
}
192.168.10.32 | CHANGED => {
"changed": true,
"rc": 0,
"stderr": "Shared connection to 192.168.10.32 closed.\r\n",
"stderr_lines": [
"Shared connection to 192.168.10.32 closed."
],
"stdout": "My hostname is ans_node_2\r\n",
"stdout_lines": [
"My hostname is ans_node_2"
]
}

copy模块

功能:从ansible服务器主控端复制文件或文件夹到远程主机。

例如:

1
2
3
4
# 复制文件并备份
ansible web_server -m copy -a 'src=wget-log dest=/tmp/ backup=yes'
# 复制文件并备份和修改权限,属主、组(复制目录同样操作)
ansible web_server -m copy -a 'src=wget-log dest=/tmp/ backup=yes mode=777 owner=nobody group=nobody'

fetch模块

功能:从远程主机提取文件到ansible服务器,暂不支持提取目录。

例如:

1
2
# 将客户端的日志文件抓取到server端
ansible web -m fetch -a 'src=/var/log/messages dest=/home/'

file模块

功能:设置文件属性。

例如:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
# 新建文件f3
ansible web -m file -a 'name=/data/f3 state=touch'

# 删除文件f3
ansible web -m file -a 'name=/data/f3 state=absent'

# 新建文件夹dir1
ansible web -m file -a 'name=/data/dir1 state=directory'

# 删除文件夹dir1
ansible web -m file -a 'name=/data/dir1 state=absent'

# 新建文件dir2并设置属主、组
ansible web -m file -a 'name=/data/dir2 state=directory owner=nobody group=nobody'

# 新建软连接文件
ansible web -m file -a 'src=/tmp/wget-log dest=/tmp/123 state=link'

# 删除软连接
ansible web -m file -a 'dest=/tmp/123 state=absent

archive模块

功能:打包压缩。

压缩格式:(Choices: bz2, gz, tar, xz, zip)[Default: gz]

例如:

1
ansible web_server -m archive -a 'path=/logs/web_logs/ dest=/archive/web_logs.tgz'

unarchive模块

功能:解压缩。

两种实现:

  1. 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes;
  2. 将远程主机上某个压缩包解压缩到指定路径下,设置copy=no;

常用参数:

参数 说明
copy 默认为yes,当copy=yes,拷贝的文件是从ansible主机复制到远程主机上,如果设置为copy=no,会在远程主机上寻找src源文件。
remote_src 和copy功能一样且互斥,yes表示在远程主机,不在ansible主机;no表示文件在ansible主机上。
src 源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest 远程主机上的目标路径
mode 设置解压缩的文件权限

例如:

1
ansible web_server unarchive -a 'src=/logs/web_2018.tgz dest=/tmp/web_log'

hostname模块

功能:管理主机名。

例如:

1
ansible 192.168.30.31 -m hostname -a 'name=hello''

cron模块

功能:计划任务。

支持时间:minute(0-59, , /2, etc),**hour(0-23, , /2, etc),**day(1-31, , /2, etc),**month(1-12, , /2, etc),**weekday(0-6 for Sunday-Saturday, *, etc)

例如:

1
2
3
4
5
6
7
8
9
10
11
# 创建任务
ansible web_server -m cron -a 'minute=* hour=* weekday=1-5 name='123' job="echo 123>/tmp/cron.log"'

# 禁用任务,即注释掉计划任务
ansible web_server -m cron -a 'minute=* hour=* weekday=1-5 name='123' job="echo 123>/tmp/cron.log" disabled=yes'

# 启用任务,即取消注释
ansible web_server -m cron -a 'minute=* hour=* weekday=1-5 name='123' job="echo 123>/tmp/cron.log" disabled=no'

# 删除任务
ansible web_server -m cron -a 'name="123" state=absent'

yum模块

功能:管理软件包,只支持CentOS、RHEL、Fedora。

例如:

1
2
3
4
5
# 安装telnet
ansible web_server -m yum -a 'name=telnet state=present'

# 卸载telnet
ansible web_server -m yum -a 'name=telnet state=absent'

service模块

功能:管理服务。

例如:

1
2
3
4
5
# 启动并开机自启nginx服务
ansible web_server -m service -a 'name=nginx state=started enabled=yes'

# 停止nginx服务
ansible web_server -m service -a 'name=nginx state=stopped'

user模块

功能:管理用户。

例如:

1
2
3
4
5
# 创建用户
ansible web_server -m user -a 'name=web1 comment="web user" uid=1024 home=/app/web1 group=root'

# 删除用户及家目录等数据
ansible web_server -m user -a 'name=web1 state=absent remove=yes'

group模块

功能:管理组。

例如:

1
2
3
4
5
# 创建组
ansible web_server -m group -a 'name=web1 gid=88 system=yes'

# 删除组
ansible web_server -m group -a 'name=web1 state=absent'

lineinfile模块

ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换。

功能:相当于sed,可以修改文件内容

例如:

1
2
# 关闭selinux
ansible all -m lineinfile -a "path=/etc/selinux/config regexp='SELINUX=' line='SELINUX=disabled'"

replace模块

功能:基于正则进行匹配和替换,与sed命令类似。

1
2
# 关闭selinux
ansible all -m replace -a "path=/etc/selinux/config regexp='^SELINUX=' replace='SELINUX=disabled'"

setup模块

功能:setup模块来收集主机的系统信息,这些facts信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,可以使用gather_facts: no来禁止ansible收集facts信息。

例如:

1
2
3
4
5
# 获取远程主机的系统信息
ansible web_server -m setup

# 获取远程主机的部分系统信息,例如只获取主机名
ansible web_server -m setup -a 'filter=ansible_nodename'