Я пытаюсь написать условие if, чтобы сделать что-то в соответствии с текущим состоянием машины.Я понимаю, что в соответствии с философией Puppet каталоги оценивают и подталкивают машины до того, как они будут работать на машинах.
Это не просто философия Puppet 1006 *, она глубоко укоренилась в реализации Puppet .
Для обеспечения согласованности я хотел бы использовать кукольный вместо использования пользовательских сценариев (например, bash).Мне нужно такое поведение в puppet, если это было бы возможно.
Вот пример: агент puppet запускается каждый час на машине:
тянет репо, чтобы увидеть любой новый коммит - поискконкретное слово в репо - если найдено: вызвать некоторые зависимости - если не найдено: вызвать другие зависимости
В общем случае это просто не произойдет, по крайней мере, без каждого отдельного ресурса ведения журнала выполнениянеудачи.Если ресурс включен в каталог узла, так что он может быть применен вообще, то он будет применяться , если только он не зависит от другого ресурса, который выходит из строя.Можно предположить, что можно построить что-то вокруг Exec
ресурсов, настроенных на refreshonly
, но тогда вы вернетесь к сценарию.Даже в этом случае для поддержки стиля if
/ else
, в отличие от просто if
, вам, безусловно, потребуется реализовать пользовательский тип, чтобы обеспечить выбор того, какой из двух наборов ресурсов следует уведомлять.
Моя проблема: «Если предложение» уже оценивалось на сервере кукол, поэтому нет никакого способа установить зависимости в желаемом порядке в соответствии со статусом машины.
Если выможет позволить себе умеренную задержку (ограниченную интервалом запуска вашего агента) между отключаемым репо и любыми другими действиями, которые вы хотите выполнить, тогда я бы предложил использовать запланированное задание (например, задание cron
) для периодического снятия репозиторияи пользовательский факт для определения, на основе состояния машины перед запуском, какой альтернативы должен использовать создатель каталога.Вы даже можете управлять настройкой задания cron с помощью Puppet.
Если этого недостаточно, то выполнение всего этого прямо или косвенно с помощью запланированного задания, вероятно, является лучшей альтернативой.