傀儡:定义的大写

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

为了确保傀儡不试图做两件事:

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

但是我仍然得到puppetd的错误 – testing

 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 

我有一种感觉,它不喜欢大写和`::'检查时是否定义。 有没有办法逃避这个?

问题不是大写,而是在/etc/puppet/modules/dbserver/manifests/postgresql8-3.pp中重复定义资源。 这里有一个简单的体现:

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

如果您更改!定义为定义,您将看到重复资源错误类似于您的错误。 我会张贴你的完整清单,而不是一个片段。

如果这是两个模块需要实现相同资源的问题,请尝试使用虚拟资源(@type)。