Я знаю, что использование процедурных шагов в Puppet обычно не одобряется, но, поскольку мы используем его для развертывания кластеризованных приложений, управляемых Veritas, перед вызовом установки rpm необходимо выполнить определенный набор шагов.
В настоящее время мы вручную замораживаем кластер Veritas, чтобы он не пытался переключить приложение, запускаем Puppet, который устанавливает RPM (при необходимости останавливая приложение), и Puppet получает указание не запускать приложение. Затем мы вручную запускаем приложение и размораживаем Veritas. Наконец, мы проверяем статус.
Я хотел бы автоматизировать эти шаги Veritas, чтобы нам оставалось только запустить Puppet. Эти шаги выполняются только в нашей производственной среде. Для всех остальных нам просто нужно вызвать установку RPM. Чтобы усложнить ситуацию, я не хочу выполнять ни один из этих шагов, если ничего не изменилось.
Каков предпочтительный способ сделать что-то подобное? Я читал о Этапы выполнения, но похоже, что это потребует значительного рефакторинга моего существующего кода.
Интересно, может ли кто-нибудь дать мне несколько идей, как с этим справиться.
Основываясь на вашем описании проблемы, вам нужно либо использовать планы, либо передать все в exec или скрипт, чтобы вы могли указать порядок вещей. Puppet проявляется, поскольку не приспособлен для вашего варианта использования.
Примером может быть:
exec { 'do veritas upgrade' :
onlyif => '${lookup(veritas_version)} is greater than /usr/bin/veritas --version',
exec => 'freeze && stop && install && start && unfreeze && verify',
}