意外的 Puppet 通知命令

意外的 Puppet 通知命令

我正在使用 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 中的执行顺序,您需要有一些类层次结构。

单个类内的定义可以按任何顺序执行,您无法影响这一点。

相关内容