1. Ansible模块
Ansible模块特别多,下面主要介绍一些常用的模块。
[root@CentOS7 ~]# ansible-doc -l | wc -l
1378
1.1 ping模块
用于检查指定节点机器是否还能连通。ping模块并不是基于ICMP协议的。
[root@CentOS7 ~]# ansible all -m ping
192.168.146.111 | SUCCESS => {
"changed": false,
"ping": "pong"
}
192.168.146.112 | SUCCESS => {
"changed": false,
"ping": "pong"
}
1.2 command
默认的模块。不会通过shell进行处理,因此如$、<、>、&、|、;等特殊符号不会被执行。
常用参数:
- chdir参数:在运行对应命令前,会先进入chdir参数指定的目录
- creates参数:与removes相反。当指定的文件存在时,跳过这一步,不执行对应命令;当指定的文件不存在时,执行对应的命令。
- removes参数:与creates相反,当指定的文件不存在时,就不执行对应的命令;当指定的文件存在时,就执行对应的命令。
- free_form参数:需要执行的指令(没有真正的参数为free_form)
- stdin参数:将命令的stdin直接设置为指定的值。
- warn参数:如果ansible配置文件中定义了命令警告,如果参数设置为no/False,将不会警告此命令
例1:列出root用户根目录下的文件
[root@CentOS7 ~]# ansible all -m command -a 'chdir=/root ls'
192.168.146.112 | SUCCESS | rc=0 >>
anaconda-ks.cfg
a.txt
server.sh
192.168.146.111 | SUCCESS | rc=0 >>
0a7add1d9996.tar.bz2
anaconda-ks.cfg
a.txt
server.sh
1.3 shell模块
与command类似,用shell执行命令,但shell模块支持如$、<、>、&、|、;等特殊符号。
常用参数:
- chdir参数:在运行对应命令前,会先进入chdir参数指定的目录
- exectualbe参数:切换shell来执行命令,需使用命令的绝对路径
- creates参数:与removes相反。当指定的文件存在时,跳过这一步,不执行对应命令;当指定的文件不存在时,执行对应的命令。
- removes参数:与creates相反,当指定的文件不存在时,就不执行对应的命令;当指定的文件存在时,就执行对应的命令。
- free_form参数:需要执行的指令(没有真正的参数为free_form)
- stdin参数:将命令的stdin直接设置为指定的值。
例1:输出远程主机的主机名
[root@CentOS7 ~]# ansible all -m shell -a 'echo $HOSTNAME'
192.168.146.112 | SUCCESS | rc=0 >>
Server2
192.168.146.111 | SUCCESS | rc=0 >>
Server1
1.4 file模块
file模块用于设定文件属性和创建文件的符号链接
常用参数:
- state参数:state=directory:如果目录不存在,则创建目录;
state=file:即使文件不存在也不会被创建;
state=link:创建软连接;
state=hard:创建硬链接;
state=touch:如果文件不存在,则会创建一个新的文件;如果文件文件或目录已经存在,则更新其最后修改时间;
state=absent:删除目录、文件或删除链接文件
- path参数:定义文件/目录的路径(必选项),也可用dest、name
- owner参数:定义文件/目录的属主
- group参数:定义文件/目录的属组
- mode参数:定义文件/目录的权限
- recurse参数:递归设置文件的属性,只对目录有效
- src参数:要被链接的源文件路径,只应用于state=link的情况
- dest参数:被链接到的路径,只应用于state=link的情况
- force参数:需要在两种情况下强制创建软连接。一种是源文件不存在但之后会建立的情况下;另一种是目标链接已存在,需要先取消之前的软连接,然后创建新的软连接,有两个选项:yes、no
例1:创建目录:
[root@CentOS7 ~]# ansible all -m file -a 'path=/tmp/dir1 state=directory'
192.168.146.112 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "0755",
"owner": "root",
"path": "/tmp/dir1",
"size": 6,
"state": "directory",
"uid": 0
}
192.168.146.111 | SUCCESS => {
"changed": true,
"gid": 0,
"group": "root",
"mode": "0755",
"owner": "root",
"path": "/tmp/dir1",
"size": 6,
"state": "directory",
"uid": 0
}
查看创建的目录:
[root@CentOS7 ~]# ansible all -m shell -a 'ls -ld /tmp/dir1'
192.168.146.112 | SUCCESS | rc=0 >>
drwxr-xr-x 2 root root 6 8月 15 09:37 /tmp/dir1
192.168.146.111 | SUCCESS | rc=0 >>
drwxr-xr-x 2 root root 6 8月 15 09:37 /tmp/dir1
例2:创建文件:
[root@CentOS7 ~]# ansible all -m file -a 'path=/tmp/file state=touch'
192.168.146.112 | SUCCESS => {
"changed": true,
"dest": "/tmp/file",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
192.168.146.111 | SUCCESS => {
"changed": true,
"dest": "/tmp/file",
"gid": 0,
"group": "root",
"mode": "0644",
"owner": "root",
"size": 0,
"state": "file",
"uid": 0
}
查看创建的文件:
[root@CentOS7 ~]# ansible all -m shell -a 'ls -l /tmp/file '
192.168.146.112 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 0 8月 15 09:34 /tmp/file
192.168.146.111 | SUCCESS | rc=0 >>
-rw-r--r-- 1 root root 0 8月 15 09:34 /tmp/file
例3:创建软连接:
[root@CentOS7 ~]# ansible all -m file -a 'src=/etc/passwd dest=passwd.link state=link'
192.168.146.112 | SUCCESS => {
"changed": true,
"dest": "passwd.link",
"gid": 0,
"group": "root",
"mode": "0777",
"owner": "root",
"size": 11,
"src": "/etc/passwd",
"state": "link",
"uid": 0
}
192.168.146.111 | SUCCESS => {
"changed": true,
"dest": "passwd.link",
"gid": 0,
"group": "root",
"mode": "0777",
"owner": "root",
"size": 11,
"src": "/etc/passwd",
"state": "link",
"uid": 0
}
查看创建的软链接
[root@CentOS7 ~]# ansible all -m shell -a 'ls -l passwd.link'
192.168.146.112 | SUCCESS | rc=0 >>
lrwxrwxrwx 1 root root 11 8月 15 09:40 passwd.link -> /etc/passwd
192.168.146.111 | SUCCESS | rc=0 >
lrwxrwxrwx 1 root root 11 8月 15 09:40 passwd.link -> /etc/passwd
删除软连接:
[root@CentOS7 ~]# ansible all -m file -a 'dest=passwd.link state=absent'
192.168.146.112 | SUCCESS => {
"changed": true,
"path": "passwd.link",
"state": "absent"
}
192.168.146.111 | SUCCESS => {
"changed": true,
"path": "passwd.link",
"state": "absent"
}
1.5 copy模块
用来将本地文件复制到被控节点
常用参数:
- src参数:要复制到远程住居的文件在本机的地址,可以是绝对路径或者相对路径。如果路径是一个目录,它将递归复制。在这种情况下,若使用“/”结尾,则只复制目录里的内容;如果没有使用“/”来结尾,则包含目录在内的整个内容全部复制,类似于rsync
- dest参数:将源文件复制到远程主机的绝对路径。若源文件是个目录,那么目标文件也是个目录。
- mode参数:
- owner参数:
- directory_mode参数:递归设定目录的权限,默认为系统默认权限
- backup参数:在覆盖之间将源文件备份,备份文件包含时间信息,有两个选项:yes、no
- content参数:当不使用src指定拷贝的文件时,可以使用content直接指定文件内容,src与content两个参数必有其一,否则会报错。
- backup参数:当远程主机的目标路径中已经存在同名文件,并且与ansible主机中的文件内容不同时,是否对远程主机的文件进行备份,可选值yes/no。当值为yes时,会先备份远程主机中的文件,然后再将ansible主机中的文件拷贝到远程主机。
例1:复制文件到远程主机
[root@CentOS7 ~]# ansible 192.168.146.112 -m copy -a 'src=/root/test.sh dest=/opt/'
192.168.146.112 | SUCCESS => {
"changed": true,
"checksum": "5810f53a8dd7e48378290a6328ddf0ef8a822199",
"dest": "/opt/test.sh",
"gid": 0,
"group": "root",
"md5sum": "664d0430ee33458602e580520841a2d4",
"mode": "0644",
"o