Puppet 为数组中的每个项实例化一个类

Puppet 为数组中的每个项实例化一个类,puppet,nagios,Puppet,Nagios,Puppet版本:3.2.4(Puppet Enterprise 3.0.1) 为了更好地支持配置文件中的nagioscfg_dir和cfg_file指令,我为每个选项创建了以下类: # Class to add a cfg_dir to the nagios configuration file class nagios::server::cfg_dir ( $config_dir, $nagios_user, $nagios_group, $nagios_config_fil

Puppet版本:3.2.4(Puppet Enterprise 3.0.1)

为了更好地支持配置文件中的nagios
cfg_dir
cfg_file
指令,我为每个选项创建了以下类:

# Class to add a cfg_dir to the nagios configuration file
class nagios::server::cfg_dir (
  $config_dir,
  $nagios_user,
  $nagios_group,
  $nagios_config_file = '/etc/nagios3/nagios.cfg',
)
{
  # Build the config dir
  file {$config_dir:
    ensure => directory,
    owner => $nagios_user,
    group => $nagios_group,
    mode => '0750',
  }

  # Append cfg_dir=$config_dir path to nagios.cfg file
  augeas { "cfg_dir=$config_dir in $nagios_config_file":
    incl => "$nagios_config_file",
    lens => 'NagiosCfg.lns',
    changes => "set cfg_dir/[last()+1] ${config_dir}",
    require => File[$nagios_config_file],
  }
}
试图在
nagios::server
中使用此结构,我有以下几点:

# Set up config directories
each($cfg_dir) |$x| {
  class { 'nagios::server::cfg_dir':
    config_dir => $x,
    nagios_user => $nagios_user,
    nagios_group => $nagios_group,
    nagios_config_file => $nagios_config_file,
  }
}
理论上,它应该为传递到
nagios::server
类的每个路径执行类实例化,如下所示:

class{'::nagios::server': cfg_dir => ['/etc/nagios.d','/etc/nagios/objects'] }
然而,我遇到了这个问题:

Error: Could not match |$x| at /tmp/vagrant-puppet-1/modules-2/nagios/manifests/server.pp:181 on node localhost.localdomain

是否有人可以提供使用中的每个的工作示例?我是否对这个内置的puppet函数期望过高?

除了上面的一些代码语法问题之外,我发现这个构造只在
未来的
解析器中进行评估:

puppet apply--parser=future--modulepath


仍在克服其他依赖性问题。我将使用什么模式来支持当前解析器而不是将来的解析器?自定义函数?

我的后续问题的答案是使用定义的类型:

只需将上述代码从
更改为
定义
,并将
$config\u dir
中的值分配给
$target

define nagios::server::cfg_dir (
  $config_dir = $target,
  $nagios_user,
  $nagios_group,
  $nagios_config_file = '/etc/nagios3/nagios.cfg',
){...
可以使用以下构造:

nagios::server::cfg_dir { '/etc/nagios.d/', '/etc/nagios/objects':
    nagios_user => 'nagios',
    nagios_group => 'nagios'
}
这为我解决了这个问题