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

Posted

技术标签:

【中文标题】Ansible 获取清单中定义的主机名【英文标题】:Ansible get hostname as defined in inventory 【发布时间】:2018-06-30 06:21:59 【问题描述】:

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

 [server1]
 141.151.176.223

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

inventory_hostname 设置为 141.151.176.223 ansible_hostnameinventory_hostname_short 设置为 148

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

 [server1]
 141.151.176.223 hostname=server1

但我对这种方法并不满意。

有什么想法吗?

【问题讨论】:

【参考方案1】:

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

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

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

【讨论】:

【参考方案2】:

说明

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

[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 playbook 中引用服务器的方式。

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

server1 ansible_host=141.151.176.223

【讨论】:

谢谢你。我不知道我用错了 Ansible。我已经修复了我的库存:) 如果你能提供准确的语法如何访问真的很感激

以上是关于Ansible 获取清单中定义的主机名的主要内容,如果未能解决你的问题,请参考以下文章

Ansible剧本管理(实例解释!!!)

如何在Ansible中使用静态和动态库存

Ansible2:主机清单

Ansible的脚本------playbook剧本

ansible的主机清单,yml语法,playbook详解+操作

ansible深入理解和操作——02(主机清单,yml语法,playbook详解+操作)