Умеет, как хранить выходные данные регистра в списке при переборе инвентаря - PullRequest
0 голосов
/ 20 декабря 2018

Я запускаю команду оболочки, эта команда запускается для всех хостов, перечисленных в моем файле инвентаря.Затем я использую регистр для определения переменной, когда я получаю эти значения для отладочных сообщений, я вижу переменную регистра для всех хостов, напечатанных для всех IP-адресов в моем инвентаре, но я хочу сохранить их в списке, чтобы я мог использовать их в шаблонах.Как мы можем этого достичь?

- name: Command
    shell: hostname -f
    register: fqdn_name

1 Ответ

0 голосов
/ 20 декабря 2018

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