木偶 – 更新软件包回购安装

我试图让木偶0.25.5-1.el5 )更新一个已安装的软件包,当一个新的yum回购安装。

我们所拥有的基本映像默认安装了1.1版本的软件包X. 在可用的回购版本1.1中。 是最近的。 我正在安装一个新的回购,其中包含版本1.8的X版本。 我想同时安装新的repo和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会认识到必须安装一个新的回购站,但是由于该包已经在当前的回购库中,因此假定package_x已经是最新的版本 。 如果我再次运行它,则可以认识到这个新的回购意味着package_x必须更新到版本1.8。

我已经玩了通知订阅参数,但他们似乎不适用于一个类。 似乎Puppet正在评估所需的更新与当前的设置,因此必须在能够“知道”package_x的新版本可用之前应用新的repo。

我错过了这种依赖性问题的简单解决scheme吗? 有没有人发现一个设置,将允许这种types的依赖强制更新的包?

谢谢。

据我所知,这正是阶段性的 – 他们让你分组和sorting类执行。 我使用“阶段”来更新和configurationDebian服务器上的APT,这应该与您将要使用YUM进行的操作非常相似。

首先,你在顶层(高于“节点”)宣布“yum”阶段,这样“yum”阶段中的类将在“主”阶段之前执行:

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

然后,你把舞台分配给class级。 你可以在你的节点定义中做到这一点:

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

你描述的行为不是我自己的经验。 手工运行木偶,用--debug

 puppetd --debug --test 

在这种模式下,它会显示它执行的每个命令。 它应该显示它正在使用的命令来validation软件包是否在最新版本,所以你可以检查命令是什么,什么时候执行。

我几乎没有使用Yum处理服务器的经验,但是使用apt-get(Debian),需要在更新源列表(相当于yum repos)后运行命令刷新软件包列表。 因此,在我的configuration中,对源列表的更新通知包列表刷新的exec,并且新包取决于所述(refreshonly)exec。