Я не уверен, возможно ли это, поскольку я пытаюсь понять разработку модуля Ansible и не могу найти пример, выходящий за рамки "Hello World".
Что я пытаюсь сделать:
Наши серверы предоставляются нашим ИТ-отделом. Я хотел бы динамически создать инвентаризацию и использовать Ansible фактов для определения типа сервера. У меня это изначально работает как отдельные Python сценарии в пределах playbook. Процесс выглядит следующим образом:
- Запустите nmap для поиска хостов и вывода на
/path/to/nmap_hosts.
- Выполните
ansible gather_facts -i /path/to/nmap_hosts | tee /path/to/facts_file
- Считайте
/path/to/facts_file
, извлеките собранные данные с /etc/ansible/facts.d/myfacts.fact
на хосте. - Создание файла инвентаризации динамического c, содержащего хосты / группы на основе метаданных из
/etc/ansible/facts.d/myfacts.fact
. - Обновите 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