Я думаю, что другие рассмотрели почему, поэтому я сделаю снимок как. Я думаю, что, поняв, как кто-то может использовать Puppet, чтобы делать то, что вы хотите, решение станет более ясным.
Сделайте основной случай первым
Ваш модуль Puppet для Apache не должен делать много по умолчанию. Установите Apache, настройте его на минимальный стандарт и запустите службу. Сделайте эту работу на всех дистрибутивах, которые вам нужны.
Добавить гибкость второй
Нам нужно добавить vhosts. В итоге вы получите систему, которая может удалять файлы или удалять их из набора каталогов conf.d или vhosts.d / в соответствии с вашими потребностями. То же самое с включением или настройкой модулей.
Используйте классы роли или группы узлов, чтобы связать ваши строительные блоки
Я думаю, что лучший способ использовать Puppet - убедиться, что он аддитивен. Используя приведенные выше примеры, у нас должен быть модуль, который делает
- Установите Apache
- Установить основные конфиги
- Добавьте vhosts к apache
- Настройте любые дополнительные параметры
- Запустите Apache
Вместо того, чтобы перегружать наш модуль Apache по умолчанию, чтобы делать именно то, что нам нужно для определенного хоста или группы, мы должны обработать это класс роли или группы хостов.
class role::web_cust1 {
include apache
apache::vhost {'www.domain.com': }
apache::vhost {'www.domain2.com': priority => '99', }
include php
include php-fpm
include mysql
}
Опять аддитив.
Положите особые случаи в Hiera
Я большой поклонник того, чтобы позволить Хиере Пуппета думать о ней как о базе данных Пуппета, хранить специальные биты. Если определенному хосту или группе хостов требуются специальные настройки, сначала установите в модуле разумное значение по умолчанию, чтобы обычные пользователи не знали об этом. Затем вставьте данные для этих специальных хостов или групп хостов, чтобы Hiera могла их использовать, передавая их Puppet по мере необходимости.
Мой вариант использования - порт прослушивания. Некоторые серверы имеют лак или haproxy перед ними. По умолчанию модуль Puppet имеет Apache, использующий порт 80, но если Hiera находит данные, он отменяет это значение по умолчанию.