Игра Ansible запускается на одной группе хостов, но зависит от фактов других

Вот основной вариант использования:

У меня есть обратный прокси-сервер NGINX, который я хочу настроить, и поэтому я определил игру, которая выполняется только в группе "nginx".

Тем не менее, для того, чтобы узнать IP-адреса для обратного прокси-сервера, мне нужно собрать факты из группы "upstreams". Этого не происходит, так как игра не запускается setup на "вверх по течению".

Этот ответ содержит решение, которое я использовал ранее, но я бы хотел, чтобы все это содержалось в одной игре хостов, которую я могу запустить независимо от других.

1 ответ

Решение

Используйте делегированные факты, pre_tasksи делегировать факты хостам, которым они принадлежат.

- hosts: nginx
  become: yes
  tags:
    - nginx
  vars:
    listen_address: "x.x.x.x"
  pre_tasks:
    - name: 'gather upstream facts.'
      setup:
      delegate_to: "{{item}}"
      delegate_facts: True
      with_items: "{{groups['upstreams']}}"
  roles:
    - role: nginx
      upstreams: "{{ groups['upstreams'] | map('extract', hostvars, ['ansible_all_ipv4_addresses']) | ipaddr('x.x.x.x') | first | list }}"
Другие вопросы по тегам