您的位置:首页 > 运维架构 > Shell

【Absible学习】Ansible常用模块---命令类模块

2018-06-27 22:26 537 查看

* 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 4fc8 必须参数,指定需要执行的脚本,脚本位于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]#
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  ansible scripts shell