Убедитесь, что Puppet выполняет процедурные шаги в рамках развертывания

Убедитесь, что Puppet выполняет процедурные шаги в рамках развертывания

Я знаю, что использование процедурных шагов в Puppet обычно не приветствуется, но поскольку мы используем его для развертывания кластерных приложений, управляемых Veritas, существует определенный набор шагов, которые должны быть выполнены до вызова установки RPM.

В настоящее время мы вручную замораживаем кластер Veritas, чтобы он не пытался переключить приложение, запускаем Puppet, который устанавливает RPM (при необходимости останавливая приложение), и Puppet получает указание не запускать приложение. Затем мы вручную запускаем приложение и размораживаем Veritas. Наконец, мы проверяем статус.

Я хотел бы автоматизировать эти шаги Veritas, чтобы нам пришлось запускать только Puppet. Эти шаги выполняются только в нашей производственной среде. Для всех остальных нам нужно просто вызвать установку RPM. Чтобы усложнить ситуацию, я не хочу выполнять ни один из этих шагов, если ничего не изменилось.

Какой предпочтительный способ сделать что-то подобное? Я читал оЭтапы бега, но, похоже, это потребует существенного рефакторинга моего существующего кода.

Может ли кто-нибудь подсказать мне, как с этим справиться?

решение1

Исходя из вашего описания проблемы, вам нужно либо использовать планы, либо засунуть все в exec или script, чтобы вы могли указать порядок вещей. Манифесты Puppet в том виде, в котором они есть, не оснащены для обработки вашего варианта использования.

Примером может служить:


exec { 'do veritas upgrade' :
  onlyif => '${lookup(veritas_version)} is greater than /usr/bin/veritas --version',
  exec => 'freeze && stop && install && start && unfreeze && verify',
}

Связанный контент