Puppet-在 repo 安装中更新软件包

Puppet-在 repo 安装中更新软件包

我正在尝试使用傀儡(0.25.5-1.el5) 在安装新的 yum repo 时更新已安装的软件包。

我们的基本映像默认安装了版本 1.1 的软件包 X。在可用的存储库中,版本 1.1 是最新版本。我正在安装一个新存储库,其中有版本 1.8 的软件包 X。我希望新存储库的安装和软件包 X 的更新同时进行。我的代码如下:

class repo {
  yumrepo { "foorepo":
    descr    => 'the foo repo',
    baseurl  => 'http://path.to.foo/repos/centos/5/',
    enabled  => 1,
    gpgcheck => 0,
  }
}

class package_x {
  package { "package_x":
    provider => "yum",
    ensure   => "latest",
    require  => Yumrepo["foorepo"]
  }
}

其中节点定义为:

node default {
  include repo
  include package_x
}

我看到的情况是,当我运行它时第一的此时,puppet 认识到必须安装一个新的 repo,但是由于该包已经在当前 repo 中可用,因此假定 package_x 已经在最新版本如果我运行它第二时间,它就能识别出这个新的 repo 意味着 package_x 必须更新到 1.8 版本。

我已经玩过了通知订阅参数,但它们似乎不适用于类。似乎 Puppet 正在根据当前设置评估所需的更新,因此必须应用新的 repo,然后它才能“知道”有新版本的 package_x 可用。

我是否缺少解决此类依赖问题的简单方法?是否有人找到允许此类依赖强制更新软件包的设置?

谢谢。

答案1

据我所知,这正是阶段用途——它们允许您对类执行进行分组和排序。我使用“阶段”在 Debian 服务器上更新和配置 APT,这应该与您使用 YUM 执行的操作非常相似。

首先,在顶层(“节点”之上)声明“yum”阶段,以便“yum”阶段中的类将在“主要”阶段之前执行:

stage { 'yum' : before => Stage['main'] }

然后,将阶段分配给类。您可以在节点定义中执行此操作:

node default {
  class { 'repo' : stage => yum }
  include package_x
}

答案2

您所描述的行为并非我的亲身经历。手动运行 puppet,使用--debug

puppetd --debug --test

在此模式下,它将显示其执行的每个命令。它应该显示用于验证包是否为最新版本的命令,以便您可以检查命令是什么以及何时执行。

我没有使用 Yum 处理服务器的经验,但使用 apt-get (Debian) 时,需要运行命令来刷新更新源列表后软件包列表(相当于 yum repos)。因此,在我的配置中,对源列表的更新会通知 exec 软件包列表刷新,而新软件包则依赖于上述(仅刷新)exec。

相关内容