ansible命令執行模塊使用
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模塊