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的冪等性,因此建議使用以下各個專用模塊完成特定的功能,可以保證冪等性。
