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_hostname
和 inventory_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
然后就可以访问了:
server1
与 inventory_hostname
事实;
141.151.176.223
与 ansible_host
事实;
server1_group
和 group_names|first
(group_names
实际上包含服务器所属的所有组的列表,first
从该列表中选择第一个元素)。
不管上述情况如何,ansible_hostname
fact 包含在主机本身上定义的主机名(该值在事实收集期间设置)。
解决方案
您应该使用标准的ansible_host
声明来指向目标的 IP 地址,并将清单主机名设置为您希望在 Ansible playbook 中引用服务器的方式。
特别是您可以完全跳过组定义而只定义:
server1 ansible_host=141.151.176.223
【讨论】:
谢谢你。我不知道我用错了 Ansible。我已经修复了我的库存:) 如果你能提供准确的语法如何访问真的很感激以上是关于Ansible 获取清单中定义的主机名的主要内容,如果未能解决你的问题,请参考以下文章