具有一种公共资源的不同人偶模块

MMo*_*ore 7 puppet apt

我正在为我的服务器的不同角色编写特定的模块。所以我有一个木偶和一个木偶仪表板-模块。该木偶模块确保木偶是正确的安装。当然,傀儡仪表板傀儡仪表板也做同样的事情。

两个模块都需要 puppetlabs apt 源(顺便说一句。我正在使用https://github.com/puppetlabs/puppet-apt)。所以我在puppetpuppet-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",
    }
Run Code Online (Sandbox Code Playgroud)

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

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
Run Code Online (Sandbox Code Playgroud)

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

一种解决方法是将一个源从puppetlabstopuppetlabs2或 sth重命名。像那样。但必须有另一种解决方案。

我很好奇你的回答!

Dan*_*ral 4

每当我遇到这个问题(特别是对于包而言)时,我只是将资源单独放入一个类中:

class git {
    package { 'git': ensure => installed, }
}
Run Code Online (Sandbox Code Playgroud)

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

下一个问题:但是它们被不同的模块使用!是的,要么将它们放入common,要么放入其他特定于模块的通用模块(例如,puppet-common)。