1.1 playbook簡介
playbook是ansible用于配置,部署,和管理被控節點的劇本。通過playbook的詳細描述,執行其中的一系列tasks,可以讓遠端主機達到預期的狀態。playbook就像Ansible控制器給被控節點列出的的一系列to-do-list,而被控節點必須要完成。
也可以這么理解,playbook 字面意思,即劇本,現實中由演員按照劇本表演,在Ansible中,這次由計算機進行表演,由計算機安裝,部署應用,提供對外服務,以及組織計算機處理各種各樣的事情。
1.2 Playbook使用場景
執行一些簡單的任務,使用ad-hoc命令可以方便的解決問題,但是有時一個設施過于復雜,需要大量的操作時候,執行的ad-hoc命令是不適合的,這時最好使用playbook,就像執行shell命令與寫shell腳本一樣,也可以理解為批處理任務,不過playbook有自己的語法格式,一會會介紹。
使用playbook你可以方便的重用這些代碼,可以移植到不同的機器上面,像函數一樣,最大化的利用代碼。在你使用Ansible的過程中,你也會發現,你所處理的大部分操作都是編寫playbook。
1.3 playbook格式
playbook由YMAL語言編寫。YAML參考了其他多種語言,包括:XML、C語言、Python、Perl以及電子郵件格式RFC2822,Clark Evans在2001年5月在首次發表了這種語言,另外Ingy d?t Net與Oren Ben-Kiki也是這語言的共同設計者。
YMAL格式是類似于JSON的文件格式,便于人理解和閱讀,同時便于書寫。首先學習了解一下YMAL的格式,對我們后面書寫playbook很有幫助。以下為playbook常用到的YMAL格式。
l 文件的第一行應該以 ”—” (三個連字符)開始,表明YMAL文件的開始。
l 在同一行中,#之后的內容表示注釋,類似于shell,python和ruby。
l YMAL中的列表元素以”-”開頭然后緊跟著一個空格,后面為元素內容。就像這樣
- apple - banana - orange
等價于JSON的這種格式
[ “apple”, “banana”, “orange” ]
l 同一個列表中的元素應該保持相同的縮進。否則會被當做錯誤處理。
l play中hosts,variables,roles,tasks等對象的表示方法都是鍵值中間以”:”分隔表示,”:”后面還要增加一個空格。
l YMAL的有很多的字符串可以解釋為true或false:
YMAL Truhy: true , True , TRUE , yes , Yes , YES , on , On , ON , y ,
YMAL falthy: false , False , FALSE , no , No , NO , off , Off , OFF , n , N
樣例如下:
關于YMAL的更多信息,請參考
http://baike.baidu.com/link?url=10WYbxN7mNFp1I3Dq4ZD0RyhSeBWDYMfe8OOyjWyZMweFnze7eunGEWQNqypT9vXABeysp798Ld16g9qtvTWtq#1_1
1.4 playbook語法介紹
在mysql.yml中,主要由三個部分組成。
l hosts部分:使用hosts指示使用哪個主機或主機組來運行下面的tasks,每個playbook都必須指定hosts,hosts也可以使用通配符格式。主機或主機組在inventory清單中指定,可以使用系統默認的/etc/ansible/hosts,也可以自己編輯,在運行的時候加上-i選項,指定清單的位置即可。在運行清單文件的時候,–list-hosts選項會顯示那些主機將會參與執行task的過程中。
l remote_user:指定遠端主機中的哪個用戶來登錄遠端系統,在遠端系統執行task的用戶,可以任意指定,也可以使用sudo,但是用戶必須要有執行相應task的權限。
l tasks:指定遠端主機將要執行的一系列動作。tasks的核心為ansible的模塊,前面已經提到模塊的用法。tasks包含name和要執行的模塊,name是可選的,只是為了便于用戶閱讀,不過還是建議加上去,模塊是必須的,同時也要給予模塊相應的參數。
1.5 Playbook執行結果解析
使用ansible-playbook運行playbook文件,得到如下輸出信息,輸出內容為JSON格式。并且由不同顏色組成,便于識別。一般而言
l 綠色代表執行成功,系統保持原樣
l 黃色代表系統代表系統狀態發生改變
l 紅色代表執行失敗,顯示錯誤輸出。
在被控節點可以看到軟件包已經安裝并且mysqld服務以及啟動。
對比playbook文件內容與執行結果,可以得出playbook的執行步驟。
下面依次分析執行步驟
1.5.1 收集facts
首先默認的第一個task就是收集遠端被管主機的ansible元數據信息,也被稱為facts,facts信息包括,遠端主機發行版,IP地址,CPU核數,系統架構,主機名等等,然后這些元數據可以作為變量供后面的task使用。你可以使用如下命令查看元數據的具體信息。
ansible <hostpattern> -m setup [-i inventory_file]
在你執行的過程中,你會看到有大量的facts信息,這里我只是截取一小部分。你也可以禁止ansible收集facts,在playbook中的hosts指令下面設置gather_facts指令即可。如下
facts經常被用在條件語句和模板當中,也可以用于根據指定的標準根據group_by模塊創建動態主機組,我們后面會詳細介紹,這里我簡單列出一個facts的用法實例,使用條件判斷語句關閉指定發行版的主機。
1.5.2 執行tasks
這里為實際執行的task,每個任務都給出了它們的執行狀態,是否改變了機器的狀態。
我們可以看到每個task都有自己定義的名稱,我們也可以去除task的名稱。
然后查看輸出信息
可以看到task沒有名稱了,一般我們建議使用name來標示任務,便于人更好的閱讀。
1.5.3 報告結果
執行結果報告。第一次運行,系統狀態改變了兩次。
第二次運行,系統狀態不再發生改變,這也說明了,ansible的冪等性,我們可以多次的重復執行一個playbook。而不用考慮系統重復執行task。
1.6 ansible-playbook實戰小技巧
上面執行playbook的過程中,我們使用了ansile-playbook命令,為了靈活的控制playbook,ansible提供了ansible-playbook命令行工具,可以一些調整playbook執行流的選項,這里舉出一些有用的實例。更多用法請參考ansible-playbook –h
1.6.1 例子一
查看當前任務,然后指定從哪里開始執行任務
1.6.2 例子二
執行或者跳過playbook中指定的tag,修改mysql.yml增加tags指令。
如下,結果,可以知道—tags與—skip-tags的區別。
1.6.3 例子三
提示:如果你感覺輸出信息不夠詳細,使用-v選項,使用-vv選項,信息更加詳細,信息最詳細的為-vvvv選項,自行嘗試。
回顧下今天所講內容:
1、 playbook是什么
2、 playbook的基本格式
3、 playbook劇本組成
4、 playbook執行過程
5、 ansibel-playbook的幾個基本案例
原創文章,作者:艾賀,如若轉載,請注明出處:http://www.www58058.com/9570