Что касается вашего конкретного вопроса, вы делаете больше работы, чем вам нужно. Каждый раз, когда Ansible сталкивается с хостом, он собирает серию «фактов» о хосте и сохраняет их в словаре, доступном во время ваших игр. Поэтому замените существующую задачу Command следующей, чтобы понять, что я имею в виду:
- name: Display the Ansible FQDN fact
debug:
var: ansible_fqdn
Запуск ansible -m setup <hostname taken from inventory file>
покажет вам все собираемые переменные.
Переменные для всех ваших хостов доступны через специальный словарь под названием hostvars, поэтому в вашем шаблоне вы можете сделать что-то вроде этого:
{% for host in groups.all %}
{{ hostvars[host]['ansible_fqdn'] }}
{% endfor %}
Вы можете заменить groups.all
на groups.<some inventory groupname>
, чтобы ограничить совпадающие хосты определенной группой.
Одна из возможных проблем заключается в том, что эти факты будут собраны только в том случае, если Ansible уже нацелен на хост, поэтому одна стратегия для более сложных сценариев:
# This play simply connects to all your hosts and gathers facts
- hosts: all
gather_facts: yes
# Now all subsequent plays have access to facts for all hosts
- hosts: <all or some group>
tasks: ...
person
clockworknet
schedule
20.12.2018