我正在尝试获取正在使用的服务器的简称。

我在jinja2中有这个:

ServerAlias graphite.{{ hostvars[inventory_hostname] }}
ServerAlias graphite.{{ hostvars[inventory_hostname] }}.{{dc}}.{{subnet}}

以上只是泄漏了事实的整体,而不仅仅是简称。

这是hosts.yaml的样子:
graphite.experimental.com dc=lv1 subnet=coupons.lan

最佳答案

您只想使用{{ inventory_hostname }}(或简称{{ inventory_hostname_short }})。
hostvars对象是一种访问Ansible知道的每个主机的变量的方法。因此,hostvars[inventory_hostname]将为您提供包含有关当前主机的所有已知事实的对象,hostvars['foo']将为您提供包含有关主机“foo”的所有已知事实的对象。

假设您有一组名为“db_servers”的主机,并且想要在模板中生成所有这些主机的IP地址的列表。这是您要执行的操作:

{% for host in groups['db_servers'] %}
   {{ hostvars[host]['ansible_eth0']['ipv4']['address'] }}
{% endfor %}

关于jinja2 - Ansible无法获取ventory_hostname,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/28686571/

10-10 17:17