ansible не может получить имя хоста инвентаризации


Я пытаюсь получить краткое имя сервера, над которым ведется работа.

У меня есть это в jinja2:

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

Вышесказанное просто выплескивает всю совокупность фактов вместо короткого названия.

Вот что такое хозяева.ямл выглядит так:

graphite.experimental.com dc=lv1 subnet=coupons.lan
1 5

1 ответ:

То, что вы хотите использовать, - это просто {{ 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 %}