Puppet 通知如何遍历傀儡资源链?
在这个简化的Puppet示例中,很明显,对Puppet 通知如何遍历傀儡资源链?,puppet,Puppet,在这个简化的Puppet示例中,很明显,对my_文件的任何更改都会触发my_服务刷新,因为~>链接操作符: package { 'my_package': } -> file { 'my_file': } ~> service { 'my_service': } 更改为my\u程序包是否也会导致my\u服务刷新?(也就是说,状态更改是否会通过非通知的->链操作符传播?) 我知道,如果所有操作员都通知操作员,刷新事件将通过一个链传播,但文档不清楚它在混合链中是如何工作的。通知从不通过
my_文件的任何更改都会触发my_服务
刷新,因为~>
链接操作符:
package { 'my_package': }
->
file { 'my_file': }
~>
service { 'my_service': }
更改为my\u程序包
是否也会导致my\u服务
刷新?(也就是说,状态更改是否会通过非通知的->
链操作符传播?)
我知道,如果所有操作员都通知操作员,刷新事件将通过一个链传播,但文档不清楚它在混合链中是如何工作的。通知从不通过另一个资源传播,即使它们位于设置为通知的资源链中
当一个资源被“更改”时,它会通知所有订阅了它自己的更改的资源。这些资源有一个调用的refresh
方法,该方法执行该类型所需的任何操作。在那之后,没有其他事情发生
如果通知的资源本身发生了更改,则它还将通知订阅其更改的任何人。这不是传播通知,而是通过清单传播更改
例如,如果/tmp/markerfile
已存在,则此清单将不应用exec资源:
notify { 'test': }
~>
file { '/tmp/markerfile':
ensure => present
}
~>
exec { '/bin/date':
refreshonly => true
}
所以在我的例子中,假设myu包
是nginx,myu文件
是nginx配置文件,myu服务
是nginx服务。如果出于某种原因,nginx配置文件已经存在,那么包的安装将永远不会触发服务的启动?我想这是有道理的,但是有这么多的链接示例,在服务的末尾有一个最后的~>
。@ScottSB在这种情况下,您仍然会启动服务(如果它还没有运行并且确保=>正在运行)。通知服务将重新启动已在运行的服务。因此,在您的示例中,它不会重新启动已经运行的服务。这有点拐弯抹角,因为如果包没有安装,那么服务可能无论如何都不会运行,并且将由服务资源启动。你是对的。我仍然觉得这会留下一些令人惊讶的边缘案例,但现在我知道了这些行为,不值得尝试去识别它们。我将确保直接从任何可能需要刷新服务(或exec)的资源发出通知。