Ansible常用模块
# Ansible常用模块
# ansible-doc
ansible-doc [参数] [模块名]
- 查看ansible模块说明的命令。无参数
- 查看指定模块在剧本中的应用方法。-s [模块名]
查看指定模块的详细说明。-l
列出所有模块使用简介。
# 命令类模块
# command
# command模块用于使远程主机执行命令。
-m command -a "命令"
- 它ansible的默认模块,命令行中可不使用-m指定。
- 需要注意的是,它无法识别变量如$HOME,和<>|;&等字符。
# 参数
无参数
- 直接执行Linux命令,-a "[命令]"
。chdir
- 在执行命令之前先切换目录,-a "chdir=[目录路径] [命令]"
。- 不指定则默认是在用户家目录执行。
creates
- 如果指定的远程主机文件不存在则执行命令,-a "creates=~/test touch test"
。removes
- 如果指定的远程主机文件已存在则执行命令,-a "removes=~/test touch test"
。
# shell
# shell模块也是用于使远程主机执行命令(万能模块)。
shell模块同样是在远程机器上执行命令,但在执行命令时,shell模块指定的命令会由远程主机上的/bin/sh程序进行处理。
因此shell模块支持更多的操作符,如变量和<>|;&等字符。
# 参数
无参数
- 直接执行Linux命令。chdir
- 在执行命令之前先切换目录,不指定则默认在用户家目录执行。creates
- 如果指定的远程主机文件不存在则执行命令。removes
- 如果指定的远程主机文件已存在则执行命令。
# script
# script模块用于在远程主机上运行管理端本地的Shell脚本。
# 参数
无参数
- 直接指定要执行的本地Shell脚本路径chdir
- 在执行脚本之前先切换目录,不指定则默认在用户家目录执行。creates
- 如果指定的远程主机文件不存在则执行命令。removes
- 如果指定的远程主机文件已存在则执行命令。
# 文件类模块
# copy
# copy模块用于将本地文件复制到远程主机。
-m copy -a "src=[本地文件路径] dest=[远程主机路径]"
- 复制目录注意事项
- 源目录没有斜线
/test
,将目录本身及其子文件进行远程传输复制。 - 源目录有斜线
/test/
,不传目录本身只将目录中的子文件进行远程传输复制。
- 源目录没有斜线
# 参数
backup
- 如果远程主机有源文件,传输前是否对源文件进行备份,backup=yes
。owner
- 传输后修改文件属主,owner=[用户名]
。- 需要目标主机有指定用户。
group
- 传输后修改文件属组,group=[组名]
。- 需要目标主机有指定组。
mode
- 传输后修改文件的权限,mode=[权限数值]
。directory_mode
- 传输后递归修改目录及其子文件的权限,directory_mode=[权限数值]
。content
- 使用内容生成文件,不用指定源文件,content='[内容]' dest=[远程文件路径]
。remote_src
- 使用管理主机本地或者远程主机自身的文件,remote_src=yes
。等于yes则表示文件源使用远程主机自身的文件 (远程移动数据)。
等于no则表示文件源使用管理主机本地的文件 (远程传输数据)。
# template
# 将文件数据复制到远程主机,同copy功能大致相同。不同之处在于用template传输文本时,可以替换其中的变量。
-m template -a "src=[本地文件路径] dest=[远程主机路径]"
传输时会将其中的
格式的内容替换成变量对应的值。
# 参数
backup
- 如果远程主机有源文件则先将其进行备份。owner
- 传输后修改文件属主,需要目标主机有指定用户。group
- 传输后修改文件属组,需要目标主机有指定组。mode
- 传输后修改文件的权限。
# fetch
# 批量拉取远程主机的文件到管理主机本地。
-m fetch -a "src=[远程主机文件] dest=[本地保存目录]"
- 会以远程主机作为本地保存文件用的目录名,例如
~/10.0.0.6/test.txt
。
# file
# 修改远程主机文件属性 / 创建指定属性远程主机文件
-m file -a "dest=[远程文件路径] [其他参数]"
# 参数
owner
- 修改文件属主,需要目标主机有指定用户。group
- 修改文件属组,需要目标主机有指定组。mode
- 修改文件权限。recurse
- 递归修改文件属性,recurse=yes/no
,默认为no。state
- 执行的动作。directory
- 创建一个目录。touch
- 创建一个文件。hard
- 创建一个远程文件的硬链接文件,需要使用src指定源。link
- 创建一个远程文件的软连接文件,需要使用src指定源。absent
- 删除一个文件或目录。file
- 检查文件是否存在,绿色表示存在。
# replace
# 使用正则表达式替换远程主机的文件内容。
-m replace -a "path=[远程主机文件] regexp='[匹配内容]' replace='[替换内容]'"
# 参数
path
- 要替换内容的远程主机文件,path=[远程主机文件]
。regexp
- 匹配的正则表达式,例如:regexp='HAHAHA'
。- 要匹配的内容,可正则表达式。
replace
- 最终要替换成的字符串内容,例如:replace='hahaha'
,会替换regexp匹配到的字符串。- 如果未指定该replace参数,则会删除匹配到的内容。
backup
- 替换前是否对源文件进行备份。owner
- 传输后修改文件属主,需要目标主机有指定用户。group
- 传输后修改文件属组,需要目标主机有指定组。mode
- 传输后修改文件的权限。
# unarchive
- 解压文件模块。
-m unarchive -a "src=[压缩文件路径] dest=[远程主机目标目录]"
- 参数
remote_src
- 使用管理主机本地或者远程主机自身的文件,默认为no。等于yes则表示压缩文件源使用远程主机自身的文件。
等于no则表示压缩文件源使用管理主机本地的文件。
# 管理类模块
# yum
# 批量管理远程主机上yum软件
-m yum -a "name=[软件名] state=[执行的动作]"
- state动作的参数单词主要以过去式形式出现。
# 参数
name
- 目标软件名,例如:name=htop
。state
- 执行的动作。present
- 安装软件(默认)。absent
- 卸载软件。
# service
# 批量管理远程主机的服务的运行状态
-m service -a "name=[服务名] state=[执行的动作]"
- 如果服务名的扩展名有多个,则服务名需是完整。例如:
rpcbind.service
、rpcbind.soket
多个扩展名则需要指定完整的服务名。
- 如果服务名的扩展名有多个,则服务名需是完整。例如:
# 参数
state
- 执行的动作。started
- 启动服务。restarted
- 重启服务。stopped
- 停止服务。
enabled
- 指定服务是否开机自启动,enabled=yes/no
。
# mount
# 批量管理远程主机挂载操作。
-m mount -a "src=[挂载源] path=[目标挂载点] fstype=[挂载类型] state=[执行的动作]"
# 参数
src
- 指定远程主机的挂载源,可指定远程主机本地的设备文件,也可指定远程NFS目录,例如10.0.0.41:/data
。path
- 指定远程主机的目标挂载点目录。fstype
- 挂载的文件系统类型。state
- 执行的动作。mounted
- 立即挂载,同时写入fstab文件实现开机自动挂载。absent
- 立即卸载,同时删除fstab文件内的对应挂载信息。unmounted
- 立即卸载,但不删除fstab文件内的挂载信息。
# cron
# 批量设置远程主机的定时任务
-m cron -a "name='[注释名]' [时间参数] job='[命令]'"
# 参数
name
- 指定定时任务注释名。- 可防止重复添加,如果已有一样的注释,则不会再添加。
- 另外我们也可用注释名管理远程主机的定时任务,但ansible只能管理使用ansible定义的定时任务。
时间参数
- 作用同crontab一样,如果想要某个时间为*
,则不指定对应时间参数即可。minute=[分钟]
hour=[小时]
day=[日期]
month=[月份]
weekday=[星期]
job
- 指定定时任务要执行的命令,job='[命令]'
。state
- 执行的动作。不指定动作
- 则默认为添加absent
- 删除定时任务(需指定注释名)。
disabled
- 是否注释定时任务命令,disabled=yes/no
。- 注释同等于关闭,需同时指定job参数及其命令,例如:
job='/bin/ls /etc &> /dev/null'
。
- 注释同等于关闭,需同时指定job参数及其命令,例如:
# user
# 实现批量创建远程主机的用户
-m user -a "name=[用户名] [其他参数]"
- 默认为创建用户。
参数
uid
- 指定用户UID,uid=[指定值]
。group
- 指定用户默认组,group=[指定值]
。groups
- 指定用户扩展组,groups=[指定值]
。create_home
- 指定是否创建家目录,create_home=yes/no
,默认为yes。shell
- 指定用户的shell,shell=[shell方式]
,例如虚拟用户shell=/sbin/nologin
。password
- 指定用户密码。利用user模块指定密码的话,需要将明文转换为密文进行设置。
另外密文由于有$符号,所以需要使用单引号引起动作所有参数,
-a '[参数]'
。# 密码密文信息生成方法 yum install python-pip pip install passlib python -c "form passlib.hash import sha512_crypt; import getpass; print(sha512_crypt.using(rounds=5000).hash(getpass.getpass(密码信息)))"
1
2
3
4
5
6
7
# ping
# 远程管理连接测试
ansible [IP] -m ping
# setup
# 获得主机的详细信息
ansible [主机] -m setup
# 参数
filter
- 过滤指定信息,但只能过滤出大项,filter=[过滤信息]
。- 例如:
filter=ansible_hostname
- 剧本中可以获得子项:
filter=ansible_eth0[ipv4]
- 例如:
# debug
# 在控制端上输出其他动作的返回信息 - 用于剧本
原理是将其他动作执行返回的内容注册成变量,然后执行debug显示变量内容。
- name: date # 执行的命令 shell: date # 将执行输出的信息作为值给一个变量 register: [变量名] - name: print var # ".stdout_lines"的作用是只输出结果中stdout_lines的值,去掉可以看到完整的输出结果。 debug: msg={{ [变量名].stdout_lines }}
1
2
3
4
5
6
7
8
9