Puppet 重新启动另一个类的服务,同时依赖于另一个类,会创建一个依赖循环
在puppet中,我有以下两个类:Puppet 重新启动另一个类的服务,同时依赖于另一个类,会创建一个依赖循环,puppet,Puppet,在puppet中,我有以下两个类: class zabbix-agent { package { 'zabbix-agent': } -> service { 'zabbix-agent': ensure => running } } class zabbix-agent-cassandra { include zabbix-agent Class['zabbix-agent'] -> file
class zabbix-agent {
package { 'zabbix-agent': }
->
service { 'zabbix-agent':
ensure => running
}
}
class zabbix-agent-cassandra {
include zabbix-agent
Class['zabbix-agent']
->
file { '/etc/zabbix/zabbix_agent.conf.d/cassandra.conf':
}
~>
Service['zabbix-agent']
}
这在一开始看起来很不错,因为它允许从任何类向/etc/zabbix/zabbix_agent.conf.d/添加新的配置文件,并在执行此操作时重新启动zabbix代理
但是,存在一个依赖循环:
Service[zabbix-agent] => Class[Zabbix-agent] => File[/etc/zabbix/zabbix_agentd.conf.d/cassandra.conf] => Service[zabbix-agent]
有没有办法避免依赖循环?你是在告诉Puppet 管理zabbix包和服务 在管理配置文件之前执行此操作 如果配置文件已更改,请重新管理该服务 这是有问题的,因为Puppet只会接触每个资源一次 最好的方法可能是为您的zabbix模块带来更多的结构
class zabbix::agent {
include zabbix::package
include zabbix::service
Class['zabbix::package'] -> Class['zabbix::service']
}
这允许您
Class['zabbix::package'] -> File[...] ~> Class['zabbix::service']
这是一种更简单的方法,在您的特定情况下,它避免了循环依赖关系。该文件将在zabbix代理程序包创建的文件夹中创建,因此我必须确保在管理该文件之前已安装该文件。然后我需要重新启动服务。当然,您可能应该保留类['zabbix::package']->文件[…]。应该仍然没有循环。将此编辑到答案中。