Это ограничение присуще моделированию Notify
как ресурса.По определению и дизайну применение ресурса ничего не делает, если этот ресурс изначально синхронизирован с целевой системой.Чтобы ресурсы Notify
что-либо делали (т.е. отправляли свое сообщение), они всегда изначально не синхронизированы, а отправка их сообщения приводит их к синхронизации.Вы можете осмыслить это как переход от «не напечатано» к «напечатано», если хотите.
Но это означает, что с точки зрения Puppet каждый Notify
ресурс изменяется каждый раз, когда он применяется.Это генерирует событие, которое передается в контейнер Notify
и далее.
Это поведение недопустимо, поэтому как я могу напечатать что-то агенту марионеток (puppet agent -t
) без уведомления/ обновить автоматически содержащиеся ресурсы?
Если у вас должны быть сообщения в журнале агента (в отличие от основного), тогда ваши возможности ограничены.На самом деле, лучшее, что я могу придумать, это написать собственный тип ресурса и провайдера, который всегда синхронизирован, но в любом случае отправляет сообщения в журнал.Я протестировал использование Exec
с параметром unless
, который выдает сообщение, но Puppet, похоже, не печатает вывод команды unless
.Конечно, Notify
прямо.
Если было бы достаточно отправить сообщение в журнал master , то для этого есть набор функций.Среди них note () , info () и debug () кажутся наиболее вероятными для вашей цели.
Дополнительное примечание : фраза «автономные ресурсы» предполагает, что есть и другой вид.До Puppet 6 вы могли объявить ресурсы в верхней области видимости, и они содержатся только самим каталогом, который не распространяет события ни на что другое.Но каждый ресурс, объявленный внутри контейнера - класс или определенный тип - содержится в этом контейнере.Это всегда казалось мне очень естественным.Обычно вещь, которая вводит людей в заблуждение по поводу сдерживания, состоит в том, что классы содержатся только тогда, когда вы явно делаете это так.Для этого есть веские причины, но я не буду вдаваться в них здесь.