Ansible获取库存中定义的主机名

时间:2018-01-21 14:13:14

标签: ansible hostname ansible-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

但我对这种方法不满意。

有什么想法吗?

2 个答案:

答案 0 :(得分:12)

<强>解释

如果库存文件是这样定义的:

xdg-open <directory>

然后你可以访问:

  • [server1_group] server1 ansible_host=141.151.176.223 server1事实;

  • inventory_hostname 141.151.176.223事实;

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

无论如何,first事实包含主机本身定义的主机名(在事实收集期间设置该值)。

<强>解决方案

您应该使用标准ansible_hostname声明指向目标的IP地址,并将库存主机名设置为您想要在Ansible playbooks中引用服务器。

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

ansible_host

答案 1 :(得分:0)

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

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

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