Ansible playbook

目錄

1.1        playbook簡介… 1

1.2        Playbook使用場景… 1

1.3        playbook格式… 2

1.4        playbook語法介紹… 3

1.5        Playbook執行結果解析… 4

1.5.1      收集facts 5

1.5.2      執行tasks 6

1.5.3      報告結果… 6

1.6        ansible-playbook實戰小技巧… 6

1.6.1      例子一… 7

1.6.2      例子二… 7

1.6.3      例子三… 8

1.1       playbook簡介

playbookansible用于配置,部署,和管理被控節點的劇本。通過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格式

       playbookYMAL語言編寫。YAML參考了其他多種語言,包括:XML、C語言、PythonPerl以及電子郵件格式RFC2822Clark Evans20015月在首次發表了這種語言,另外Ingy d?t NetOren 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

樣例如下:

Ansible playbook

關于YMAL的更多信息,請參考

http://baike.baidu.com/link?url=10WYbxN7mNFp1I3Dq4ZD0RyhSeBWDYMfe8OOyjWyZMweFnze7eunGEWQNqypT9vXABeysp798Ld16g9qtvTWtq#1_1

1.4      playbook語法介紹

對比上述格式,下面我們看一個安裝部署mysql服務的案例。Ansible playbook

mysql.yml中,主要由三個部分組成。

hosts部分:使用hosts指示使用哪個主機或主機組來運行下面的tasks,每個playbook都必須指定hosts,hosts也可以使用通配符格式。主機或主機組在inventory清單中指定,可以使用系統默認的/etc/ansible/hosts,也可以自己編輯,在運行的時候加上-i選項,指定清單的位置即可。在運行清單文件的時候,–list-hosts選項會顯示那些主機將會參與執行task的過程中。

remote_user:指定遠端主機中的哪個用戶來登錄遠端系統,在遠端系統執行task的用戶,可以任意指定,也可以使用sudo,但是用戶必須要有執行相應task的權限。

tasks:指定遠端主機將要執行的一系列動作。tasks的核心為ansible的模塊,前面已經提到模塊的用法。tasks包含name和要執行的模塊,name是可選的,只是為了便于用戶閱讀,不過還是建議加上去,模塊是必須的,同時也要給予模塊相應的參數。

1.5      Playbook執行結果解析

使用ansible-playbook運行playbook文件,得到如下輸出信息,輸出內容為JSON格式。并且由不同顏色組成,便于識別。一般而言

綠色代表執行成功,系統保持原樣

黃色代表系統代表系統狀態發生改變

紅色代表執行失敗,顯示錯誤輸出。

Ansible playbook

在被控節點可以看到軟件包已經安裝并且mysqld服務以及啟動。

Ansible playbook

對比playbook文件內容與執行結果,可以得出playbook的執行步驟。

Ansible playbook

下面依次分析執行步驟

1.5.1    收集facts

首先默認的第一個task就是收集遠端被管主機的ansible元數據信息,也被稱為facts,facts信息包括,遠端主機發行版,IP地址,CPU核數,系統架構,主機名等等,然后這些元數據可以作為變量供后面的task使用。你可以使用如下命令查看元數據的具體信息。

ansible <hostpattern> -m setup [-i inventory_file]

如下所示

Ansible playbook

在你執行的過程中,你會看到有大量的facts信息,這里我只是截取一小部分。你也可以禁止ansible收集facts,在playbook中的hosts指令下面設置gather_facts指令即可。如下

Ansible playbookAnsible playbook

facts經常被用在條件語句模板當中,也可以用于根據指定的標準根據group_by模塊創建動態主機組,我們后面會詳細介紹,這里我簡單列出一個facts的用法實例,使用條件判斷語句關閉指定發行版的主機。

Ansible playbook

1.5.2    執行tasks

這里為實際執行的task,每個任務都給出了它們的執行狀態,是否改變了機器的狀態。

Ansible playbook

我們可以看到每個task都有自己定義的名稱,我們也可以去除task的名稱。Ansible playbook

然后查看輸出信息

Ansible playbook

可以看到task沒有名稱了,一般我們建議使用name來標示任務,便于人更好的閱讀。

1.5.3    報告結果

執行結果報告。第一次運行,系統狀態改變了兩次。

Ansible playbook

第二次運行,系統狀態不再發生改變,這也說明了,ansible的冪等性,我們可以多次的重復執行一個playbook。而不用考慮系統重復執行task

Ansible playbook

1.6      ansible-playbook實戰小技巧

上面執行playbook的過程中,我們使用了ansile-playbook命令,為了靈活的控制playbook,ansible提供了ansible-playbook命令行工具,可以一些調整playbook執行流的選項,這里舉出一些有用的實例。更多用法請參考ansible-playbook –h

1.6.1    例子一

查看當前任務,然后指定從哪里開始執行任務

Ansible playbook

Ansible playbook

1.6.2    例子二

執行或者跳過playbook中指定的tag,修改mysql.yml增加tags指令。

Ansible playbook

如下,結果,可以知道—tags—skip-tags的區別。

Ansible playbook

1.6.3    例子三

使用—step來一步一步的確認命令。

Ansible playbook

提示:如果你感覺輸出信息不夠詳細,使用-v選項,使用-vv選項,信息更加詳細,信息最詳細的為-vvvv選項,自行嘗試。

 

回顧下今天所講內容:

1、  playbook是什么

2、  playbook的基本格式

3、  playbook劇本組成

4、  playbook執行過程

5、  ansibel-playbook的幾個基本案例

 

原創文章,作者:艾賀,如若轉載,請注明出處:http://www.www58058.com/9570

(0)
艾賀艾賀
上一篇 2015-12-06 20:36
下一篇 2015-12-07 10:10

相關推薦

  • 三劍客之Sed

    sed:stream editor(流編輯器) 工作特性:并不直接處理文本文件本身,處理機制為每當處理一個文件的時候,它會逐行讀取,每次把一行讀取到內存空間中去,而后在模式空間(pattern space)中完成編輯.并把編輯好的結果輸出到屏幕上  功      能:數據替換、刪除、增加、等,數據為關鍵字或者一整行, …

    Linux干貨 2016-08-08
  • 循環的特殊用法及函數

    while特殊用法 while read 變量名;do 循環體 done<文件路徑(將文件中的每一行依次讀入循環體,賦值給變量)   (())可以實現C語言風格的變量操作 for循環特殊格式 for((控制變量初始化;條件判斷表達式;控制變量修正表達式)) do 循環體 done 控制變量初始化僅在循環開始時執行一次,進行條件判斷成立后執行循…

    Linux干貨 2016-08-21
  • test

    test

    Linux干貨 2016-08-08
  • ELK 日志分析實例

    網海過客www.chinasa.net ELK 日志分析實例一、ELK-web日志分析二、ELK-MySQL 慢查詢日志分析三、ELK-SSH登陸日志分析四、ELK-vsftpd 日志分析 一、ELK-web日志分析 通過logstash grok正則將web日志過濾出來,輸出到Elasticsearch 搜索引擎里,通過Kibana前端展示。  …

    Linux干貨 2016-06-03
  • Linux軟件包管理與實例

    Linux系統的早期,編譯是利用程序代碼生成可執行文件的過程的手動編譯。雖具有一定優勢,但是專業知識要求高,不利于實際操作。因此出現了許多軟件包管理器,最具代表的是由Red Hat 推出的RPM。Yum則有利于解決linux安裝軟件時的依賴性。 所謂依賴性,就是linux系統中的軟件將不同的功能模塊單獨寫入到不同的軟件包中,最后將多個相互依存的軟件包結合起來…

    2017-08-13
  • Nginx 編譯安裝

    簡介 Nginx ("engine x") 是一個高性能的HTTP和反向代理服務器,也是一個IMAP/POP3/SMTP服務器。Nginx是由Igor Sysoev為俄羅斯訪問量第二的Rambler.ru站點開發的,第一個公開版本0.1.0發布于2004年10月4日。其將源代碼以類BSD許可證的形式發布,因它的穩定性、豐富的功能集、示例配…

    Linux干貨 2016-12-01
欧美性久久久久