puppet:定义大写

puppet:定义大写

我的 puppet 清单中有一个名为 postgresql::user 的定义

我已输入以下内容,以确保 Puppet 不会尝试做某事两次:

if !defined (Postgresql::User["dbuser"]) { 
        postgresql::user { "dbuser": 
            ensure => present
        } 
    }

但是我仍然在 puppetd ​​--test 中收到错误

err: Could not retrieve catalog: Duplicate definition: Postgresql::User[dbuser] is already defined in file /etc/puppet/modules/dbserver/manifests/postgresql8-3.pp at line 22; cannot redefine at /etc/puppet/modules/dbserver/manifests/postgresql8-3.pp:7 on node mynode

我感觉它在检查是否已定义时不喜欢大写字母和“::”。有办法避免这种情况吗?

答案1

问题不在于大小写,而在于 /etc/puppet/modules/dbserver/manifests/postgresql8-3.pp 中资源的定义重复。这里有一个简单的清单来演示这一点:

define foo::bar {
  notify { $name: }
}

foo::bar { "hello": }

if !defined (Foo::Bar['hello']) {
  foo::bar { "hello": }
}

如果将 !defined 更改为 defined,您将看到与您的错误类似的重复资源错误。我会发布您的完整清单,而不是片段。

如果两个模块需要实现相同的资源,也可以尝试虚拟资源(@type)。

相关内容