Игра 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 }}"