1、命令執(zhí)行模塊-command
在遠(yuǎn)程節(jié)點(diǎn)上運(yùn)行命令。
命令模塊使用命令名稱,接上空格-的分割符作為參數(shù)使用,但是不支持管道符和變量等,如果要使用這些,那么可以使用shell模塊。
參數(shù)
|
必填
|
默認(rèn)
|
選項(xiàng)
|
說(shuō)明
|
Chdir
|
No
|
|
|
更換目錄
|
Creates
|
No
|
|
|
當(dāng)文件名已經(jīng)存在的時(shí)候,此步不會(huì)執(zhí)行
|
Executable
|
No
|
|
|
換用shell執(zhí)行命令,表示為一個(gè)絕對(duì)路徑
|
Free_form
|
Yes
|
|
|
需要執(zhí)行的腳本(沒(méi)有真正的參數(shù)為free_form)
|
Removes
|
No
|
|
|
當(dāng)文件名稱存在的時(shí)候,此步不會(huì)執(zhí)行
|
Warn
|
No
|
True
|
|
如果在ansible.cfg中存在告警,如果設(shè)定了no/False,不會(huì)警告此行
|
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~
|
在這個(gè)里面,首先更換目錄到tmp目錄中,然后查看kel.conf是否存在,如果存在,那么命令不會(huì)執(zhí)行;如果不存在,那么執(zhí)行命令,在這里也可以看到,命令是必須存在的,但是沒(méi)有參數(shù)名為free_form參數(shù)
1.2 切換目錄創(chuàng)建文件
[root@ansibleserver tmp]# ansible pythonserver -a "touch kel.conf chdir=/tmp"
SSH password:
192.168.1.60 | success | rc=0 >>
|
以上的命令表示為更換目錄到tmp中,然后創(chuàng)建文件kel.conf
在使用ansible中的時(shí)候,默認(rèn)的模塊是-m command,從而模塊的參數(shù)不需要填寫(xiě),直接使用即可。
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
|
目錄和文件都是存在的,但是依然報(bào)錯(cuò)不存在目錄或者文件,從而在command命令中是不支持管道符和其他的一些操作的,在使用這些命令的時(shí)候,可以選擇使用shell模塊
2、 shell模塊
在遠(yuǎn)程節(jié)點(diǎn)上執(zhí)行命令。在執(zhí)行命令的時(shí)候使用的是/bin/sh。
參數(shù)
|
必填
|
默認(rèn)
|
選擇
|
說(shuō)明
|
Chdir
|
No
|
|
|
修改當(dāng)前目錄
|
Creates
|
No
|
|
|
當(dāng)文件名已經(jīng)存在的時(shí)候,此步不會(huì)執(zhí)行
|
Executable
|
No
|
|
|
換用shell執(zhí)行命令,表示為一個(gè)絕對(duì)路徑
|
Free_form
|
Yes
|
|
|
需要執(zhí)行的腳本(沒(méi)有真正的參數(shù)為free_form)
|
Removes
|
No
|
|
|
當(dāng)文件名稱存在的時(shí)候,此步不會(huì)執(zhí)行
|
Warn
|
No
|
True
|
|
如果在ansible.cfg中存在告警,如果設(shè)定了no/False,不會(huì)警告此行
|
2.1 執(zhí)行命令保存輸出
[root@ansibleserver tmp]# ansible pythonserver -m shell -a "sh /tmp/kel.sh >>/tmp/kel.log"
SSH password:
192.168.1.60 | success | rc=0 >>
|
執(zhí)行遠(yuǎn)程機(jī)器上的腳本,腳本目錄為/tmp/kel.sh,然后將執(zhí)行命令的結(jié)果存放在路徑/tmp/kel.log中,注意在進(jìn)行保存文件的時(shí)候,寫(xiě)上全路徑,否則就會(huì)保存在登錄之后的默認(rèn)路徑中。
2.2 換成路徑然后執(zhí)行命令
[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 >>
|
可以看到修改之后的目錄,然后再執(zhí)行命令。
3、腳本執(zhí)行模塊-script
將script傳送到遠(yuǎn)程主機(jī)之后,執(zhí)行。此模塊的執(zhí)行,在遠(yuǎn)程主機(jī)上,不需要python環(huán)境
參數(shù)
|
必填
|
默認(rèn)
|
選擇
|
說(shuō)明
|
Creates
|
No
|
|
|
當(dāng)文件名已經(jīng)存在的時(shí)候,此步不會(huì)執(zhí)行
|
Free_form
|
Yes
|
|
|
需要執(zhí)行的腳本(沒(méi)有真正的參數(shù)為free_form)
|
Removes
|
No
|
|
|
當(dāng)文件名稱存在的時(shí)候,此步不會(huì)執(zhí)行
|
3.1 在遠(yuǎn)程主機(jī)上執(zhí)行腳本
[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在本機(jī)上,然后將腳本遠(yuǎn)程傳送到pythonserver主機(jī)中,然后執(zhí)行這個(gè)腳本,從而將執(zhí)行的結(jié)果保存在全路徑的文件kelkel.log中,在保存文件的時(shí)候,最好用全路徑
4、 ssh命令執(zhí)行模塊-raw
此模塊的執(zhí)行,在遠(yuǎn)程主機(jī)上,不需要python環(huán)境,主要是用來(lái)執(zhí)行臟的ssh命令。
參數(shù)
|
必填
|
默認(rèn)
|
選擇
|
說(shuō)明
|
Free_form
|
Yes
|
|
|
需要執(zhí)行的腳本(沒(méi)有真正的參數(shù)為free_form)
|
Removes
|
No
|
|
|
當(dāng)文件名稱存在的時(shí)候,此步不會(huì)執(zhí)行
|
主要使用raw的原因是,如果老版本的python中,那么就需要用raw;如果客戶端是路由器的話,那么沒(méi)有python模塊的話,那么就必須要使用raw模塊
raw很多地方和shell和command相似,更多推薦的地方使用的是shell和command模塊
|