По вашему конкретному вопросу вы делаете больше работы, чем нужно.Каждый раз, когда 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: ...