Как получить Ansible фактов в плагине инвентаря - PullRequest
0 голосов
/ 20 апреля 2020

Я не уверен, возможно ли это, поскольку я пытаюсь понять разработку модуля Ansible и не могу найти пример, выходящий за рамки "Hello World".

Что я пытаюсь сделать:

Наши серверы предоставляются нашим ИТ-отделом. Я хотел бы динамически создать инвентаризацию и использовать Ansible фактов для определения типа сервера. У меня это изначально работает как отдельные Python сценарии в пределах playbook. Процесс выглядит следующим образом:

  1. Запустите nmap для поиска хостов и вывода на /path/to/nmap_hosts.
  2. Выполните ansible gather_facts -i /path/to/nmap_hosts | tee /path/to/facts_file
  3. Считайте /path/to/facts_file, извлеките собранные данные с /etc/ansible/facts.d/myfacts.fact на хосте.
  4. Создание файла инвентаризации динамического c, содержащего хосты / группы на основе метаданных из /etc/ansible/facts.d/myfacts.fact.
  5. Обновите sh инвентарь, используя meta: refresh_inventory.

Вместо того, чтобы выполнять отдельные задачи в сборнике игр, я пытаюсь добиться того же в плагине пользовательского инвентаря. Я копался в Ansible источнике, пытаясь понять, возможно ли вообще сделать ansible gather_facts в BaseInventoryPlugin.parse().

Я углубился в следующий исходный код и не могу определить, как это сделать. Это вообще возможно? https://github.com/ansible/ansible/blob/devel/lib/ansible/executor/module_common.py https://github.com/ansible/ansible/blob/devel/lib/ansible/module_utils/basic.py https://github.com/ansible/ansible/blob/devel/lib/ansible/module_utils/facts/compat.py

1 Ответ

0 голосов
/ 22 апреля 2020

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...