использование модуля Ansible set fact для определения постоянных фактов?

Я хочу определить playbook, который устанавливает факты о моих хозяевах, которые могут быть использованы в других пьесах. Модуль set_fact утверждает, что может это сделать ... http://docs.ansible.com/set_fact_module.html -- однако это не работает ... Факты, которые я определяю, доступны после вызова set_fact в рамках запуска play-book-я ожидал бы, что смогу использовать Ansible all-m setup и увидеть факт, определенный где-то в фактах, собранных для каждого хоста ...

Я попытался посмотреть код для модуля set_fact - но все, что я нашел, это строка документации ... https://github.com/ansible/ansible-modules-core/blob/19b328c4df2157b6c0191e9144236643ce2be890/utilities/logic/set_fact.py

3 ответов


во-первых, модуль set_fact устанавливает только факты, доступные во время выполнения. Для настойчивых фактов вам нужно либо:

--Static--

  • определите их в один из следующих:
    • vars/
    • group_vars/
    • host_vars/

--Dynamic--

последнее-это то, что я обычно выбираю, так как его довольно просто настроить, и факты всегда доступны на всех хостах, даже если вы делаете что-то вроде:

  • получение всех фактов для всех хостов при подключении к хосту nagios для создания его файлов конфигурации.

какую версию Ansible вы используете? Начиная с версии 1.8, есть встроенный возможность кэширования фактов, но по умолчанию он отключен. Вам нужно будет включить его в вашем ansible.cfg файл, и вы также должны иметь сервер redis работает, так как это то, что на самом деле кэширует факты.


Если удаленно управляемая система имеет/etc/ansible / facts.D каталог, любые файлы в этом каталоге, заканчивающиеся на .факт, может быть JSON, INI или исполняемые файлы, возвращающие JSON, и они могут поставлять локальные факты в Ansible, начиная с 1.3. Альтернативный каталог можно указать с помощью директивы fact_path play.

http://docs.ansible.com/ansible/playbooks_variables.html#local-facts-facts-d