gpt4 book ai didi

puppet - 在不同的类中定义的相同资源的重复声明

转载 作者:行者123 更新时间:2023-12-04 02:55:35 25 4
gpt4 key购买 nike

我有一个需要 build-essential 的类定义包裹:

class erlang($version = '17.3') {

package { "build-essential":
ensure => installed
}
...
}

不同模块中的另一个类也需要 build-essential包裹:
class icu {

package { "build-essential":
ensure => installed
}
...
}

但是,当我尝试执行 puppet apply 时,我收到的错误是:
Error: Duplicate declaration: Package[build-essential] is already declared in file /vagrant/modules/erlang/manifests/init.pp:18; cannot redeclare at /vagrant/modules/libicu/manifests/init.pp:17 on node vagrant-ubuntu-trusty-64.home

我期待类封装他们使用的资源,但似乎不是这样?我该如何解决这种冲突?

最佳答案

这是处理多个模块时的常见问题。

有很多方法可以做到这一点,最佳实践是模块化并允许安装 build essential 作为参数:

class icu ($manage_buildessential = false){

if ($manage_buildessential == true) {
package { "build-essential":
ensure => installed
}
}
}

然后,您想在哪里包括您的 ICU 类(class):
class {'icu':
manage_buildessential => 'false',
}

但是,为了快速而肮脏的修复:
if ! defined(Package['build-essential']) {
package { 'build-essential': ensure => installed }
}

或者,如果您有 puppetlabs-stdlib 模块:
ensure_packages('build-essential')

关于puppet - 在不同的类中定义的相同资源的重复声明,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26205727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com