小技巧 - Inventory 格式的轉換

Inventory 就是主機清單,裏面描述主機的連線資訊,一般文件常用的是 ini 格式。

但在 DO447 的第二章有提到 inventory 格式的轉換,我自己是比較熟悉 ini 格式的 inventory,所以對於要轉換為 YAML 格式的地方就覺得比較卡頓。

那該怎麼克服呢?我臨機一動,想到 ansible 有提供 ansible-inventory 指令,用這個就可以解決我的問題。

假定已經有個 ini 格式的 inventory 檔案,內容如下

# inventory
[ubuntu20]
u3 ansible_host=127.0.0.1 ansible_port=2201 ansible_user='ubuntu'
u1 ansible_host=127.0.0.1 ansible_port=2222 ansible_user='vagrant'

[ubuntu18]
u4 ansible_host=127.0.0.1 ansible_port=2202 ansible_user='vagrant'

[ubuntu16]
u2 ansible_host=127.0.0.1 ansible_port=2200 ansible_user='vagrant'

接著就可以用下面指令來轉換

ansible-inventory -i inventory --list --yaml > inventory.yml

轉換結果如下

all:
  children:
    ungrouped:
      hosts:
        u1:
          ansible_host: 127.0.0.1
          ansible_port: 2222
          ansible_user: vagrant
        u2:
          ansible_host: 127.0.0.1
          ansible_port: 2200
          ansible_user: vagrant
        u3:
          ansible_host: 127.0.0.1
          ansible_port: 2201
          ansible_user: ubuntu
        u4:
          ansible_host: 127.0.0.1
          ansible_port: 2202
          ansible_user: vagrant

透過這個指令就可以很快的轉換格式,也可以幫助自己去記憶跟學習 YAML 格式的 inventory 了。