我很难用Puppet安装一个存储库,特别是zabbix存储库。我从这里获得了适用于centos7的zabbix存储库,并且正在使用以下内容:
http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm
我尝试使用以下Puppet代码在我的节点上安装它,但它似乎不起作用:
node 'puppet-agent' {
include importRepos
package { 'php':
ensure => "installed",
}
package { 'zabbix-agent':
ensure => "installed",
}
}
class importRepos {
yumrepo { "zabbix":
baseurl => "http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/zabbix-release-3.4-2.el7.noarch.rpm",
descr => "Zabbix repo to install Zabbix client on CentOS 7",
enabled => 1,
gpgcheck => 1
}
}
我得到的错误是:
...
Execution of '/usr/bin/yum -d 0 -e 0 -y install zabbix-agent' returned 1: Delta RPMs disabled because /usr/bin/applydeltarpm not installed.
Error downloading packages:
zabbix-agent-3.4.15-1.el7.x86_64: [Errno 256] No more mirrors to try.
我试着安装deltarpm软件包,现在我得到了这个错误:
...
Error downloading packages:
zabbix-agent-3.4.15-1.el7.x86_64: [Errno 256] No more mirrors to try.
Error: /Stage[main]/Main/Node[puppet-agent]/Package[zabbix-agent]/ensure: change from purged to present failed: Execution of '/usr/bin/yum -d 0 -e 0 -y install zabbix-agent' returned 1: No Presto metadata available for zabbix
Error downloading packages:
zabbix-agent-3.4.15-1.el7.x86_64: [Errno 256] No more mirrors to try.
然后我做了一次彻底的清理,然后再试了一次,现在我得到了这个错误:
Error: Execution of '/usr/bin/yum -d 0 -e 0 -y install zabbix-agent' returned 1: One of the configured repositories failed (Zabbix repo to install Zabbix client on CentOS 7),
and yum doesn't have enough cached data to continue. At this point the only
safe thing yum can do is fail. There are a few ways to work "fix" this:
它建议我禁用repo,所以我不确定我犯了什么错误,但出于某种原因,根据我的配置方式,repo似乎无效。有人知道我如何让zabbix repo在Puppet中工作,以便安装zabbix代理吗?
您必须始终记住,Puppet的DSL专注于要管理的机器状态详细信息,而不是更改机器状态的详细信息。这将帮助您避免误解Yumrepo资源类型的文档。
具体而言,该类型的baseurl
属性直接对应于同名的每个存储库Yum配置参数。该参数指定存储库的基本URL(在您的情况下可能是http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/
),而不是要安装以获取repo定义的包的名称。
如果您愿意,可以完全不使用包,而是通过Yumrepo
资源严格配置存储库。然而,如果你想至少部分通过包来管理它,那么你就有一只鸡&鸡蛋问题:你从哪里得到包裹,以便为包含包裹的回购创建回购定义?有两种主要的替代方案:
-
在Puppet的范围之外,通过手动安装包来执行存储库的初始配置,作为配置过程的一部分。此后,您可以通过Puppet调整回购配置并更新存储库发布包。
-
将存储库发布包的副本放入您自己的本地包回购中(您确实有一个,不是吗?)。根据需要配置该repo,允许Puppet从那里安装repo发布包。
无论哪种方式,如果您通过Puppet管理发布包和回购细节,那么该部分看起来像这样:
class importRepos {
package { 'zabbix-release' ensure => 'latest' }
yumrepo { "zabbix":
# Most repo properties probably should not be managed
enabled => 1,
}
}
这样做之后,您可能还需要稍微注意类和资源排序。这是一个太大的主题,无法在一个SO答案中涵盖,但对于您的特定情况,考虑到您直接在节点块中而不是通过类声明包,我的建议是声明相关包的属性之间的适当依赖关系:
node 'puppet-agent' {
include importRepos
package { 'php':
ensure => "installed",
}
package { 'zabbix-agent':
ensure => "installed",
require => Yumrepo['zabbix'], # <--- this
}
}