Puppet 为数组中的每个项实例化一个类
Puppet版本:3.2.4(Puppet Enterprise 3.0.1) 为了更好地支持配置文件中的nagiosPuppet 为数组中的每个项实例化一个类,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
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'
}
这为我解决了这个问题