Назад | Перейти на главную страницу

как получить доступ к переменной хоста другого хоста с помощью Ansible?

Допустим, у вас есть хост, который собирает некоторые данные, и он находится в группе [collectors]. У меня тоже есть хозяева в группе [reporters]. Итак, я хочу установить переменную для репортеров из groups['collectors'][0] айпи адрес. Но методика подготовки репортеров не работает. [collectors] group, поэтому факты для этого хоста не собираются. Есть ли способ не запрограммировать IP-адрес жестко?

Вы можете получить доступ практически к любым фактам / переменным инвентаризации, сделав что-то вроде этого:

{{ hostvars['foo.example.com']['ansible_eth0']['ipv4']['address'] }}

или, если вы хотите сделать это через индекс в группе:

{{ hostvars[groups['collectors'][0]]['ansible_eth0']['ipv4']['address'] }}

Большой трюк заключается в том, что вам нужно собрать факты для всех хостов / групп, которые вас интересуют. Таким образом, вы захотите изменить свою книгу действий, которая работает против группы репортеров, чтобы включить в нее неоперативную (фиктивную) задачу, которая применяется группе коллекционеров. Это заставит Ansible собирать факты о хостах-сборщиках, чтобы к ним можно было получить доступ из группы репортеров. Так что вы можете добавить что-то вроде этого в начало своей книги для репортеров:

- hosts: collectors
  name: Gather facts from collectors
  tasks: [ ]

Пустые скобки в основном означают, что никакие задачи не будут выполняться, но это все равно заставит Ansible собирать факты о сборщиках, чтобы вы могли затем ссылаться на них в задачах, которые вы запускаете против своих репортеров.

Редактировать # 1

Мне пришло в голову, что я должен также упомянуть, что начиная с версии 1.8 Ansible есть кеширование фактов функция, которая теперь доступна. Кэширование фактов полагается на сервер Redis для хранения фактов между запусками playbook. Если он включен, одна книга воспроизведения может ссылаться на факты, которые были получены другой книгой воспроизведения, которая выполнялась ранее. Пример, приведенный в документации Ansible:

Представьте, например, очень большую инфраструктуру с тысячами хостов. Кэширование фактов можно настроить для работы в ночное время, но конфигурация небольшого набора серверов может выполняться нерегулярно или периодически в течение дня. При включенном кэшировании фактов нет необходимости «нажимать» на все серверы, чтобы ссылаться на переменные и информацию о них.