通知如何遍历Puppet资源链?

时间:2015-03-03 20:17:37

标签: puppet

鉴于这个简化的Puppet示例,很明显,my_file的任何更改都会因my_service链接运算符而触发~>刷新:

package { 'my_package': }
->
file { 'my_file': }
~>
service { 'my_service': }

更改为my_package是否也会导致my_service刷新? (也就是说,状态变化是否会通过非通知->连锁运营商传播?)

我知道如果所有操作员都通知操作员,刷新事件将通过链传播,但文档并不清楚它是如何在混合链中工作的。

1 个答案:

答案 0 :(得分:3)

通知从不传播通过其他资源,即使它们位于设置为通知的资源链中。

当资源被"更改"时,它会通知任何订阅了自己的更改的资源。这些资源调用了refresh方法,可以执行该类型所需的任何操作。之后没有其他事情发生。

如果通知资源已更改本身,则它还会通知任何订阅了 it 更改的人。这不会传播通知,它实际上正在传播更改通过清单。

例如,如果/tmp/markerfile已经存在,则此清单将不会应用exec资源:

notify { 'test': }
~>
file { '/tmp/markerfile':
  ensure => present
}
~>
exec { '/bin/date':
  refreshonly => true
}