認識ansible playbook


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


如何編寫playbook呢?

首先,我們需要創建一個YAML格式的playbook文件。playbook文件以“.yaml”或者“.yml”作爲文件名後綴。


在編寫劇本之前,我們看如下兩條命令:

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

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

image.png


對於上面的劇本說明:

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

上例中,“-”後面使用hosts關鍵字指定了要操作的主機,hosts關鍵字對應的值爲pro,表示我們要在pro這個主機進行操作,在YAML語法中使用冒號映射鍵值對時,冒號後面必須有空格,這也是語法,如果你想要一次性在多臺主機上進行操作,可以同時寫多個主機,每臺主機使用逗號隔開。

第三行:使用remote_user關鍵字可以指定在進行遠程操作時使用那個用戶進行操作,'remote_user:root'表示pro的root用戶進行操作,

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

之後的行都屬於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時,可讀性比較高。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章