通知如何遍历 Puppet 资源链?

How do notifications traverse a Puppet resource chain?

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

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

my_package 的更改是否也会导致 my_service 刷新? (也就是说,状态变化会通过非通知 -> 链运算符传播吗?)

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

通知从不通过另一个资源传播,即使它们在设置为通知的资源链中也是如此。

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

如果通知的资源自身发生变化,那么它也会通知订阅变化的任何人。这不是传播通知,它实际上是传播 更改 通过清单。

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

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