重新启动其他类的服务,同时取决于其他类,创建依赖循环

时间:2015-03-25 12:05:28

标签: 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-agent。

但是存在依赖循环:

Service[zabbix-agent] => Class[Zabbix-agent] => File[/etc/zabbix/zabbix_agentd.conf.d/cassandra.conf] => Service[zabbix-agent]

有没有办法避免依赖循环?

1 个答案:

答案 0 :(得分:0)

你告诉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']

这是DRYer,在您的特定情况下,避免循环依赖。