Проблема лучше всего описана на примере:
Есть две роли:
-
mailserver
: базовая конфигурация почтового сервера -
mailinglist
: приложение списка рассылки
Программное обеспечение списка рассылки нуждается в почтовом сервере для транспортировки входящих писем в программное обеспечение списка рассылки "виртуальный почтовый ящик". Для этого требуется некоторая конфигурация почтового сервера. Но почтовый сервер не знает о роли списка рассылки и других ролях с аналогичными требованиями к конфигурации.
Что я хотел бы сделать, так это:
-
mailinglist
(и другие подобные роли) сохраняет конфигурацию транспорта в переменнойtransport_config
. Это может быть "транспортная карта", например $email = > $spool. -
mailinglist
зависит от ролиmailserver
. -
mailserver
настраивает его "транспорт" с помощью переменнойtransport_config
.
Есть ли способ сделать что-то подобное в Ansible? Или другое решение этой проблемы? Невозможно использовать переменные роли, такие как {role: mailserver, transport_config: ...}
, поскольку в зависимости от почтового сервера может быть более одной роли.
То, о чем я могу думать, является обходным путем: почтовый сервер читает/анализирует каталог конфигурации, в котором определены транспортные карты. mailinglist
и другие роли добавляют файлы в этот каталог. Проблема здесь в том, что для этого часто требуется "конструктор конфигурации", который читает такие каталоги конфигурации и генерирует основной файл конфигурации.