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