認識ansible playbook


對於前部分的咱們在執行ansible相關的命令,都是經過命令行的方式,這種其實很不方便的,咱們能夠將這些命令寫入到一個YAML文件中,每次執行時,調用相關的YAML文件就能夠了。這個YAML文件咱們稱之爲劇本。咱們只須要將要作的事情編寫成playbook,把不一樣的模塊按照順序編排在劇本中,ansible就會按照劇本一步一步的執行,最終達到咱們的目的,雖然playbook的功能與腳本相似,可是劇本並非簡單的將ad-hoc命令按照順序堆砌在一個可執行文件中,編寫劇本須要遵循YAML語法。bash


如何編寫playbook呢?ide

首先,咱們須要建立一個YAML格式的playbook文件。playbook文件以「.yaml」或者「.yml」做爲文件名後綴。命令行


在編寫劇本以前,咱們看以下兩條命令:blog

#ansible pro -m ping
#ansible pro -m file -a "path=/testdir/test state=directory"

接下來咱們把上面的命令轉換成playbook的表現形式,如何書寫?rem

image.png


對於上面的劇本說明:it

第一行使用三個橫槓做爲開始,第二行使用「-」做爲開頭,在YAML預發中使用「-」表示一個塊序列的節點。class

上例中,「-」後面使用hosts關鍵字指定了要操做的主機,hosts關鍵字對應的值爲pro,表示咱們要在pro這個主機進行操做,在YAML語法中使用冒號映射鍵值對時,冒號後面必須有空格,這也是語法,若是你想要一次性在多臺主機上進行操做,能夠同時寫多個主機,每臺主機使用逗號隔開。test

第三行:使用remote_user關鍵字能夠指定在進行遠程操做時使用那個用戶進行操做,'remote_user:root'表示pro的root用戶進行操做,基礎

第四行:使用tasks關鍵字指明要進行操做的任務列表,以後的行都屬於tasks鍵值對中的值。file

以後的行都屬於task任務列表中的任務,能夠看出,整個任務列表一共有兩個任務組成,每一個任務都以「-」開頭,每一個任務都有本身的名字,任務名使用name關鍵字進行指定,第一個任務使用ping模塊,使用ping模塊時沒有指定任何參數,第二個任務使用file模塊,指定了參數。

image.png


如上圖的,劇本執行後返回了一些信息,這些信息時此次劇本運行的概況。

PLAY[pro]表示此次運行的playbook中有一個play是針對pro這臺主機運行的,一個'playbook'是一個或多個'play'組成的,打比方:一個劇本是由一個或多個橋段組成的,全部的橋段組合在一塊兒,組成一個完整的劇本,而上例中,整個劇本中只有一個橋段,也就是說,上述的playbook中,咱們只寫了一個play。

上述僅有的play是針對pro運行的,這個play一共包含三個任務,第一個任務名字叫作’GAthering Facts‘,這個任務會手機當前play對應的目標主機的相關信息,收集完這些基礎信息後,纔會執行咱們指定的任務,也就是下面兩個任務。



上面的playbook裏面只有一個play,咱們也能夠在這個playbook中多寫幾個play,示例以下:

image.png


若是你的playbook寫完了,可是不缺東playbook文件中是否存在預發錯誤,那麼你可使用以下命令進行語法檢查。只要返回palybook的名稱,就表示沒有預發錯誤。

image.png


當咱們建立劇本使用的模塊須要多個參數時,這時參數能夠換種方式寫:

如一個建立文件的tasks:

image.png
咱們可使用以下簡單的方式書寫:

image.png


在以前的示例中,咱們對每一個人物都指定對應的名稱,即每一個task都有對應的name,當咱們省略name時,默認以當前任務調用的模塊的名稱做爲任務的名稱,建議不要省略name。當任務存在name時,可讀性比較高。

相關文章
相關標籤/搜索