Contents

Ansible - 創建 Ansible inventory 主機清單

Ansible 中的 Inventory 主機清單是執行 Ansible 的必要元素之一, 藉由該清單可以告訴 Ansible 哪些機器歸它所控制,完成自動化部署工作。

1. inventroy 格式

inventory 格式可以為 Yaml 或是 INI 格式, 對於初學者來說手動撰寫 INI 格式相對較為容易 ( static inventory ),不過如果有上百上千台機器就不適合手動一一產生,需要透過程式拉取 AD 、LADP 等機器資訊並自動產生 Yaml 格式。

INI 格式範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
localhost    

[dev]    
servera.lab.exampel.com
serverb.lab.exampel.com
servere.lab.example.com

[prod]    
serverc.lab.exampel.com

[test]
servere.lab.example.com
serverf.lab.example.com
192.168.0.1

[webservers:children]  
dev
prod

Yaml 格式範例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
all:
  children:
    test:
      hosts:
        server.lab.example.com: {}
        serverf.lab.example.com: {}
        192.168.0.1:{}
    ungrouped:
      hosts:
        localhost: {}
    webservers:
      children:
        dev:
          hosts:
            servera.lab.exampel.com: {}
            serverb.lab.exampel.com: {}
            servere.lab.example.com: {}
        prod:
          hosts:
            serverc.lab.exampel.com: {}
Tip
多台連續機器可以使用,[START:EDN]來省略,如server[a:f].lab.example.com

2. inventory 架構

主機清單可以區分為下列幾種群組:

  • all ( 表示所有機器 )
  • group ( 每一個群組可以包含一個或多個機器 )
  • ungrouped ( 未被分類到群組 )
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
localhost    # 1

[dev]    # 2
servera.lab.exampel.com
serverb.lab.exampel.com
servere.lab.example.com

[prod]    
serverc.lab.exampel.com

[test]
servere.lab.example.com
serverf.lab.example.com
192.168.0.1

[webservers:children]  # 3
dev
prod
  1. localhost 未加入任何群組所以是 ungrouped
  2. 總共有三個群組 dev 、 prod 、 test ,同一台機器可以包含在不同群組內
  3. webservers 為父群祖,其中 dev 與 prod 都為 webservers 的子群組
IMPORTANT
all 是預設群組,不用特別填寫也會存在
只要沒有群組的都會自動被編列為 ungrouped

3. 驗證 inventory 是否有效

撰寫一個 inventory 名稱可以隨意命名,不過通用都會寫成 inventory ,可以讓接手維護的人能更直覺看出,使用 ansible 指令可以檢查 inventory 正確性 ( 僅檢查語法,被控端機器有沒有實際運作不會在這一步驟檢查 )。

1
ansible <group> -i <inventory file> --list-hosts

檢查 inventory 內的所有群組

1
2
3
4
5
6
7
8
[student@workstation ~]$ ansible all -i inventory --list-hosts
  hosts (6):
    localhost
    serverf.lab.example.com
    servere.lab.example.com
    servera.lab.exampel.com
    serverb.lab.exampel.com
    serverc.lab.exampel.com

也可以針對群組來檢查

1
2
3
4
5
[student@workstation ~]$ ansible dev -i inventory --list-hosts
  hosts (3):
    servera.lab.exampel.com
    serverb.lab.exampel.com
    servere.lab.example.com

4. LAB 練習

4.1 LAB

嘗試將下列機器列表轉撰寫成 ini 格式的 inventory 清單,並使用 ansible 語法檢查 production 群組總計有幾台 ?

HOSTNAME 目的 區域 環境
servera.lab.example.com webserver Taipei development
serverb.lab.example.com webserver Taipei testing
serverc.lab.example.com webserver Kaohsiung production
serverd.lab.example.com webserver Taichung production

另外 Taipei 及 Taichung 是 BU 的子群組。

4.2 LAB 解答

  1. inventory 參考解答
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
[webservers]
server[a:d].lab.example.com

[Taipei]
servera.lab.example.com
serverb.lab.example.com

[Kaohsiung]
serverc.lab.example.com

[Taichung]
serverd.lab.example.com

[development]
servera.lab.example.com

[testing]
serverb.lab.example.com

[production]
serverc.lab.example.com
serverd.lab.example.com

[BU:children]
Taipei
Taichung
  1. production 群組計有兩台
1
2
3
4
[student@workstation ~]$ ansible production -i inventory --list-hosts
  hosts (2):
    serverc.lab.example.com
    serverd.lab.example.com

5. 小結

掌握 inventory 主機清單撰寫才能有效的控管所屬的機器,是 Ansible 很重要的必修課題之一。



如果你還沒有註冊 Like Coin,你可以在文章最下方看到 Like 的按鈕,點下去後即可申請帳號,透過申請帳號後可以幫我的文章按下 Like,而 Like 最多可以點五次,而你不用付出任何一塊錢,就能給我寫這篇文章的最大的回饋!