ansible(4)--ansible的command和shell模块
1. command模块
功能:在远程主机执行 shell 命令;为默认模块,可省略 -m 选项;
注意:不支持管道命令 |;
command模块的常用参数如下:
| 参数 | 说明 |
|---|---|
| chdir DIR | 执行ansible时,切换到指定的目录 |
| creates FILE | 如果文件FILE存在,则不执行命令 |
| removes FILE | 如果文件FILE存在,则执行命令 |
-
示例一:command模块基础用法,在远端主机执行命令:
[root@xuzhichao ~]# ansible 192.168.20.22 -a "id" 192.168.20.22 | CHANGED | rc=0 >> uid=0(root) gid=0(root) groups=0(root) -
示例二:在被控端主机切换到指定目录,执行命令:
[root@xuzhichao ~]# ansible 192.168.20.22 -a "chdir=/tmp pwd" 192.168.20.22 | CHANGED | rc=0 >> /tmp -
示例三:
creates:指定的文件存在时,不执行对应命令:[root@xuzhichao ~]# ansible 192.168.20.22 -a "creates=/etc/passwd ls" 192.168.20.22 | SUCCESS | rc=0 >> skipped, since /etc/passwd exists <==跳过,未执行; -
示例四:
removes:与creates相反,指定的文件存在,则执行对应命令:[root@xuzhichao ~]# ansible 192.168.20.22 -a "removes=/etc/passwd ls" 192.168.20.22 | CHANGED | rc=0 >> 49857.html anaconda-ks.cfg apache-tomcat-10.0.7.tar.gz echo-nginx-module favicon.ico index.html lvs_rs.sh nginx-1.20.1 nginx-1.20.1.tar.gz redis-4.2.0.tgz route.txt valgrind-3.15.0-11.el7.x86_64.rpm wordpress-3.1-zh_CN.zip
2. shell模块
功能:在远程主机执行 Shell 命令,支持管道等特殊符号的操作,比command模块使用广泛;
shell模块的常用参数如下:
| 参数 | 说明 |
|---|---|
| chdir DIR | 执行ansible时,切换到指定的目录 |
| creates FILE | 如果文件FILE存在,则不执行命令 |
| removes FILE | 如果文件FILE存在,则执行命令 |
-
shell模块支持管道命令,在被控主机上创建用户和密码:
[root@xuzhichao ~]# ansible 192.168.20.22 -m shell -a 'useradd xu1' 192.168.20.22 | CHANGED | rc=0 >> [root@xuzhichao ~]# ansible 192.168.20.22 -m shell -a 'echo 123456 | passwd --stdin xu1' 192.168.20.22 | CHANGED | rc=0 >> Changing password for user xu1. passwd: all authentication tokens updated successfully.
注意:调用bash执行命令 类似cat /tmp/stanley.md | awk -F'|' '{print $1,$2}' &> /tmp/example.txt这些复杂命令,即使使用shell也可能会失败,解决办法:写到脚本中,copy到远程,执行,再把需要的结果拉回执行命令的机器。
注意:虽然可以使用shell模块完成绝大多数操作,但是shell模块无法很好的保证ansible的幂等性,因此建议使用以下各个专用模块完成特定的功能,可以保证幂等性。

浙公网安备 33010602011771号