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

在puppet中,我有以下两个类:

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']->文件[…]。应该仍然没有循环。将此编辑到答案中。