本文共 7563 字,大约阅读时间需要 25 分钟。
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 >>chdirzabbix_discovery_port.shzabbix_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 >>chdirzabbix_discovery_port.shzabbix_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模块在远程主机上执行命令,与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模块可以在远程服务器上执行命令,它支持管道与重定向等符号,执行的命令都是在远程主机上
模块参数
参数 | 说明 |
---|---|
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参数执行远程主机目录不存在就不执行脚本,存在就执行脚本。
下载指定文件到指定目录
[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]#
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的路径,如: | ||
use | 否 | 如果请求的url需要认证,则认证的用户名是什么 |
例如:
[root@Super ~]# ansible 192.168.100.127 -m uri -a 'url=http://10.10.15.193:8094/queryDirectInvestPath?code=1009241251 method=GET'
将主控方文件/目录推送到指定节点的目录下
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,那么你将停止很多参数,比如会导致如下目的递归失败,导致无法拉取
功能:解压缩
两种用法:1、将ansible主机上的压缩包在本地解压缩后传到远程主机上,这种情况下copy=yes,本地解压缩,解压缩位置不是默认的目录,没找到或传完删了后传到远程主机2、将远程主机上的某个压缩包解压缩到指定路径下。这种情况下需要设置copy=no,远程主机上面的操作,不涉及ansible服务端参数:copy:默认为yes,当copy=yes,那么拷贝的文件是从ansible主机复制到远程主机上的,如果设置为copy=no,那么会在远程主机上寻找src源文件src:源路径,可以是ansible主机上的路径,也可以是远程主机上的路径,如果是远程主机上的路径,则需要设置copy=nodest:远程主机上的目标路径,即文件解压的路径 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.2openresty-1.13.6.2.tar.gz[root@Super ansible]#
转载地址:http://nstbl.baihongyu.com/