ansible 无法获取 inventory_hostname
ansible can't get inventory_hostname
我正在尝试获取正在处理的服务器的简称。
我在 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 中有这个:
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 %}