1、命令执行模块-command
在远程节点上运行命令。
命令模块使用命令名称,接上空格-的分割符作为参数使用,但是不支持管道符和变量等,如果要使用这些,那么可以使用shell模块。
参数 | 必填 | 默认 | 选项 | 说明 |
Chdir | No |
|
| 更换目录 |
Creates | No |
|
| 当文件名已经存在的时候,此步不会执行 |
Executable | No |
|
| 换用shell执行命令,表示为一个绝对路径 |
Free_form | Yes |
|
| 需要执行的脚本(没有真正的参数为free_form) |
Removes | No |
|
| 当文件名称存在的时候,此步不会执行 |
Warn | No | True |
| 如果在ansible.cfg中存在告警,如果设定了no/False,不会警告此行 |
1.1 列出目录的文件
[root@ansibleserver tmp]# ansible pythonserver -a "ls -l chdir=/tmp creates=kel.conf" SSH password: 192.168.1.60 | success | rc=0 >> total 8 -rw------- 1 root root 29 Jan 19 15:13 kel -rw-r--r-- 1 root root 16 Jan 19 15:13 kel.2016-01-19@15:13~ |
在这个里面,首先更换目录到tmp目录中,然后查看kel.conf是否存在,如果存在,那么命令不会执行;如果不存在,那么执行命令,在这里也可以看到,命令是必须存在的,但是没有参数名为free_form参数
1.2 切换目录创建文件
[root@ansibleserver tmp]# ansible pythonserver -a "touch kel.conf chdir=/tmp" SSH password: 192.168.1.60 | success | rc=0 >> |
以上的命令表示为更换目录到tmp中,然后创建文件kel.conf
在使用ansible中的时候,默认的模块是-m command,从而模块的参数不需要填写,直接使用即可。
1.3 不支持管道符等操作
[root@ansibleserver tmp]# ansible pythonserver -a "cat /tmp/kel.conf >/tmp/111" SSH password: 192.168.1.60 | FAILED | rc=1 >> cat: >/tmp/111: No such file or directory |
目录和文件都是存在的,但是依然报错不存在目录或者文件,从而在command命令中是不支持管道符和其他的一些操作的,在使用这些命令的时候,可以选择使用shell模块
2、 shell模块
在远程节点上执行命令。在执行命令的时候使用的是/bin/sh。
参数 | 必填 | 默认 | 选择 | 说明 |
Chdir | No |
|
| 修改当前目录 |
Creates | No |
|
| 当文件名已经存在的时候,此步不会执行 |
Executable | No |
|
| 换用shell执行命令,表示为一个绝对路径 |
Free_form | Yes |
|
| 需要执行的脚本(没有真正的参数为free_form) |
Removes | No |
|
| 当文件名称存在的时候,此步不会执行 |
Warn | No | True |
| 如果在ansible.cfg中存在告警,如果设定了no/False,不会警告此行 |
2.1 执行命令保存输出
[root@ansibleserver tmp]# ansible pythonserver -m shell -a "sh /tmp/kel.sh >>/tmp/kel.log" SSH password: 192.168.1.60 | success | rc=0 >> |
执行远程机器上的脚本,脚本目录为/tmp/kel.sh,然后将执行命令的结果存放在路径/tmp/kel.log中,注意在进行保存文件的时候,写上全路径,否则就会保存在登录之后的默认路径中。
2.2 换成路径然后执行命令
[root@ansibleserver tmp]# ansible pythonserver -m shell -a "sh /tmp/kel.sh >>kelly.log chdir=/tmp" SSH password: 192.168.1.60 | success | rc=0 >> |
可以看到修改之后的目录,然后再执行命令。
3、脚本执行模块-script
将script传送到远程主机之后,执行。此模块的执行,在远程主机上,不需要python环境
参数 | 必填 | 默认 | 选择 | 说明 |
Creates | No |
|
| 当文件名已经存在的时候,此步不会执行 |
Free_form | Yes |
|
| 需要执行的脚本(没有真正的参数为free_form) |
Removes | No |
|
| 当文件名称存在的时候,此步不会执行 |
3.1 在远程主机上执行脚本
[root@ansibleserver tmp]# ansible pythonserver -m script -a "/tmp/kel.sh >/tmp/kelkel.log" SSH password: 192.168.1.60 | success >> { "changed": true, "rc": 0, "stderr": "", "stdout": "" } |
脚本kel.sh在本机上,然后将脚本远程传送到pythonserver主机中,然后执行这个脚本,从而将执行的结果保存在全路径的文件kelkel.log中,在保存文件的时候,最好用全路径
4、 ssh命令执行模块-raw
此模块的执行,在远程主机上,不需要python环境,主要是用来执行脏的ssh命令。
参数 | 必填 | 默认 | 选择 | 说明 |
Free_form | Yes |
|
| 需要执行的脚本(没有真正的参数为free_form) |
Removes | No |
|
| 当文件名称存在的时候,此步不会执行 |
主要使用raw的原因是,如果老版本的python中,那么就需要用raw;如果客户端是路由器的话,那么没有python模块的话,那么就必须要使用raw模块
raw很多地方和shell和command相似,更多推荐的地方使用的是shell和command模块
出处:https://www.cnblogs.com/kellyseeme/p/5525085.html
Ansible 命令执行模块(学习笔记九)
command、raw
1、command为系统默认模块,使用时可以直接省略:
ansible all -a "pwd"
image.png
2、转换到别的目录中,执行程序,chdir为command模块自带的参数:
ansible all -a "pwd chdir=/tmp"
image.png
3、command不支持管道命令:
image.png
4、raw和command类似,两个模块都是调用远程主机的指令,但是raw支持管道命令:
ansible all -m raw -a "cd /tmp;pwd"
image.png
shell、script
5、shell模块调用远程主机的指令,支持shell特性,包括执行脚本、管道命令等:
ansible all -m shell -a "cd /tmp;pwd"
image.png
6、shell直接执行脚本,执行的脚本放在远程主机上:
ansible all -m shell -a "/root/test.sh"
iamge.png
7、script只能执行脚本,不能调用其他指令,但是script执行的是存放在ansbile管理机上的脚本,并且script不支持管道命令:
ansible all -m script -a "/root/test.sh"
image.png
8、几个模块中,command是默认模块,建议使用shell,功能较方便,script和shell的区别是一个执行控制端的脚本,一个执行远程端的脚本。
作者:SkTj
链接:https://www.jianshu.com/p/3861b6a90def
來源:简书
简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。