不同的傀儡模块与一个共同的资源

我正在为我的服务器的不同angular色编写特定的模块。 所以我有一个木偶和一个木偶仪表板模块傀儡模块确保木偶安装正确。 傀儡仪表板傀儡仪表板上也是如此。

这两个模块需要puppetlabs apt源(btw。我使用https://github.com/puppetlabs/puppet-apt )。 所以我在puppet- pupil -dashboard -module中有以下定义的资源:

apt::source { "puppetlabs": location => "http://apt.puppetlabs.com", release => "squeeze", repos => "main", required_packages => true, include_src => false, key => "4BD6EC30", key_server => "pgp.mit.edu", } 

现在我的代理程序出现以下错误:

 err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate declaration: Apt::Source[puppetlabs] is already declared in file /etc/puppet/modules/puppet/manifests/base.pp at line 27; cannot redeclare at /etc/puppet/modules/puppet-dashboard/manifests/init.pp:42 on node server123 

特定的模块是彼此独立的。 因此,我认为在每个模块中分别设置这个apt源的依赖是正确的。

解决方法是将一个来源从puppetlabs重新命名为puppetlabs2或者sth。 像那样。 但是必须有另一个解决scheme。

我很好奇你的回应!

每当我遇到这个问题时(特别是软件包的常见问题),我只是把资源放在一个类中,

 class git { package { 'git': ensure => installed, } } 

然后我包括类而不是定义资源。

下一个问题:但它们被不同的模块使用! 是的,要么把它们放在一起,要么放在其他模块特定的通用模块中(比如说puppet-common )。

有几种方法可以解决这个问题。 我个人将你的apt源分成一个单独的类,然后使用包含或inheritance(取决于具体情况)将这个类拉到你需要的地方。