Как разделить список хостов и иерархию групп в инвентаре ансибля?

У меня большой проект под Ansible. В нем много групп, большинство из них для ясности. Например, есть группы dbaccess, java и т. Д., Которые помогают найти хосты, которым нужен доступ к базе данных, установить java и т. Д. Некоторые из них вложены (например, группа «сборщик» является дочерней для «java». ', так как всем сборщикам нужна java).

Все это хранится в инвентаре в технике «группа: дети».

Но когда я хочу создать промежуточный инвентарь, у меня возникает проблема: мне нужно не только предоставить новые хосты в инвентаре, но и воссоздать всю иерархию группы.

Интересно, есть ли способ разделить инвентарь таким образом, чтобы иерархия групп сохранялась отдельно от списка хостов?

Или, может быть, в Ansible есть другой способ организовать такую ​​иерархию?

(пример моего реального инвентаря):

[collectors]
(host list)
[publishers-http]
(host list)
[publishers-smtp]
(host list)
[central]
(host list)

[java:children]
collectors
publishers-http
central

[postgre_access:children]
collectors
publishers
central

[mongo_access:children]
collectors
publishers-smtp
central

[redis_access:children]
central
publishers

Мне нужен способ изменить списки хостов для постановки, но сохранить отношения между группами нетронутыми.


person George Shuklin    schedule 14.11.2017    source источник
comment
Я хочу иметь «промежуточный» инвентарь, не копируя всю информацию об иерархии из «производства». Ansible не допускает одновременного использования двух инвентаризаций, поэтому я не могу просто разделить его на файлы «хосты» и «отношения групп».   -  person George Shuklin    schedule 14.11.2017
comment
Ansible не допускает одновременного использования двух инвентаризаций - я сказал сохранять в два файла в одном инвентаре. Я не могу просто разделить его на файлы "хосты" и "отношения групп". - конечно, можете. Вам просто нужно убедиться, что файл для групп читается после файла для хостов. Таким образом, имена groups и hosts не будут работать, но 01_hosts, 02_groups будут.   -  person techraf    schedule 14.11.2017


Ответы (1)


Разделите свой инвентарь на два файла - один с именем 01_hosts, содержащий:

[collectors]
(host list)
[publishers-http]
(host list)
[publishers-smtp]
(host list)
[central]
(host list)

другой, названный 02_groups, содержащий:

[java:children]
collectors
publishers-http
central

[postgre_access:children]
collectors
publishers
central

[mongo_access:children]
collectors
publishers-smtp
central

[redis_access:children]
central
publishers

Сохраните их в каталог my_inventory, используйте путь к my_inventory в качестве параметра для инвентаризации (либо в CLI, либо в ansible.cfg).

Используйте символические ссылки, чтобы иметь единый источник для 02_groups.


Я предложил префиксы 01_ и 02_, потому что Ansible читает файлы из каталога инвентаризации в алфавитном порядке, а хосты / группы должны быть определены перед группами групп.

person techraf    schedule 14.11.2017
comment
Я пропустил ту часть, где говорилось, что инвентарь может быть каталогом. И идея символической ссылки отличная! Спасибо! - person George Shuklin; 14.11.2017