Ви можете отримати доступ до будь-яких фактів / змінних запасів, зробивши щось подібне:
{{ 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 для зберігання фактів між тирами програвання. Якщо це ввімкнено, одна книга може посилатися на факти, отримані в іншій програмі, яка раніше працювала. Приклад документа, що відповідає
Уявіть, наприклад, дуже велику інфраструктуру з тисячами хостів. Кешування фактів може бути налаштовано так, щоб він працював щоночі, але конфігурація невеликого набору серверів може запускатись ad hoc або періодично протягом дня. Якщо кешування фактів увімкнено, не потрібно буде "вдаряти" по всіх серверах, щоб посилатися на змінні та інформацію про них.