天天看點

Ansible 常用子產品之指令類子產品 command|shell|script

Ansible 常用子產品之指令類子產品 command|shell|script

 在本部落格中,ansible是一個系列文章,我們會盡量以通俗易懂的方式總結ansible的相關知識點。ansible系列博文直達連結:​​ansible輕松入門系列​​"ansible系列"中的每篇文章都建立在前文的基礎之上,是以,請按照順序閱讀這些文章,否則有可能在閱讀中遇到障礙。

前文中,我們介紹了一些常用的檔案類操作的子產品,這篇文章中我們會介紹一些常用的指令類操作的子產品。

command子產品

command子產品可以幫助我們在遠端主機上執行指令

注意:使用command子產品在遠端主機中執行指令時,不會經過遠端主機的shell處理,在使用command子產品時,如果需要執行的指令中含有重定向、管道符等操作時,這些符号也會失效,比如"<", ">", "|", ";" 和 "&" 這些符号,如果你需要這些功能,可以參考後面介紹的shell子產品,還有一點需要注意,如果遠端節點是windows作業系統,則需要使用win_command子產品。

 此處我們介紹一些command子產品的常用參數,你可以先對這些參數有一個大概了解,然後再看小示例。

  • free_form參數:必須參數,指定需要遠端執行的指令,需要說明一點,free_form參數與其他參數并不相同,在之前的子產品示例中,如果想要使用一個參數,那麼則需要為這個參數指派,舉個例子,之前的示例子產品中,大多都有path參數,當我們需要指定要操作的檔案時,通常需要對path參數指派,比如,path=/testdir/test,表示我們想要操作/testdir/test檔案,但是free_form參數則不同,"free_form"并不是一個"實際存在"的參數名,比如,當我們想要在遠端主機上執行ls指令時,我們并不需要寫成"free_form=ls" ,這樣寫反而是錯誤的,因為并沒有任何參數的名字是free_form,當我們想要在遠端主機中執行ls指令時,直接寫成ls即可,這就是free_form參數的含義,因為command子產品的作用是執行指令,是以,任何一個可以在遠端主機上執行的指令都可以被稱為free_form,如果你還是不明白,看下面的小示例就行了。
  • chdir參數:  此參數的作用就是指定一個目錄,在執行對應的指令之前,會先進入到chdir參數指定的目錄中。
  • creates參數:看到creates,你可能會從字面上了解這個參數,但是使用這個參數并不會幫助我們建立檔案,它的作用是當指定的檔案存在時,就不執行對應指令,比如,如果/testdir/test檔案存在,就不執行我們指定的指令。
  • removes參數 :與creates參數的作用正好相反,它的作用是當指定的檔案不存在時,就不執行對應指令,比如,如果/testdir/tests檔案不存在,就不執行我們指定的指令,此參數并不會幫助我們删除檔案

使用如下指令,表示在test70主機上執行ls指令,因為我使用的是root使用者,是以預設情況下,ls出的結果是test70主機中root使用者家目錄中的檔案清單。

ansible test70 -m command -a "ls"      

chdir參數表示執行指令之前,會先進入到指定的目錄中,是以如下指令表示檢視test70主機上/testdir目錄中的檔案清單

ansible test70 -m command -a "chdir=/testdir ls"      

如下指令表示/testdir/test檔案如果存在于遠端主機中,則不執行對應指令,如果不存在,才執行"echo test"指令

ansible test70 -m command -a "creates=/testdir/test echo test"      

 如下指令表示/testdir/test檔案如果不存在于遠端主機中,則不執行對應指令,如果存在,才執行"echo test"指令

ansible test70 -m command -a "removes=/testdir/test echo test"      

shell子產品

shell子產品可以幫助我們在遠端主機上執行指令,與command子產品不同的是,shell子產品在遠端主機中執行指令時,會經過遠端主機上的/bin/sh程式處理。

學習此子產品之前,請先參考本文中的command子產品。

此處我們介紹一些shell子產品的常用參數。

  • free_form參數:必須參數,指定需要遠端執行的指令,但是并沒有具體的一個參數名叫free_form,具體解釋參考command子產品。
  • chdir參數:  此參數的作用就是指定一個目錄,在執行對應的指令之前,會先進入到chdir參數指定的目錄中。
  • creates參數:使用此參數指定一個檔案,當指定的檔案存在時,就不執行對應指令,可參考command子產品中的解釋。
  • removes參數:使用此參數指定一個檔案,當指定的檔案不存在時,就不執行對應指令,可參考command子產品中的解釋。
  • executable參數:預設情況下,shell子產品會調用遠端主機中的/bin/sh去執行對應的指令,通常情況下,遠端主機中的預設shell都是bash,如果你想要使用其他類型的shell執行指令,則可以使用此參數指定某種類型的shell去執行對應的指令,指定shell檔案時,需要使用絕對路徑。

shell子產品中chdir、creates、removes參數的作用與command子產品中的作用都是相同的,此處不再舉例。

使用shell子產品可以在遠端伺服器上執行指令,它支援管道與重定向等符号。

ansible test70 -m shell -a "chdir=/testdir echo test > test"      

如果你想要執行的指令需要csh解析,那麼可以指定使用csh在遠端主機上執行對應的指令,比如在如下示例中,我們使用csh的文法定義了一個數字類型的變量TestNum,然後将TestNum變量的值重定向到了/testdir/TestNumFile,在bash中,@符号不能用于定義變量,是以,可以使用executable指定需要的shell類型。

ansible test70 -m shell -a 'executable=/bin/csh @ TestNum=666 ; echo $TestNum > /testdir/TestNumFile'      

script子產品

script子產品可以幫助我們在遠端主機上執行ansible主機上的腳本,也就是說,腳本一直存在于ansible主機本地,不需要手動拷貝到遠端主機後再執行。學習此子產品之前,請先參考本文中的command子產品。

此處我們介紹一些script子產品的常用參數,你可以先對這些參數有一個大概了解,然後再看小示例。

  • free_form參數:必須參數,指定需要執行的腳本,腳本位于ansible主機本地,并沒有具體的一個參數名叫free_form,具體解釋參考command子產品。
  • chdir參數:  此參數的作用就是指定一個遠端主機中的目錄,在執行對應的腳本之前,會先進入到chdir參數指定的目錄中。
  • creates參數:使用此參數指定一個遠端主機中的檔案,當指定的檔案存在時,就不執行對應腳本,可參考command子產品中的解釋。
  • removes參數:使用此參數指定一個遠端主機中的檔案,當指定的檔案不存在時,就不執行對應腳本,可參考command子產品中的解釋。

上述參數對應的ad-hoc示例指令如下:

如下指令表示ansible主機中的/testdir/atest.sh腳本将在test70主機中執行,執行此腳本之前,會先進入到test70主機中的/opt目錄

ansible test70 -m script -a "chdir=/opt /testdir/atest.sh"      
ansible test70 -m script -a "creates=/opt/testfile /testdir/atest.sh"      
ansible test70 -m script -a "removes=/opt/testfile /testdir/atest.sh"