1.4. 构建清单
清单将受管节点组织到集中文件中,该文件为 Ansible 提供系统信息和网络位置。使用清单文件,Ansible 可以通过单个命令管理大量主机。要完成以下步骤,您需要至少一个主机系统的 IP 地址或完全限定域名(FQDN)。出于演示目的,主机可以在容器或虚拟机本地运行。
您还必须确保您的公共 SSH 密钥添加到每个主机上的 authorized_keys
文件中。使用以下步骤构建清单。
流程
在您创建的 ansible_quickstart
目录中,创建一个名为 inventory.ini
的文件。向 inventory.ini 文件中添加一个新的 [myhosts]
组,并指定每个主机系统的 IP 地址或完全限定域名(FQDN)。
[myhosts] 192.0.2.50 192.0.2.51 192.0.2.52
使用以下命令验证您的清单:
ansible-inventory -i inventory.ini --list
使用以下方法 ping 清单中的 myhosts
组:
ansible myhosts -m ping -i inventory.ini
如果在控制节点和受管节点上的用户名不同,请将 -u
选项与 Ansible 命令一起传递。
192.0.2.50 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 192.0.2.51 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" } 192.0.2.52 | SUCCESS => { "ansible_facts": { "discovered_interpreter_python": "/usr/bin/python3" }, "changed": false, "ping": "pong" }
您已成功构建了一个清单。
1.4.1. 以 INI 或 YAML 格式的清单
您可以在 INI 文件或 YAML 中创建清单。在大多数情况下,如上例,CIN 文件对于少量受管节点来说比较简单,易于阅读。当受管节点的数量增加时,使用 YAML 格式创建清单会变得可行。
例如,以下等同于 inventory.ini
,它为受管节点声明唯一名称,并使用 ansible_host
字段:
myhosts: hosts: my_host_01: ansible_host: 192.0.2.50 my_host_02: ansible_host: 192.0.2.51 my_host_03: ansible_host: 192.0.2.52
1.4.2. 构建清单的提示
- 确保组名称具有有意义的且唯一性。
- 组名称也区分大小写。
- 不要在组名称中使用空格、连字符或前面的数字(使用 floor_19,而不是 19th_floor)。
根据清单中的主机,逻辑上和何时对清单中的主机进行分组:
- what: 根据拓扑对主机进行分组,例如:db、web、leaf、spine。
- 其中:按地理位置对主机进行分组,例如: datacenter、region、floor、build。
- when :按阶段分组主机,例如:development, test, staging, production。
1.4.3. 使用 metagroups
创建一个元组,以使用以下语法在清单中组织多个组:
metagroupname: children:
以下清单演示了数据中心的基本结构。这个示例清单包含一个网络 metagroup,其中包含所有网络设备和一个 datacenter metagroup,其中包含 network group 和 all webservers。
leafs: hosts: leaf01: ansible_host: 192.0.2.100 leaf02: ansible_host: 192.0.2.110 spines: hosts: spine01: ansible_host: 192.0.2.120 spine02: ansible_host: 192.0.2.130 network: children: leafs: spines: webservers: hosts: webserver01: ansible_host: 192.0.2.140 webserver02: ansible_host: 192.0.2.150 datacenter: children: network: webservers: