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

Конфигурация среды в марионетке

У меня есть собственный модуль марионеток для настройки веб-сервера Apache, и я использую шаблоны для копирования конфигураций. У нас есть разные среды, такие как производство, контроль качества, интеграционное тестирование.

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

До сих пор я узнал, что мы можем использовать файлы типа {environment} .yaml в heira, что я не предпочитаю, так как я не хочу поддерживать два набора файлов для таких сред, как production.yaml и qa.yaml.

Как лучше всего реализовать этот сценарий?

  1. Я считаю, что мы назначаем среду хоста в /etc/puppet/manifest/site.pp
  2. Где мы должны поддерживать переменные среды (например, domain = mysite.qa.example.com). Содержится ли это в фактах внутри модуля на основе среды из site.pp для узла или поддерживается как конкретная конфигурация узла в /etc/facter/facts.d/ на каждом узле?

Есть рабочий пример для вышеизложенного.

Правильный способ управления данными, зависящими от среды, - это использовать Hiera. Цель Hiera - разделить данные конфигурации (например, домены, IP-адреса) и логический код Puppet. Если у вас похожие среды, ожидается дублирование конфигурации.

Вы можете использовать статический факт для определения среды и использовать %{::environment} (для Puppet3) или %{facts.environment} (для Puppet4), чтобы получить доступ к нему в вашей структуре Hiera.

Ваши модули должны использовать параметризацию, чтобы позволить Hiera передавать значения в классы.

Чтобы сохранить статический факт, создайте файл в /etc/facter/facts.d (при необходимости создайте каталог) с содержимым environment=production, пример:

odin ~ # echo 'environment=production' >> /etc/facter/facts.d/env.txt
odin ~ # facter -p environment
production