木偶:组织模块依赖关系(如果包存在,则复制文件)

  • 我有一些服务器(www等)
  • 我有一个监控系统
  • 如果一台机器必须被apache监控,则需要安装一些文件。

所以我有一个apache模块(安装Apache),我正在写一个monitoring模块。 只有安装了apache软件包(或者apache模块被定义,或类似的东西),这个monitoring模块才会复制所需的文件。 和mysql包一样

上述devise是一个好主意吗? 什么是这种依赖的最佳途径?

在extdata中,创build一个variables来定义是否需要监视服务器。 以下是默认情况下启用监视并为特定服务器禁用监视的示例。

扩展数据/ common.csv

 use_monitoring,true 

扩展数据/ ephemeral.example.com.csv

 use_monitoring,false 

在每个服务的类中,查找是否启用了监视。 如果是,请包括负责监视该服务的类。 这可能看起来像

 class apache { # Manage your apache setup here if extlookup("use_monitoring") == 'true' { include monitoring::apache } } class monitoring::apache { # Manage your apache monitoring setup here } 

更新:当我第一次看到你的问题时,我以为你正在寻求一种方法来启用一些但不是所有的Apache服务器的监控。 如果你想监视所有这些,你甚至不需要打扰extlookup。 只需将您的监控类别分解成特定于服务的类别,然后将其包含在服务的类别中。

在你的apache类中,你可以定义一个variables,在testing中使用,看你是否应该提供你的监控文件。

 class apache { $apacheconfigured = true; } class monitor { if $apache::apacheconfigured { file {'blah': ... } } } 

您需要虚拟资源自定义事实 。 如果一个主机的configuration会改变另一个主机的configuration,那么您需要导出资源 。 实际上,我拥有所有这些东西。 这是一个抽样。

虚拟资源

在监视类上:

 @file { '/path/to/apache/monitoring/conf': ensure => file, source => 'puppet:///modules/monitoring/apache.conf', tag => 'apache-extras', } 

在Apache类上:

 File <| tag == 'apache-extras' |> Exec <| tag == 'apache-extras' |> etc... 

自定义事实

宣布这样一个事实,并把它放在适当的地方(见上面的链接):

 # apache2.rb Facter.add("apache2") do setcode do %x{/usr/bin/test -x /etc/init.d/apache2 && /bin/echo yes || /bin/echo no}.chomp end end 

在Monitoring类上,使用:

 if $apache2 == 'yes' { # include configuration for apache } 

导出的资源

在Apache服务器中包含的Apache类中:

 @@exec { "config-web $fqdn": tag => "monitoring-server", } 

在Monitoring服务器中包含的Monitoring类中:

 <<| tag == 'monitoring-server' |>> 

为什么不require => Package['apache']在监视模块的资源上require => Package['apache'] ? 如果有apachemonitoring类添加到节点,依赖于apache的文件将被安装,如果它安装成功。 如果没有(例如,软件包安装失败,或者apache模块没有被添加到节点,监控类将会失败)。

或者如果你不想让它失败,你可以使用如下的东西:

 if defined(Package['apacge']) { file {...} <and so on> }