* command模块
command模块可以在远程主机上执行命令,在远程主机中执行命令时,不会经过远程主机的shell处理,如果需要执行的命令中含有重定向、管道符等操作,这些符号也会失效,比如"<", ">", "|", ";" 和 "&" ,如果远程节点是windows操作系统,则需要使用win_command模块。
模块参数
参数 | 说明 |
---|---|
free_form | 必须参数,指定需要远程执行的命令,"free_form"并不是一个"实际存在"的参数名,如,在远程主机上执行ls命令,并不需要写成"free_form=ls" ,直接写成ls即可,这就是free_form参数的含义,因为command模块的作用是执行命令,任何一个可以在远程主机上执行的命令都可以被称为free_form。 |
chdir | 此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。 |
creates | 当指定的文件存在时,就不执行对应命令,比如,如果/testdir/test文件存在,就不执行我们指定的命令。 |
removes | 与creates参数的作用正好相反,它的作用是当指定的文件不存在时,就不执行对应命令,此参数并不会帮助我们删除文件 |
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "chdir=/app/ansible ls"
10.15.43.15 | SUCCESS | rc=0 >>
chdir
zabbix_discovery_port.sh
zabbix_discovery_port.sh.3933.2018-06-27@06:39:26~
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "pwd"
10.15.43.15 | SUCCESS | rc=0 >>
/home/ywbz
[root@Super ~]#
默认进入的是资源清单中ansible_ssh_user指定的用户家目录,通过chdir参数在执行命令之前,会先进入到指定的目录中,再自行后面的命令
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "chdir=/app/ansible ls"
10.15.43.15 | SUCCESS | rc=0 >>
chdir
zabbix_discovery_port.sh
zabbix_discovery_port.sh.3933.2018-06-27@06:39:26~
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "creates=/app/ansible/zabbix_discovery_port.sh pwd"
10.15.43.15 | SUCCESS | rc=0 >>
skipped, since /app/ansible/zabbix_discovery_port.sh exists
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "creates=/app/ansible/zabbix_discovery_port.sh1 pwd"
10.15.43.15 | SUCCESS | rc=0 >>
/home/ywbz
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "creates=/app/ansible/ pwd"
10.15.43.15 | SUCCESS | rc=0 >>
skipped, since /app/ansible/ exists
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "creates=/app/ansible1/ pwd"
10.15.43.15 | SUCCESS | rc=0 >>
/home/ywbz
[root@Super ~]#
从上面结果可知,当creates参数指定的文件(目录)存在时,就跳过后面的命令,文件(目录)不存在时就执行后面的命令
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "removes=/app/ansible/zabbix_discovery_port.sh pwd"
10.15.43.15 | SUCCESS | rc=0 >>
/home/ywbz
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "removes=/app/ansible/zabbix_discovery_port1.sh pwd"
10.15.43.15 | SUCCESS | rc=0 >>
skipped, since /app/ansible/zabbix_discovery_port1.sh does not exist
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "removes=/app/ansible/ pwd"
10.15.43.15 | SUCCESS | rc=0 >>
/home/ywbz
[root@Super ~]# ansible 10.15.43.15 -S -R root -m command -a "removes=/app/ansible1/ pwd"
10.15.43.15 | SUCCESS | rc=0 >>
skipped, since /app/ansible1/ does not exist
[root@Super ~]#
removes参数和creates参数完全相反。
* shell模块
shell模块在远程主机上执行命令,与command模块不同的是,shell模块在远程主机中执行命令时,会经过远程主机上的/bin/sh程序处理。
模块参数
参数 | 说明 |
---|---|
free_form | 须参数,指定需要远程执行的命令,但是并没有具体的一个参数名叫free_form,和command模块一样。 |
chdir | 此参数的作用就是指定一个目录,在执行对应的命令之前,会先进入到chdir参数指定的目录中。 |
creates | 使用此参数指定一个文件,当指定的文件存在时,就不执行对应命令,可参考command模块中的解释。 |
removes | 使用此参数指定一个文件,当指定的文件不存在时,就不执行对应命令,可参考command模块中的解释。 |
executable | 默认情况下,shell模块会调用远程主机中的/bin/sh去执行对应的命令,通常远程主机中的默认shell是bash,如果使用其他类型的shell执行命令,则可以使用此参数指定某种类型的shell去执行对应的命令,指定shell文件时,需要使用绝对路径。 |
shell模块中chdir、creates、removes参数的作用与command模块中的作用都是相同的。
[root@Super ~]# ansible 10.15.43.15 -S -R root -m shell -a "chdir=/app/ansible ls -l >> test"
10.15.43.15 | SUCCESS | rc=0 >>
[root@Super ~]#
使用shell模块可以在远程服务器上执行命令,它支持管道与重定向等符号,执行的命令都是在远程主机上
- script模块
script模块可以在远程主机上执行ansible主机上的脚本,不需要手动拷贝到远程主机后再执行。
模块参数
参数 | 说明 |
---|---|
free_form | 必须参数,指定需要执行的脚本,脚本位于ansible主机本地,并没有具体的一个参数名叫free_form,具体解释参考command模块。 |
chdir | 此参数的作用就是指定一个远程主机中的目录,在执行对应的脚本之前,会先进入到chdir参数指定的目录中。 |
creates | 指定一个远程主机中的文件,当指定的文件存在时,就不执行对应脚本,可参考command模块中的解释。 |
removes | 指定一个远程主机中的文件,当指定的文件不存在时,就不执行对应脚本,可参考command模块中的解释。 |
[root@Super ~]# ansible 10.15.43.15 -S -R root -m script -a "chdir=/app/ansible /app/download/system-time.sh"
进入远程主机的/app/ansible目录后,再执行ansible主机上/app/download/system-time.sh脚本。
[root@Super ~]# ansible 10.15.43.15 -S -R root -m script -a "creates=/app/ansible /app/download/system-time.sh"
10.15.43.15 | SKIPPED
[root@Super ~]# ansible 10.15.43.15 -S -R root -m script -a "removes=/app/ansible /app/download/system-time.sh"
10.15.43.15 | SUCCESS => {
"changed": true,
creates参数指定远程主机上存在/app/ansible目录就不执行/app/download/system-time.sh脚本,removes参数执行远程主机目录不存在就不执行脚本,存在就执行脚本。
* get_url模块
下载指定文件到指定目录
[root@Super ansible]# ansible 10.15.43.16 -S -R root -m get_url -a 'url=https://openresty.org/download/openresty-1.13.6.2.tar.gz dest=/opt/soft'
10.15.43.16 | SUCCESS => {
"changed": true,
"checksum_dest": null,
"checksum_src": "870055f4698168f1f045de92c467a33361dee5d7",
"dest": "/opt/soft/openresty-1.13.6.2.tar.gz",
"gid": 0,
"group": "root",
"md5sum": "d95bc4bbe15e4b045a0593b4ecc0db38",
"mode": "0664",
"msg": "OK (4635916 bytes)",
"owner": "root",
"size": 4635916,
"src": "/tmp/tmpMWfM9V",
"state": "file",
"status_code": 200,
"uid": 0,
"url": "https://openresty.org/download/openresty-1.13.6.2.tar.gz"
}
[root@Super ansible]# ansible 10.15.43.16 -S -R root -m shell -a 'ls /opt/soft'
10.15.43.16 | SUCCESS | rc=0 >>
openresty-1.13.6.2.tar.gz
[root@Super ansible]#
* uri
Web请求模块,类似执行curl命令,uri模块主要用于发送HTTP协议,通过使用uri模块,可以让目标主机向指定的网站发送如Get、Post这样的HTTP请求,并且能得到返回的状态码。
常用参数:
参数 | 必填 | 默认值 | 选项 | 说明 |
---|---|---|---|---|
HEADER_ | NO | 自定义请求报文中的添加的首部 | ||
Body | NO | 指明报文中实体部分的内容,一般是POST方法或PUT方法时用到 | ||
Creates | NO | 文件名称 | ||
Dest | NO | 文件下载路径 | ||
follow_redirects | NO | no | YES/NO | URI模块是够应该遵循所有的重定向 |
force_basic_auth | 否 | no | yes/no | 强制在发送请求前发出身份验证 |
method | 否 | GET | GET/POST/PUT/HEAD/DELETE/OPTIONS/PATCH/TRACE/CONNECT/REFRESH(必须大写) | 指明请求的方法 |
others | 否 | 文件模块参数 | ||
password | 否 | 如果请求的url需要认证,则认证的密码是什么 | ||
removes | 否 | 需要删除的文件名称 | ||
return_content | 否 | no | yes/no | 返回内容 |
status_code | 否 | 200 | 状态码 | |
timeout | 否 | 30 | 超时时间 | |
url | 是 | 指明请求的url的路径,如:http://10.1.32.68/test.jpg | ||
use | 否 | 如果请求的url需要认证,则认证的用户名是什么 |
例如:
[root@Super ~]# ansible 192.168.100.127 -m uri -a 'url=http://10.10.15.193:8094/queryDirectInvestPath?code=1009241251 method=GET'
* synchronize模块
将主控方文件/目录推送到指定节点的目录下
delete=yes 使两边的内容一样(即以推送方为主)
compress=yes 开启压缩,默认为开启
--exclude=.git 忽略同步.git结尾的文件
dest_port=22 # 指定目的主机的ssh端口,ansible配置文件中的 ansible_ssh_port 变量优先级高于该 dest_port 变量
rsync_path # 指定 rsync 命令来在远程服务器上运行。这个参考rsync命令的--rsync-path参数,
--rsync-path=PATH # 指定远程服务器上的rsync命令所在路径信息
rsync_timeout # 指定 rsync 操作的 IP 超时时间,和rsync命令的 --timeout 参数效果一样
模块默认都是推送push,mode=pull 更改推送模式为拉取模式,模块默认启用了archive参数,该参数默认开启了recursive, links, perms, times, owner,group和-D参数。如果你将该参数设置为no,那么你将停止很多参数,比如会导致如下目的递归失败,导致无法拉取
* unarchive模块
功能:解压缩
两种用法:
1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下copy=yes,本地解压缩,解压缩位置不是默认的目录,没找到或传完删了后传到远程主机
2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下需要设置copy=no,远程主机上面的操作,不涉及ansible服务端
参数:
copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件
src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=no
dest:远程主机上的目标路径,即文件解压的路径
mode:设置解压缩后的文件权限
creates:指定一个文件名,当该文件存在时,则解压指令不执行
group:解压后的目录或文件的属组
list_files:如果为yes,则会列出压缩包里的文件,默认为no,2.0版本新增的选项
owner:解压后文件或目录的属主
[root@Super ansible]# ansible 10.15.43.16 -S -R root -m unarchive -a 'src=/opt/soft/openresty-1.13.6.2.tar.gz copy=no dest=/opt/soft/'
10.15.43.16 | SUCCESS => {
"changed": true,
"dest": "/opt/soft/",
"extract_results": {
"cmd": [
"/usr/bin/gtar",
"--extract",
"-C",
"/opt/soft/",
"-z",
"-f",
"/opt/soft/openresty-1.13.6.2.tar.gz"
],
"err": "",
"out": "",
"rc": 0
},
"gid": 0,
"group": "root",
"handler": "TgzArchive",
"mode": "0755",
"owner": "root",
"size": 65,
"src": "/opt/soft/openresty-1.13.6.2.tar.gz",
"state": "directory",
"uid": 0
}
[root@Super ansible]# ansible 10.15.43.16 -S -R root -m shell -a 'ls /opt/soft'
10.15.43.16 | SUCCESS | rc=0 >>
openresty-1.13.6.2
openresty-1.13.6.2.tar.gz
[root@Super ansible]#