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。