Этот ответ состоит из двух частей, чтобы рассмотреть две возможные интерпретации вашего запроса об отношениях обновления в целом.
Обновление событий и упорядочение из других классов
Пустья попробую переписать то, что я понимаю, твой вопрос будет в более общих чертах.Вы спрашиваете:
Вопрос
Предположим, что ресурс Exec Y подписывает с refreshonly => true
на ресурс X в классе A. Затем предположим, чторесурс Z требует того же ресурса X в классе B.
Другими словами, представьте себе этот код:
class b () {
notify { 'Z':
require => Notify['X'],
}
}
class a () {
notify { 'X': }
exec { 'Y':
command => '/bin/echo Y',
refreshonly => true,
subscribe => Notify['X'],
}
}
include a
include b
Возможно ли, чтобы окончательный порядок был X, Z, Y, и если да, то событие refresh обязательно достигнет ресурса Exec Y, учитывая, что X и Y могут быть разделены Z по времени?
Ответ
Да и да.Напомним, что Puppet строит ориентированный ациклический граф и вычисляет окончательный порядок из обхода этого графа.Этот код приводит к двум возможным порядкам во времени: X, Y, Z и X, Z, Y (попробуйте несколько раз, используя puppet apply /tmp/code.pp --ordering=random
).
Но это нормально, потому что Puppet также отслеживает очередь изресурсы, которые получили событие обновления.
Что если пакет A установлен как зависимость пакета B менеджером пакетов за пределами Puppet
Также возможно, что выспрашивают о RPM или других зависимостях уровня менеджера пакетов, существующих за пределами Puppet.Естественно, если это так, Puppet не может знать об этом.
Если да, то событие обновления не будет отправлено, если менеджер пакетов (или что-либо еще, кроме Puppet) выполнит подписку.