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: