首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Puppet -测试包是否已经定义?

Puppet -测试包是否已经定义?
EN

Stack Overflow用户
提问于 2013-03-07 16:26:43
回答 4查看 31.6K关注 0票数 19

我正在编写一些puppet模块,并在两个模块中定义了一个包,因此得到以下错误:

代码语言:javascript
复制
err: Could not retrieve catalog from remote server: Error 400 on SERVER: Duplicate definition: Package[gnome-session-fallback] is already defined in file /etc/puppet/modules/vnc4server/manifests/init.pp at line 3; cannot redefine at /etc/puppet/modules/vino/manifests/init.pp:7 on node l

因此,我希望确保尚未定义该包,但以下内容不起作用:

代码语言:javascript
复制
if ! defined ('gnome-session-fallback') {
    package { 'gnome-session-fallback':
        ensure => installed,
    }
}

有没有人可以建议如何解决这个问题,以及在更广泛的范围内,什么是避免模块中发生此类冲突的“适当”方法?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-03-10 07:13:40

在defined()中缺少Package[]。正确的做法是:

代码语言:javascript
复制
if ! defined(Package['gnome-session-fallback']) {
    package { 'gnome-session-fallback':
        ensure => installed,
    }
}
票数 46
EN

Stack Overflow用户

发布于 2014-06-10 03:34:37

最简单的方法是使用puppetlabs-stdlib中的ensure_resource函数

ensure_resource('package', 'gnome-session-fallback', {'ensure' => 'present'})

票数 13
EN

Stack Overflow用户

发布于 2013-03-07 21:58:47

为了回答我自己关于“适当”方法是什么的问题:这个问题在https://groups.google.com/forum/?fromgroups=#!topic/puppet-users/julAujaVsVk上讨论过,jcbollenger提供了一个看起来像是“最佳实践”的解决方案--多次定义的资源应该移动到它们自己的模块中,并包括到它们所依赖的类中。我应用了这个并解决了我的问题。

然而,这并不能真正回答为什么"if !defined“会失败...

票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15266347

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档