废话不多说,下面详细介绍ansible常用模块。
1.Ping模块
检测机器的连通性,回复pong,则代表可以ping通。
[root@wanglei ansible]# ansible test -m ping
192.168.211.151 | SUCCESS => {
"changed": false,
"ping": "pong"
}
2.yum模块
这个模块是RedHat / CentOS作为远端节点的OS的时候,用的最多的。Yum是啥就不多说了,RedHat / CentOS包管理工具 ,参数选项有:
name: 软件包的名字,可以带上版本号,可以是url或rpm包的路径
state: present(默认,为安装),latest(最新版本),absent(删除卸载)
[root@wanglei ansible]# ansible test -m yum -a "name=httpd,state=present"
[root@wanglei ansible]# ansible test -m yum -a "name=http://nginx.org/packages/centos/7/x86_64/RPMS/nginx-1.12.1-1.el7.ngx.x86_64.rpm,state=present"
3.copy模块
将控制主机的文件复制到远程主机,参数选项有:
src: 控制主机文件的位置;
dest:远程主机上面的位置;
owner:远程主机该文件的属主;
group:远程主机该文件的属组;
mode:文件权限。
[root@wanglei ~]# ansible test -m copy -a "src=/root/wanglei.txt dest=/root/ owner=wanglei group=wanglei mode=755"
192.168.211.151 | SUCCESS => {
"changed": true,
"checksum": "5292b183afeca75e5c0e2aeda3868194b0f6c79f",
"dest": "/root/wanglei.txt",
"gid": 1000,
"group": "wanglei",
"md5sum": "fc9b1b48464a6ab904d5df2008c92278",
"mode": "0755",
"owner": "wanglei",
"size": 34,
"src": "/root/.ansible/tmp/ansible-tmp-1545459856.26-236770962991326/sourc e",
"state": "file",
"uid": 1000
}
4.user和group模块
user模块是请求的是useradd, userdel, usermod三个指令,goup模块请求的是groupadd, groupdel, groupmod 三个指令。
user模块:
– name:指定用户名。 – createhome:是否创建家目录 yes|no。
– remove:当state=absent时,remove=yes则表示连同家目录一起删除,等价于userdel -r。 – -- state:是创建还是删除。(present,absent)
– groups:指定用户的属组。 – uid:指定用的uid。
[root@wanglei ~]# ansible test -m user -a "name=littleboy state=present createhome=yes"
192.168.211.151 | SUCCESS => {
"changed": true,
"comment": "",
"createhome": true,
"group": 1001,
"home": "/home/littleboy",
"name": "littleboy",
"shell": "/bin/bash",
"state": "present",
"system": false,
"uid": 1001
}
group模块:
– gid:指定用的gid。
– name:指定用户名。
– state:是创建还是删除。(present,absent)
[root@wanglei ~]# ansible test -m group -a "name=littleboy state=present gid=2000"
192.168.211.151 | SUCCESS => {
"changed": true,
"gid": 2000,
"name": "littleboy",
"state": "present",
"system": false
}
5.service 模块
– name:必选项,服务名称
– state:对当前服务执行启动,停止、重启、重新加载等操作(started,stopped,restarted,reloaded)
– enabled:是否开机启动 yes|no, 要求状态(state)和启用(enabled)中至少有一个。
[root@wanglei ~]# ansible test -m service -a "name=firewalld state=stopped enabled=no"
192.168.211.151 | SUCCESS => {
"changed": true,
"enabled": false,
"name": "firewalld",
"state": "stopped",
"status": {
"ActiveEnterTimestamp": "Sat 2018-12-22 14:46:38 CST",
....
}
6.file模块
file模块主要用于远程主机上的文件操作,具体参数有:
– group:定义文件/目录的属组 – mode:定义文件/目录的权限 – owner:定义文件/目录的属主 – path:必选项,定义文件/目录的路径
– state:
directory:如果目录不存在,创建目录
file:即使文件不存在,也不会被创建
touch:如果文件不存在,则会创建一个新的文件,如果文件或目录已存在,则更新其最后修改时间
absent:删除目录、文件或者取消链接文件
# 创建文件,并更改文件所有权,组和模式:
[root@wanglei ~]# ansible test -m file -a "path=/root/boy.txt state=touch owner=wanglei group=wanglei mode=755"
192.168.211.151 | SUCCESS => {
"changed": true,
"dest": "/root/boy.txt",
"gid": 1000,
"group": "wanglei",
"mode": "0755",
"owner": "wanglei",
"size": 0,
"state": "file",
"uid": 1000
}
7.unarchive模块
用于解压文件,模块包含如下选项:
– copy:在解压文件之前,是否先将文件复制到远程主机,默认为yes。若为no,则要求目标主机上压缩包必须存在。
– dest:远程主机上的一个路径,即文件解压的绝对路径。
– group:解压后的目录或文件的属组
– mode:解压后文件的权限
– src:如果copy为yes,则需要指定压缩文件的源路径
– owner:解压后文件或目录的属主
8.command 模块和shell
两者的区别就是:shell支持正则表达式,cmmand不支持正则表达式。
上节举完例子,这里不赘述。
9.fetch模块
与copy模块相反,将远程主机的文件复制到管理主机,主要参数:
– src:远程系统上要获取的文件。 这必须是一个文件,而不是一个目录。 后续版本可能会支持递归提取。
– dest:保存文件的目录
[root@wanglei ~]# ansible test -m fetch -a "src=/root/http.conf dest=/tmp"
192.168.211.151 | SUCCESS => {
"changed": true,
"checksum": "316782077c8f9f17a0e0430ea0e602a6bc775a63",
"dest": "/tmp/192.168.211.151/root/http.conf",
"md5sum": "02c566e1bbc62edce04339c6757a3f35",
"remote_checksum": "316782077c8f9f17a0e0430ea0e602a6bc775a63",
"remote_md5sum": null
}
10.template模块
template使用Jinjia2格式作为文件模版,进行文档内变量的替换的模块。主要参数:
– src:在ansible管理主机上的Jinja2格式化模板的路径。
– dest:远程机器上的位置。
– owner:目标文件属主
– group:目标文件属组
– mode:目标文件的权限模式
[root@wanglei ~]# ansible test -m template -a "src=/root/wanglei.j2 dest=/root/wanglei.conf owner=wanglei group=wanglei mode=742"
192.168.211.151 | SUCCESS => {
"changed": true,
"checksum": "5292b183afeca75e5c0e2aeda3868194b0f6c79f",
"dest": "/root/wanglei.conf",
"gid": 1000,
"group": "wanglei",
"md5sum": "fc9b1b48464a6ab904d5df2008c92278",
"mode": "0742",
"owner": "wanglei",
"size": 34,
"src": "/root/.ansible/tmp/ansible-tmp-1545463341.52-115781869705696/source",
"state": "file",
"uid": 1000
}
11.synchronize模块
– src: 要同步到目的地的源主机上的路径.
– dest:目的地主机上将与源同步的路径.
– mode: push或pull,
[root@wanglei ~]# ansible test -m synchronize -a "src=/etc/yum.repos.d/iso.repo dest=/root/ mode=pull"
192.168.211.151 | SUCCESS => {
"changed": true,
"cmd": "/usr/bin/rsync --delay-updates -F --compress --archive --rsh=/usr/bin/ssh -S none -o StrictHostKeyChecking=no -o UserKnownHostsFile=/dev/null --out-format=<<CHANGED>>%i %n%L 192.168.211.151:/etc/yum.repos.d/iso.repo /root/",
"msg": ">f+++++++++ iso.repo\n",
"rc": 0,
"stdout_lines": [
">f+++++++++ iso.repo"
]
}
总结,ansible常用的模块大概就是这些,从下一节开始将要介绍ansible的playbook的编写。