通知如何遍历 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
}
给出这个简化的 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
}