构建清单
清单在集中式文件中组织受管节点,这些文件为 Ansible 提供系统信息和网络位置。 使用清单文件,Ansible 可以使用单个命令管理大量主机。
要完成以下步骤,您将需要至少一个主机系统的 IP 地址或完全限定域名 (FQDN)。 出于演示目的,主机可以在容器或虚拟机中本地运行。 您还必须确保您的公共 SSH 密钥已添加到每个主机上的 authorized_keys
文件中。
继续开始使用 Ansible 并按如下方式构建清单
在您在 前面的步骤中创建的
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
注意
如果控制节点和被管理节点上的用户名不同,请使用
ansible
命令传递-u
选项。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" }
恭喜,您已成功构建了一个清单。 通过创建剧本继续开始使用 Ansible。
INI 或 YAML 格式的清单
您可以使用 INI
文件或 YAML
创建清单。 在大多数情况下,例如前面步骤中的示例,INI
文件对于少量受管节点来说简单易读。
随着受管节点数量的增加,以 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
构建清单的提示
确保组名称有意义且唯一。 组名称也区分大小写。
避免在组名称中使用空格、连字符和前导数字(使用
floor_19
,而不是19th_floor
)。根据 What、Where 和 When 在清单中逻辑地对主机进行分组。
- What
根据拓扑对主机进行分组,例如:db、web、leaf、spine。
- Where
按地理位置对主机进行分组,例如:数据中心、区域、楼层、建筑物。
- When
按阶段对主机进行分组,例如:开发、测试、暂存、生产。
使用元组
使用以下语法创建在清单中组织多个组的元组
metagroupname:
children:
以下清单说明了数据中心的基本结构。此示例清单包含一个 network
元组,其中包括所有网络设备,以及一个 datacenter
元组,其中包括 network
组和所有 Web 服务器。
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:
创建变量
变量为受管节点设置值,例如 IP 地址、FQDN、操作系统和 SSH 用户,因此您在运行 Ansible 命令时无需传递它们。
变量可以应用于特定主机。
webservers:
hosts:
webserver01:
ansible_host: 192.0.2.140
http_port: 80
webserver02:
ansible_host: 192.0.2.150
http_port: 443
变量也可以应用于组中的所有主机。
webservers:
hosts:
webserver01:
ansible_host: 192.0.2.140
http_port: 80
webserver02:
ansible_host: 192.0.2.150
http_port: 443
vars:
ansible_user: my_server_user
另请参阅
- 如何构建您的清单
了解有关
YAML
或INI
格式清单的更多信息。- 将变量添加到清单
了解有关清单变量及其语法的更多信息。
- Ansible Vault
了解如何加密清单中的敏感内容,例如密码和密钥。