Я использую виртуальную машину марионетки, чтобы следовать руководству по марионетке, и у меня есть следующий манифест:
# /root/learning-manifests/2.file.pp
file {
'/tmp/test1':
ensure => present,
content => "Hi.",
}
file {
'/tmp/test2':
ensure => directory,
mode => 0644,
}
file {
'/tmp/test3':
ensure => link,
target => '/tmp/test1',
}
notify {
"I'm notifying you.":
}
notify {
"So am I!":
}
Мой ожидаемый результат:
notice: I'm notifying you.
notice: /Stage[main]//Notify[I'm notifying you.]/message: defined 'message' as 'I'm notifying you.'
notice: So am I!
notice: /Stage[main]//Notify[So am I!]/message: defined 'message' as 'So am I!'
Мой фактический результат:
notice: So am I!
notice: /Stage[main]//Notify[So am I!]/message: defined 'message' as 'So am I!'
notice: I'm notifying you.
notice: /Stage[main]//Notify[I'm notifying you.]/message: defined 'message' as 'I'm notifying you.'
notice: Finished catalog run in 0.06 seconds
Может кто-нибудь объяснить, почему мои уведомления переносятся.
Спасибо.
Как написано в эта вики-страница PuppetLabs о порядке кукол:
Puppet может синхронизировать их в любом порядке: в отличие от процедурного языка, физический порядок ресурсов в манифесте не подразумевает логического порядка.
Вы должны использовать before, require, notify, subscribe, чтобы определить зависимости между ресурсами в ваших манифестах. Кроме того, вы можете определить свои зависимости, связав ссылки на ресурсы. Например:
notify {
"I'm notifying you.":
}
->
notify {
"So am I!":
}
Чтобы гарантировать порядок выполнения в марионетке, вам нужна некоторая иерархия классов.
Определения внутри одного класса могут выполняться в любом порядке, вы не можете на это повлиять.