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
那么您可以访问:
server1
与 inventory_hostname
事实;
141.151.176.223
与 ansible_host
事实;
server1_group
和 group_names|first
(group_names
事实包含服务器所属的所有组的列表,first
从该列表中选择第一个元素).
尽管如此,ansible_hostname
fact 包含主机本身定义的主机名(该值是在收集事实时设置的)。
解决方案
您应该使用标准 ansible_host
声明来指向目标的 IP 地址,并将清单主机名设置为您希望在 Ansible 剧本中引用服务器的方式。
特别是您可以完全跳过组定义并只定义:
server1 ansible_host=141.151.176.223
在我的清单中,我这样定义主机:
[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
那么您可以访问:
server1
与inventory_hostname
事实;141.151.176.223
与ansible_host
事实;server1_group
和group_names|first
(group_names
事实包含服务器所属的所有组的列表,first
从该列表中选择第一个元素).
尽管如此,ansible_hostname
fact 包含主机本身定义的主机名(该值是在收集事实时设置的)。
解决方案
您应该使用标准 ansible_host
声明来指向目标的 IP 地址,并将清单主机名设置为您希望在 Ansible 剧本中引用服务器的方式。
特别是您可以完全跳过组定义并只定义:
server1 ansible_host=141.151.176.223