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語言、Python、Perl以及電子郵件格式RFC2822,Clark 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都必須指定hostshosts也可以使用通配符格式。主機或主機組在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
下一篇 2015-12-07

相關推薦

  • 馬哥教育網絡班22期+第6周課程練習

    week6: 請詳細總結vim編輯器的使用并完成以下練習題 vim編輯器小結: 1. vim編輯器的模式: vim編輯器有很多模式,常用模式有:Normal,Insert,Command; 通常,打開一個文件,此時所處的就是normal模式;normal模式下可以瀏覽,修改文件內容; 在任何模式下,只要按ESC就可以返回到Normal模式; Ins…

    Linux干貨 2016-09-26
  • httpd 安裝配置

    web 服務介紹 web服務時一種應用程序的服務,它所提供的最主要的信息是一種超文本標記語言(HTML)、多媒體資源(如:視頻、圖片、音樂等)。HTML是一種純文字的文本信息,通過所謂的標簽來規范所要顯示的內容格式,在客戶端通過瀏覽器的形式對HTML及多媒體資源進行解析,然后呈現在終端上。主要由http和https協議實現 http協議 HTTP是一個屬于應…

    Linux干貨 2016-11-01
  • 推薦-BtrFS學習總結

    一、原理介紹1.可擴展性2.數據一致性的相關特性3.多設備管理及快照二、命令介紹與實戰1.命令介紹2.命令實戰1)環境準備,添加3塊磁盤/dev/sd{b,c,d}如下:2)創建btrfs文件系統3)查看已創建的btrfs文件系統4)掛載btrfs文件系統,啟用壓縮功能5)在線調整文件系統大小6)往當前btrfs文件系統添加設備,以達到在線擴容擴容目的7)執…

    Linux干貨 2016-06-03
  • DNS服務器類型及查詢過程

    什么是DNS   DNS(Domain Name System,域名系統),因特網上作為域名和IP地址相互映射的一個分布式數據庫,能夠使用戶更方便的訪問互聯網,而不用去記住能夠被機器直接讀取的IP數串。通過主機名,最終得到該主機名對應的IP地址的過程叫做域名解析(或主機名解析)。 DNS域名稱   域名系統作為一個層次結構和分布式數據庫,包含各種類型的數據,…

    Linux干貨 2017-02-08
  • 時間、screen、echo等——Linux基本命令(5)

    1.     時間 (1)查詢時間: date          +%F  年月日          +%T  時分秒  &nbs…

    2017-07-13
  • 馬哥教育第一天

    來到馬哥教育第一天,初步接觸IT,第一次寫博客,不知道寫點啥,記幾個地址吧。

    2018-03-26
欧美性久久久久