Puppet 解决冲突的包资源声明

Puppet 解决冲突的包资源声明,puppet,Puppet,我们正在尝试使用该模块,但在vanilla CentOS存储库和存储库之间遇到了打包命名冲突。CentOS中的nsca守护进程提供与RepoForge中的nagios nsca包相同的服务。为了尝试安装RepoForge软件包,同时满足nsca资源的package要求,我在节点定义中添加了以下内容: include ::nagios package { 'nagios-nsca': ensure => installed, alias => 'nsca', }

我们正在尝试使用该模块,但在vanilla CentOS存储库和存储库之间遇到了打包命名冲突。CentOS中的
nsca
守护进程提供与RepoForge中的
nagios nsca
包相同的服务。为了尝试安装RepoForge软件包,同时满足
nsca
资源的
package
要求,我在节点定义中添加了以下内容:

    include ::nagios
    package { 'nagios-nsca': ensure => installed, alias => 'nsca', }
    include ::nagios::nsca::server
由此产生的错误是:

    Error: Duplicate declaration: Package[nsca] is already declared in
    file /tmp/vagrant-puppet-1/modules-0/role/manifests/nagios.pp:45;
    cannot redeclare at
    /tmp/vagrant-puppet-1/modules-2/nagios/manifests/nsca/server.pp:24
下一个测试是使用order并直接从节点调用

    include ::nagios
    package { 'nagios-nsca': ensure => installed, alias => 'nsca', } -> 
    class {'::nagios::nsca::server' : }
nagios/manifests/nsca/server.pp
文件中有问题的代码是:

    class nagios::nsca::server(
      $decryption_method = pick($nagios_nsca_decryption_method, '0'),
    ) {

      include ::nagios::params

      # variables used in ERB template
      $basename = $nagios::params::basename

      if !defined (Package['nsca']) {
        package {'nsca':
          ensure => installed;
        }
      }
对这里发生的事情有什么见解吗?我总是可以用
camptocamp/puppet-nagios
代码强制我们想要的行为,但我宁愿不这样做。

因为
!已定义(包['title'])
未按预期工作。我通过给
nagios::nsca::server
一个
nsca_-package
的附加参数,包括一个默认值
nsca
,以保留当前行为,解决了这个问题:

    --- a/manifests/nsca/server.pp
    +++ b/manifests/nsca/server.pp
    @@ -11,6 +11,7 @@
     #
     class nagios::nsca::server(
       $decryption_method = pick($nagios_nsca_decryption_method, '0'),
    +  $nsca_package = 'nsca'
     ) {

       include ::nagios::params
    @@ -20,6 +21,7 @@ class nagios::nsca::server(

       if !defined (Package['nsca']) {
         package {'nsca':
    +      name => $nsca_package,
           ensure => installed;
         }
       }
此新参数的用途是:

    node 'my-nagios-server.local' {
      include ::nagios
      class {'::nagios::nsca::server': nsca_package => 'nagios-nsca', }
    }

您将
别名=>'nsca'
添加到节点中的
包{“nagios nsca”}
?为什么是别名?我想这就是让你绊倒的原因。我想通过安装“nagios nsca”来满足对“nsca”包的依赖。从RepoForge提取包“nsca”时不存在。啊,对了。这种构造是邪恶的。我们即将完全弃用defined()函数,请参阅使用参数的良好想法!