如何使用 Puppet 正确安装存储库

How to properly install a repository with Puppet

我正在努力使用 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.

然后我做了一个 yum clean all 并再次尝试,现在我得到这个错误:

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:

它建议我禁用回购,所以我不确定我犯了什么错误,但出于某种原因,根据我的配置方式,回购似乎无效 it.Does 谁知道如何我可以让 zabbix 存储库在 Puppet 中工作,这样我就可以安装 zabbix 代理了吗?

您必须始终牢记,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 调整 repo 配置并更新 repository-release 包。

  • 将存储库发布包的副本放入您自己的本地包存储库(您有一个,不是吗?)。根据需要配置该 repo,允许 Puppet 从那里安装 repo-release 包。

无论哪种方式,如果您通过 Puppet 管理发布包和回购详细信息,那么该部分看起来像这样:

class importRepos {
  package { 'zabbix-release' ensure => 'latest' }

  yumrepo { "zabbix":
    # Most repo properties probably should not be managed
    enabled  => 1,
  }
}

完成之后,您可能还需要注意 class 和资源排序。这是一个太大的话题,无法在一个 SO 答案中涵盖,但对于您的特定情况,鉴于您直接在节点块中而不是通过 class 声明包,我的建议是声明适当的依赖关系相关包的属性:

node 'puppet-agent' {
  include importRepos

  package { 'php':
    ensure => "installed",
  }

  package { 'zabbix-agent':
    ensure  => "installed",
    require => Yumrepo['zabbix'],  # <--- this
  }
}