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