Ansible:常用模块
版本更新:
- 系统版本:
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 | [root@ans_server scripts]#ansible web_server -m script -a '/scripts/test.sh' |
copy模块
功能:从ansible服务器主控端复制文件或文件夹到远程主机。
例如:
1 | # 复制文件并备份 |
fetch模块
功能:从远程主机提取文件到ansible服务器,暂不支持提取目录。
例如:
1 | # 将客户端的日志文件抓取到server端 |
file模块
功能:设置文件属性。
例如:
1 | # 新建文件f3 |
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模块
功能:解压缩。
两种实现:
- 将ansible主机上的压缩包传到远程主机后解压缩至特定目录,设置copy=yes;
- 将远程主机上某个压缩包解压缩到指定路径下,设置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 | # 创建任务 |
yum模块
功能:管理软件包,只支持CentOS、RHEL、Fedora。
例如:
1 | # 安装telnet |
service模块
功能:管理服务。
例如:
1 | # 启动并开机自启nginx服务 |
user模块
功能:管理用户。
例如:
1 | # 创建用户 |
group模块
功能:管理组。
例如:
1 | # 创建组 |
lineinfile模块
ansible在使用sed进行替换时,经常会遇到需要转义的问题,而且ansible在遇到特殊符号进行替换时,存在问题,无法正常进行替换。
功能:相当于sed,可以修改文件内容
例如:
1 | # 关闭selinux |
replace模块
功能:基于正则进行匹配和替换,与sed命令类似。
1 | # 关闭selinux |
setup模块
功能:setup模块来收集主机的系统信息,这些facts信息可以直接以变量的形式使用,但是如果主机较多,会影响执行速度,可以使用gather_facts: no
来禁止ansible收集facts信息。
例如:
1 | # 获取远程主机的系统信息 |