自動化運維工具——Ansible(四)——YAML語法

到目前爲止,我們一直都在使用INI的配置風格去配置“清單”,其實,/etc/ansible/hosts不僅能夠識別INI的配置語法,還能夠識別“YAML”的配置語法。

1. 什麼是YAML

YAML(Yet Another Markup Language)語言(發音 /ˈjæməl/ )是一個類似 XML、JSON 的標記性語言。YAML 強調以數據爲中心,並不是以標識語言爲重點。因而 YAML 本身的定義比較簡單,號稱“一種人性化的數據格式語言”。目的就是方便人類讀寫。它實質上是一種通用的數據串行化格式。

我們可以以使用YAML編寫配置文件,而ansible的清單也支持YAML的語法,所以我們可以使用YAML語法編寫清單,從而管理受管主機。

2. YAML配置示例一

在server1中:

vim /etc/ansible/hosts 
all:
 hosts:
  172.25.1.2:
  172.25.1.3:

在這裏插入圖片描述

上述配置就是使用YAML語法配置的主機清單,非常簡單

最上方使用all關鍵字,all後面有”:”,你一定聯想到了,我們之前可以使用all關鍵字,管理清單中的所有主機,這裏的”all:”就是這個含義。

第二行開頭使用一個空格作爲縮進,使用hosts關鍵字,表示hosts屬於all的下一級,我們可以這樣理解,all是默認的一個組,這個組是最大的一個組,當我們需要在組中定義受管主機時,就需要使用到hosts關鍵字,當我們進行自定義分組時,也需要使用hosts關鍵字,每個分組指明自己組內的受管主機時,都要使用到hosts關鍵字。

注意,在YAML的語法中,只能使用空格作爲縮進,不能使用tab,否則語法上會報錯,如果你習慣使用vim編輯文件,同時你又習慣使用tab作爲縮進,那麼你可以將ansible主機上的vim進行設置,默認將tab轉化爲空格,這樣就能兼容你的使用習慣了。

第三行開頭使用兩個空格作爲縮進,然後指明瞭主機2的IP地址,沒錯,主機2的IP地址就是hosts元素下一級的元素

第四行開頭使用兩個空格作爲縮進,然後指明瞭主機3的IP地址,你一定想明白了,主機2和主機3的層級是相同的,它們是平級的,因爲它們的左側縮進是對齊的。

測試:

ansible all -m ping
ansible 172.25.1.2 -m ping
ansible 172.25.1.3 -m ping

在這裏插入圖片描述

在這裏插入圖片描述

3. YAML配置示例二

先看一個INI風格的配置

172.25.1.2

[test1]
172.25.1.3

[test2]
172.25.1.4

上述配置表示當前清單中有3臺受管主機,主機2不屬於任何組,主機3屬於test1組,主機4屬於test2組

使用YAML語法進行同等效果的配置如下
(注意,爲了使縮進顯得更加明顯,此處每次縮進使用兩個空格)

all: 
  hosts:
    172.25.1.2
  children:
    test1:
      hosts:
        172.25.1.3
    test2:
      hosts:
        172.25.1.4

在這裏插入圖片描述
從上例可以看出,當直接在清單中創建組時,需要在all關鍵字內使用children關鍵字,而定義每個組時,有必須使用hosts關鍵字,指明組內的主機

測試:

ansible test1 -m ping
ansible test2 -m ping
ansible 172.25.1.2 -m ping

在這裏插入圖片描述

4. YAML配置示例三

有了上面的基礎,我們來看一下當組中嵌套組時,使用YAML語法應該怎樣描寫

仍然先寫出INI風格的示例以作對比,如下:

[proA]
172.25.1.2

[proB]
172.25.1.3

[pro:children]
proA
proB

對應YAML格式的配置如下

all: 
  children:
    pro:
      children:
        proA:
          hosts:
            172.25.1.2:
        proB:
          hosts:
            172.25.1.3:

在這裏插入圖片描述
上述配置表示,pro組有兩個子組,分別爲proA組和proB組,而這兩個組分別有自己組內的主機。

測試:

ansible pro -m ping
ansible proA -m ping
ansible proB -m ping

在這裏插入圖片描述

在這裏插入圖片描述

細心如你,一定已經發現,當我們使用YAML語法配置清單時,無非是使用hosts、children等關鍵字與我們的自定義名稱進行排列組合罷了。

5. YAML配置示例四

前文中,我們還介紹了使用別名的方式配置受管主機,INI格式的示例如下:

172.25.1.2
server3 ansible_host=172.25.1.3
172.25.1.4

在這裏插入圖片描述

測試:

ansible server3 -m ping
ansible 172.25.1.2 -m ping
ansible 172.25.1.4 -m ping

在這裏插入圖片描述

同等效果的YAML語法配置如下:

all:
  hosts:
    172.25.1.2:
    server3:
      ansible_host: 172.25.1.3
    172.25.1.4:

在這裏插入圖片描述

注意:上圖中標註的”空格”不可省,這是YAML的語法,省略空格後會報

測試:

ansible server3 -m ping
ansible 172.25.1.2 -m ping
ansible 172.25.1.4 -m ping

在這裏插入圖片描述

你可能已經習慣使用INI的語法編輯清單,或者你對YAML並不熟悉,於是你準備放棄學習YAML語法,這樣並不可行,因爲之後我們會介紹怎樣編寫ansible的劇本,編寫ansible劇本時,只能使用YAML語法,所以,不要放棄YAML,當然,我們也不用過於深究YAML的語法,我們只要記住一些套路(固定格式),就可以編寫ansible劇本了,所以不要着急,船到橋頭自然直,到時候你自然會掌握這些語法的。

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