具有一个共同资源的不同 Puppet 模块

具有一个共同资源的不同 Puppet 模块

我正在为我的服务器的不同角色编写特定的模块。所以我有一个木偶和一个木偶仪表板-模块。木偶模块确保 puppet 正确安装。木偶仪表板当然,对于 puppet-dashboard 来说也是一样。

两个模块都需要 puppetlabs apt 源(顺便说一下,我正在使用https://github.com/puppetlabs/puppet-apt)因此,我在木偶木偶仪表板-模块:

    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 源的依赖关系是正确的。

一种解决方法是将一个源重命名为puppetlabspuppetlabs2诸如此类。但一定还有其他解决方案。

我对您的回答很好奇!

答案1

每当我遇到这个问题(尤其常见于软件包)时,我只是将资源单独放在一个类中:

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

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

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

答案2

有几种方法可以解决这个问题。我个人建议将您的 apt 源拆分为一个单独的类,然后使用包含或继承(视情况而定)将此类拉到您需要的任何地方。

相关内容