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

前端之家收集整理的这篇文章主要介绍了【Absible学习】Ansible常用模块---命令类模块前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
  • 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参数执行远程主机目录不存在就不执行脚本,存在就执行脚本。

猜你在找的Bash相关文章