Ansible 获取清单中定义的主机名

Ansible get hostname as defined in inventory

在我的清单中,我这样定义主机:

 [server1]
 141.151.176.223

我正在寻找一个保留 server1 名称的变量,因为我正在使用它来定义服务器主机名。

inventory_hostname 设置为 141.151.176.223 ansible_hostname 以及 inventory_hostname_short 设置为 148

为了解决这个问题,我设置了自己的变量,如下所示:

 [server1]
 141.151.176.223 hostname=server1

但我对这种做法并不满意

有什么想法吗?

[server1] 声明是 group 的名称,而不是主机(即使您只将单个主机分配给该组)。

由于ansible允许将一个主机放在多个组中,您只能将名称作为数组获取:http://docs.ansible.com/ansible/latest/playbooks_variables.html#magic-variables-and-how-to-access-information-about-other-hosts

所以我认为您找到的解决方法是可行的方法,除非您可以使用真实的主机名而不是 IP 地址(使用 DNS 或仅使用静态主机文件)。

说明

如果清单文件是这样定义的:

[server1_group]
server1 ansible_host=141.151.176.223

那么您可以访问:

  • server1inventory_hostname 事实;

  • 141.151.176.223ansible_host 事实;

  • server1_groupgroup_names|firstgroup_names 事实包含服务器所属的所有组的列表,first 从该列表中选择第一个元素).

尽管如此,ansible_hostname fact 包含主机本身定义的主机名(该值是在收集事实时设置的)。


解决方案

您应该使用标准 ansible_host 声明来指向目标的 IP 地址,并将清单主机名设置为您希望在 Ansible 剧本中引用服务器的方式。

特别是您可以完全跳过组定义并只定义:

server1 ansible_host=141.151.176.223