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