木偶重复声明错误

我正在运行一个Error: Duplicate declaration与我的木偶项目Error: Duplicate declaration 。 我想部署jboss实例,其中一部分是一些特殊的configuration文件。

只要我创build第二个实例,应该包含与第一个实例相同的特殊configuration文件,我得到提到的错误。

我创build一个像这样的实例:

 jbossas::instance { 'node01': ... propfiles => [ "kupo.properties", "web.properties" ], } 

在jboss :: instance是这样的代码:

 if ($propfiles != {}) { jbossas::makepropies { $propfiles: version => $version, instancedir => $instancedir, jboss_name => $name, } } 

最后makepropies代码:

 define jbossas::makepropies ( $file = $title, $version = 7, $instancedir = '', $jboss_name = "jboss", ){ file { "$instancedir_$jboss_name_$file" : ensure => file, path => $instancedir/configuration/$file, content => template("jbossas/jboss${version}/${file}.erb"), require => Jbossas::Profile[$jboss_name], } } 

只要我创build第二个节点,并希望应用清单,我得到的错误是:

 Error: Duplicate declaration: Jbossas::Makepropies[kupo.properties] is already declared in file /etc/puppet/modules/jbossas/manifests/instance.pp:111; cannot redeclare at /etc/puppet/modules/jbossas/manifests/instance.pp:111 on node jb7-dev.localdomain 

我刚刚从这个星期开始玩木偶,所以我的观点就是0.我search了很多东西,发现了虚拟/实现的东西,但找不到解决我的问题的东西。

提前致谢!

这是因为你正在定义两个jbossas:makepropies具有相同名称的jbossas:makepropies资源,而不pipe顶级jbossas::instance资源的名称,所以'node01'和'node02'都试图创buildjbossas:makepropies “kupo.properties”的标题。

这是由木偶在清单内缺乏完整的循环能力造成的。 如果你将一个variables声明为一个数组,那么就没有办法(我知道)在你的清单中遍历该数组。

您可以通过区分资源名称来解决这个问题:

 jbossas::instance { 'node01': ... propfiles => [ "${name)_kupo.properties", "${name}_web.properties" ], } 

然后用jbossass:makepropies

 define jbossas:makepropies ( $version = 7, $instancedir = '', $jboss_name = "jboss", ) { $title_array = split($title,'_') $file_name = $title_array[1] file { "${instancedir}_${jboss_name}_${file_name}" : ensure => file, path => "${instancedir}/configuration/${file_name}", content => template("jbossas/jboss${version}/${file}.erb"), require => Jbossas::Profile[$jboss_name], } } 

这绝不是最有说服力的解决scheme,但是在Puppet中没有完整的循环支持,这是我所知道的最好的 – 最程序化的解决scheme是在jbossas::instance (我使用下面的伪代码)中写这样的东西:

 foreach ($propfiles as $propfile) { jbossas::makepropies { $propfile: version => $version, instancedir => $instancedir, jboss_name => $name, } } 

有关更多详细信息,请参阅此StackOverflow问题 。