我正在使用 puppet vm 来遵循 puppet 教程,并且有以下清单:
# /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
有人可以解释一下为什么我的通知被颠倒了。
谢谢。
答案1
正如所写这个 PuppetLabs wiki 页面有关 Puppet 排序:
Puppet 可以按任何顺序同步它们:与程序语言不同,清单中资源的物理顺序并不意味着逻辑顺序。
您应该使用 before、require、notify、subscribe 来定义清单中资源之间的依赖关系。此外,您还可以通过链接资源引用来定义依赖关系。例如:
notify {
"I'm notifying you.":
}
->
notify {
"So am I!":
}
答案2
为了保证 Puppet 中的执行顺序,您需要有一些类层次结构。
单个类内的定义可以按任何顺序执行,您无法影响这一点。