Назад | Перейти на главную страницу

лучшие практики марионеток: делитесь переменными между профилями

Я использую подход ролей и профилей для моего текущего марионеточного проекта.

Лучшие практики марионеток говорят мне:

Теперь я столкнулся со следующей проблемой (с использованием марионетки 5.5):

У меня есть один базовый профиль, который включается всеми узлами (настройка apt, установка часового пояса, серверов времени и т. Д.). Затем у меня есть несколько профилей для конкретных приложений (например, один для настройки IIS, один для настройки haproxy и т. Д.). Теперь я хотел бы добавить сервер журналов в свои профили приложений. Конечно, я рассчитываю указать сервер журналов только один раз в hiera (быть СУХИМ), но использовать его во всех профилях.

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

Другой подход, который я могу придумать, - это ввести общую переменную hiera, которую я ищу с помощью явного поиска. Например.:

class profile::haproxy(
   Stdlib::Host $log_server = lookup('common::log_server'),
) {}

Мне это тоже кажется подозрительным.

Итак, мой вопрос: как я могу делиться переменными между модулями / профилями, не нарушая лучших практик?

Я бы использовал функцию интерполяции в самой hiera:

common::log_server: foo
profile::haproxy::log_server: "%{lookup('common::log_server')}"
profile::iis::log_server: "%{lookup('common::log_server')}"

Это сохраняет независимость профилей и поддерживает СУХОЙ.

Вот документация по марионетке для этой техники.