Ansible可同時操作屬于一個組的多臺主機。組和主機之間的關系通過Inventory文件配置。Ansible Inventory分為靜態Inventory和動態Inventory。當被管理主機比較少的情況下,直接在靜態Inventory的host文件中管理即可;當主機越來越多,不斷變化時,可以通過動態Inventory來管理。

靜態Inventory

靜態Inventory指的是在一個靜態文件中預先配置主機名稱、主機地址和連接信息等。默認文件路徑為/etc/ansible/hosts

host文件中方括號里的內容是組名,用于對系統進行分類,便于對不同系統進行個別的管理。

# Ex 1: Ungrouped hosts, specify before any group headers.

## green.example.com
## blue.example.com
## 192.168.100.1
## 192.168.100.10

# Ex 2: A collection of hosts belonging to the 'webservers' group

## [webservers]
## alpha.example.org
## beta.example.org
## 192.168.1.100
## 192.168.1.110

# If you have multiple hosts following a pattern you can specify
# them like this:

## www[001:006].example.com

# Ex 3: A collection of database servers in the 'dbservers' group

## [dbservers]
##
## db01.intranet.mydomain.net
## db02.intranet.mydomain.net
#
## db-[99:101]-node.example.com

動態Inventory

動態Inventory指的是通過外部腳本自動獲取主機列表,并按照設置的分組方式自動對主機列表進行分組,同時按照Ansible所要求的格式返回給Ansible命令。

以下是阿里云動態Inventory獲取到的一部分的主機信息。

{
  "_meta": {
    "hostvars": {
      "i_bp171m264ryt9*******": {
        "ansible_ssh_host": "47.98.xx.xx", 
        "availability_zone": "cn-hangzhou-g", 
        "block_device_mapping": [
          ...
        ], 
        ...
        "host_name": "iZbp171m264ryt9******Z", 
        "id": "i-bp171m264ryt9*******", 
        "image_id": "ubuntu_16_0402_64_20G_alibase_20180409.vhd", 
        "inner_ip_address": "", 
        ...
        "tags": {
          "env": "dev"
        }      }, 
      "i_bp1i1aitghkkq*******": {
        "ansible_ssh_host": "47.96.xx.xx", 
        "availability_zone": "cn-hangzhou-g", 
        "block_device_mapping": [
          ...
        ], 
        "eip": {
          ...
          "ip_address": "47.96.xx.xx"
        }, 
        ...
        "host_name": "terraform", 
        "id": "i-bp1i1aitghkkq*******", 
        "image_id": "m-bp1243pi65bw8*****", 
        "inner_ip_address": "", 
        ...
      }, 
      ...
    }
  }
},
"alicloud": {
  "children": [
    "i_bp1i1aitghkkq*******", 
    "i_bp171m264ryt9*******"
  ]
},
"cn-hangzhou": [
  "i_bp1i1aitghkkq*******", 
  "i_bp171m264ryt9*******"
],
"cn-hangzhou-g": [
  "i_bp1i1aitghkkq*******", 
  "i_bp171m264ryt9c******"
]

動態Inventory通常通過調用服務API或者接入庫查詢的方式,自動查詢返回主機列表,并更新Inventory的主機信息,以應對主機資源動態的增減的場景。

阿里云已經提供了動態Inventory文件,利用該文件可實現對指定過濾條件的主機信息的動態獲取。更多詳細信息,請參見使用動態Inventory