根据zs官方的分类,将模块按功能分类为:云模块、命令模块、数据库模块、文件模块、资产模块、消息模块、监控模块、网络模块、通知模块、包管理模块、源码控制模块、系统模块、单元模块、web设施模块、windows模块 ,具体可以参看官方页面。
一、ping 模块
测试主机是否在线,在线返回pong
[root@localhost ~]# ansible t3 -m ping
192.168.11.162 | SUCCESS => {
"changed": false,
"failed": false,
"ping": "pong"
}
二、setup 模块
主要用于获取主机信息 :架构信息,IP,时间,域名,网卡,MAC,主机名,CPU等信息。在playbooks里经常会用到的一个参数gather_facts就与该模块相关。setup模块下经常使用的一个参数是filter参数
查看内存信息
[root@localhost ~]# ansible t3 -m setup -a "filter=ansible_*_mb"
192.168.11.162 | SUCCESS => {
"ansible_facts": {
"ansible_memfree_mb": 206,
"ansible_memory_mb": {
"nocache": {
"free": 1224,
"used": 615
},
"real": {
"free": 206,
"total": 1839,
"used": 1633
},
"swap": {
"cached": 0,
"free": 4095,
"total": 4095,
"used": 0
}
},
"ansible_memtotal_mb": 1839,
"ansible_swapfree_mb": 4095,
"ansible_swaptotal_mb": 4095
},
"changed": false,
"failed": false
}
查看内存信息并存到本地/tmp/facts/目录
[root@localhost ~]# ansible t3 -m setup -a "filter=ansible_*_mb" --tree /tmp/facts
[root@localhost ~]# cat /tmp/facts/192.168.11.162
{"ansible_facts": {
"ansible_memfree_mb": 206,
"ansible_memory_mb": {
"nocache": {
"free": 1224,
"used": 615
},
"real": {
"free": 206,
"total": 1839,
"used": 1633
},
"swap": {
"cached": 0,
"free": 4095,
"total": 4095,
"used": 0}
},
"ansible_memtotal_mb": 1839,
"ansible_swapfree_mb": 4095,
"ansible_swaptotal_mb": 4095
},
"changed": false,
"failed": false
}
三、synchronize 模块
使用rsync同步文件
ansible t3 -m synchronize -a "src=/tmp/nginx-1.13.3 dest=/tmp/ rsync_opts='--exclude=configure,--exclude=LICENSE'" ansible t3 -m synchronize -a "src=/tmp/nginx-1.13.3 dest=/tmp/ checksum=yes times=no links=yes rsync_opts='--exclude=configure,--exclude=LICENSE'"
四、command 模块和shell
运行指定的命令
shell 和command 区别:shell模块可以使用特殊字符,command 是不支持的
[root@localhost ~]# ansible t3 -m command -a 'date' 192.168.11.162 | SUCCESS | rc=0 >> 2017年 12月 26日 星期二 15:54:22 CST [root@localhost ~]# ansible t3 -m command -a 'mkdir /tmp/test' [WARNING]: Consider using file module with state=directory rather than running mkdir 192.168.11.162 | SUCCESS | rc=0 >> [root@localhost ~]# ansible t3 -m shell -a 'rm -rf /tmp/test' [WARNING]: Consider using file module with state=absent rather than running rm 192.168.11.162 | SUCCESS | rc=0 >>
五、script 模块 远程主机执行本地脚步
[root@localhost tmp]# ansible t3 -m script -a "/tmp/a.sh"
192.168.11.162 | SUCCESS => {
"changed": true,
"failed": false,
"rc": 0,
"stderr": "Shared connection to 192.168.11.162 closed.
",
"stdout": "Hello
",
"stdout_lines": [
"Hello"
]
}
六、user模块:管理用户的模块
模块参数详解:
name:指定用户名
password:设定用户密码,password参数需要接受md5加密后的值
state:用户状态,默认为present
present:表示添加用户
absent:表示删除用户
update_password:修改用户密码
always:新密码和旧密码不同时进行修改
on_create:为新创建的用户指定密码
createhome:创建家目录
yes:默认项,即创建用户默认是有家目录的
no:创建用户时不创建家目录
remove:
yes:删除用户家目录,需要指定此参数
no:默认项,删除用户时默认不删除用户的家目录
system:
yes:默认创建为普通用户,而非系统用户
如果不指定默认生成的选项有:
home:创建家目录
shell:创建默认的shell为/bin/bash
system:默认创建为普通用户,而非系统用户,指定是用yes
[root@localhost tmp]# ansible-doc -s user #查看帮助信息
user模块中的password是需要经过md5加密的
[root@localhost ~]# echo 123456 |openssl passwd -1 -stdin
$1$XIaOAwgN$up3m2U5i6gIBl87P7iCh60
#添加一个用户
[root@localhost ~]# ansible t3 -m user -a 'name=simon system=yes
password=$1$XIaOAwgN$up3m2U5i6gIBl87P7iCh60 state=present'
192.168.11.162 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"failed": false,
"group": 992,
"home": "/home/simon",
"name": "simon",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"system": true,
"uid": 995
}
#删除一个用户
[root@localhost ~]# ansible t3 -m user -a 'name=simon remove=yes state=absent'
192.168.11.162 | SUCCESS => {
"changed": true,
"failed": false,
"force": false,
"name": "simon",
"remove": true,
"state": "absent",
"stderr": "userdel: simon 邮件池 (/var/spool/mail/simon) 未找到
",
"stderr_lines": [
"userdel: simon 邮件池 (/var/spool/mail/simon) 未找到"
]
}
#更新密码
[root@localhost ~]# echo 654321 | openssl passwd -1
-stdin $1$4IFTCb3k$Oq3i9sKTxU/IZ5HKAVCuO/
[root@localhost ~]# ansible t3 -m user -a 'name=simon
update_password=always password=$1$4IFTCb3k$Oq3i9sKTxU/IZ5HKAVCuO/'
192.168.11.162 | SUCCESS => {
"append": false,
"changed": true,
"comment": "",
"failed": false,
"group": 992,
"home": "/home/simon",
"move_home": false,
"name": "simon",
"password": "NOT_LOGGING_PASSWORD",
"shell": "/bin/bash",
"state": "present",
"uid": 995
}
七、yum模块:任务计划模块
使用yum包管理器来管理软件包,其选项有:
config_file:yum的配置文件
disable_gpg_check:关闭gpg_check
disablerepo:不启用某个源
enablerepo:启用某个源
name:要进行操作的软件包的名字,也可以传递一个url或者一个本地的rpm包的路径
state:状态(present,absent,latest)
present:默认的,表示为安装
lastest:安装为最新的版本
absent:表示删除
#安装最新版本的apache
[root@localhost ~]# ansible test -m yum -a 'name=httpd state=latest'
#移除apache
[root@localhost ~]# ansible test -m yum -a 'name=httpd state=absent'
#安装指定版本
[root@localhost ~]# ansible test -m yum -a 'name=httpd-2.2.29-1.4.amzn1 state=present'
#安装整个Development tools相关的软件包
[root@localhost ~]# ansible test -m yum -a 'name="@Development tools" state=present'
#从一个远程yum仓库安装nginx
[root@localhost ~]# ansible test -m yum -a 'name=
http://nginx.org/packages/centos/6/noarch/RPMS/nginx-release-centos-6-0.el6.ngx.noarch.rpm
state=present'
八、cron模块:任务计划模块
获取帮助:ansibe-doc -s cron
模块参数详解:
state:
present:创建任务
absent:删除任务
backup:对远程主机上的原任务计划内容修改之前做备份
job:要执行的任务
name:该任务的描述(必须项)
user:以哪个用户的身份运行
minute:分钟(0-59,*,*/2,……),默认为*
hour:小时(0-23,*,*/2,……),默认为*
day:日(1-31,*,*/2,……),默认为*
month:月(1-12,*,*/2,……),默认为*
weekday:周(0-7,*,……),默认为*
[root@docker1 ~]# ansible t3 -m cron -a 'name="sync time from ntpserver" minute=*/10
job="/usr/sbin/ntpdate 3.cn.pool.ntp.org"'
192.168.11.162 | SUCCESS => {
"changed": false,
"envs": [],
"failed": false,
"jobs": [
"sync time from ntpserver"
]
}
九、service模块:管理服务
管理服务
options:
arguments: 给命令行提供一些选项,aliases: args
enabled:是否开机启动 yes|no
name: 必须,服务名称
pattern:定义一个模式,如果通过status指令来查看服务的状态时,没有响应,就会通过ps指令在进程中根据该模式进行查找,如果匹配到,则认为该服务依然在运行。
runlevel:运行级别
sleep:如果执行了restarted,在则stop和start之间沉睡几秒钟
state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
use:服务模块实际上使用系统特定的模块,通常是自动检测,这个设置可以强制一个特定的模块。通常情况下,使用ansible_service_mgr 的值,并在找不到匹配的情况下推到旧的服务模块
# 启动nginx服务,没有运行则启动 [root@docker1 ~]# ansible t3 -m service -a "name=nginx state=started enabled=yes" # 停止nginx服务 [root@docker1 ~]# ansible t3 -m service -a "name=nginx state=stopped" # 重启nginx 服务 [root@docker1 ~]# ansible t3 -m service -a "name=nginx state=restarted" # 重新加载 [root@docker1 ~]# ansible t3 -m service -a "name=nginx state=reloaded" # 启动服务foo [root@docker1 ~]# ansible t3 -m service -a "name=foo pattern=/usr/bin/foo state=started" # 重启eth0 网卡 [root@docker1 ~]# ansible t3 -m service -a "name=network state=restarted args=eth0"
十、unarchive模块:用于解压文件
options:
copy: 在解压文件之前,是否先将文件复制到远程主机,默认为yes,no 则要求目标主机上压缩包必须存在。
creates:指定一个文件名,当改文件存在时,则解压指令不执行。
dest: 远程主机上的一个路径,即文件解压的路径
grop:解压后的目录或文件的属组
list_files: yes,则会列出压缩包里的文件,默认为no
mode: 解压后文件的权限
src:如果copy为yes ,则需要指定压缩文件的源路径。
owner: 解压后文件或目录的属主
- name: Extract foo.tgz into /var/lib/foo
unarchive:
src: foo.tgz
dest: /var/lib/foo
- name: Unarchive a file that is already on the remote machine
unarchive:
src: /tmp/foo.zip
dest: /usr/local/bin
remote_src: yes
- name: Unarchive a file that needs to be downloaded (added in 2.0)
unarchive:
src: https://example.com/example.zip
dest: /usr/local/bin
remote_src: yes