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
的幂等性,因此建议使用以下各个专用模块完成特定的功能,可以保证幂等性。