- 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参数执行远程主机目录不存在就不执行脚本,存在就执行脚本。