天天看點

Ansible之四:Ad-hoc與指令執行子產品

   Ad-Hoc 是指ansible下臨時執行的一條指令,并且不需要儲存的指令,對于複雜的指令會使用playbook。Ad-hoc的執行依賴于子產品,ansible官方提供了大量的子產品。 如:command、raw、shell、file、cron等,具體可以通過ansible-doc -l 進行檢視 。可以使用ansible-doc -s module來檢視某個子產品的參數,也可以使用ansible-doc help module來檢視該子產品更詳細的資訊。

一個ad-hoc指令的執行,需要按以下格式進行執行:

主機群組,是在/etc/ansible/hosts 裡進行指定的部分,當然動态Inventory 使用的是腳本從外部應用裡擷取的主機;

子產品名,可以通過ansible-doc -l 檢視目前安裝的子產品,預設不指定時,使用的是command子產品,具體可以檢視/etc/ansible/ansible.cfg 的“#module_name = command ” 部分,預設子產品可以在該配置檔案中進行修改;

子產品參數,可以通過 “ansible-doc -s 子產品名” 檢視具體的用法及後面的參數;

ansible參數,可以通過ansible指令的幫助資訊裡檢視到,這裡有很多參數可以供選擇,如是否需要輸入密碼、是否sudo等。

當指令執行時間比較長時,也可以放到背景執行,使用-B、-P參數,如下:

指令執行子產品包含如下 四個子產品:

注:raw子產品和comand、shell 子產品不同的是其沒有chdir、creates、removes參數,chdir參數的作用就是先切到chdir指定的目錄後,再執行後面的指令,這在後面很多子產品裡都會有該參數 。

command子產品包含如下選項: 

creates:一個檔案名,當該檔案存在,則該指令不執行 

free_form:要執行的linux指令 

chdir:在執行指令之前,先切換到該指定的目錄 

removes:一個檔案名,當該檔案不存在,則該選項不執行

executable:切換shell來執行指令,該執行路徑必須是一個絕對路徑

使用chdir的示例:

三個指令都會傳回執行成功的狀态。不過實際上隻有前兩個檔案會被建立成功。使用raw子產品的執行的結果檔案事實上也被正常建立了,不過不是在chdir指定的目錄,而是在目前執行使用者的家目錄。

creates與removes示例:

ansible 192.168.1.1 -a 'creates=/tmp/server.txt uptime' #當/tmp/server.txt檔案存在時,則不執行uptime指令

ansible 192.168.1.1 -a 'removes=/tmp/server.txt uptime' #當/tmp/server.txt檔案不存在時,則不執行uptime指令

script子產品示例: