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。