我正在努力用Puppet安装存储库,特别是zabbix存储库。我从here获得了CentOS 7的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:
它建议我禁用该存储库,所以我不确定我犯了什么错误,但是由于某种原因,基于我的配置,该存储库似乎无效,有人知道我如何获得该存储库吗? zabbix repo可以在Puppet中工作,以便我可以安装zabbix代理?
答案 0 :(得分:3)
您必须始终牢记,Puppet的DSL专注于要管理的机器状态详细信息,而不是更改机器状态的详细信息。这样可以避免误解the docs for the Yumrepo resource type。
具体来说,该类型的baseurl
属性直接对应于同名的每个存储库Yum配置参数。该参数指定存储库的基本URL (在您的情况下,可能是http://repo.zabbix.com/zabbix/3.4/rhel/7/x86_64/
),而不是要安装以获取回购定义的软件包的名称。
如果愿意,您可以完全不使用该软件包,而是通过Yumrepo
资源严格配置存储库。但是,如果要至少部分地通过软件包来管理它,则会遇到鸡与蛋的问题:在哪里可以得到该软件包,以便为包含该软件包的存储库创建存储库定义?主要有两种选择:
通过手动安装软件包,在Puppet范围之外,在供应过程中执行存储库的初始配置。之后,您既可以调整存储库配置,也可以通过Puppet更新存储库发行包。
将存储库发行包的副本放入您自己的本地包存储库中(您确实有一个,不是吗?)。根据需要配置该存储库,从而允许Puppet从那里安装存储库发布版本的软件包。
无论哪种方式,如果您都通过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
}
}