在做任何事情之前给木偶添加一个yum回购

有没有办法迫使傀儡先做某些事情? 例如,我需要它在所有服务器上安装一个RPM,以在我安装任何软件包之前添加一个yum仓库(IUS社区)。

如果你想确保一个仓库安装在你的所有服务器上,那么我会build议这样的事情

node default { include base } class base { yumrepo { "IUS": baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture", descr => "IUS Community repository", enabled => 1, gpgcheck => 0 } } 

那么,对于扩展base任何节点,你可以说

 class foo { package { "bar": ensure => installed, require => Yumrepo["IUS"] } } 

这将确保

  • 除非定义了IUS储存库,否则不会安装软件包bar
  • 在定义IUS存储库之前,软件包不会尝试安装

虽然阶段可以处理这个,所以可以具体的百胜回购依赖关系,更好的是声明关系一般。

只要把Yumrepo <| |> -> Package <| provider != 'rpm' |> Yumrepo <| |> -> Package <| provider != 'rpm' |> Yumrepo <| |> -> Package <| provider != 'rpm' |>在您的傀儡清单。

 node default { Yumrepo <| |> -> Package <| provider != 'rpm' |> } 

这使得所有yumrepotypes在没有“rpm”的软件包作为其提供者之前将被处理。 后面的排除是我可以使用(例如)epel-release RPM软件包来帮助安装yum repo。

(我发现这个问题后,我回答几乎相同 ..所以认为我的答案适用于此,这是值得重复它(在两个地方有一个答案是更安全的..)

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

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

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

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

 node default { class { 'yumrepos' : stage => yum } include packages } 

你可以使用标签 。 这将允许你用firstrun或东西来标记repo安装程序,

然后运行

  puppetd --tags firstrun 

它只会执行与标签匹配的模块/语句。

您需要使用的关键是require关键字 – “评估一个或多个类,将所需的类添加为依赖项”。

使用apt存储库的例子可能是:

 class installcustompackages { # make sure we have the repository file and public key file { "/etc/apt/sources.list.d/myrepo.list": source => "puppet://puppet/files/etc/apt/sources.list.d/myrepo.list", ensure => present; "/etc/apt/trusted.gpg": source => "puppet://puppet/files/etc/apt/trusted.gpg", } # do an update whenever the list or trusted key file change exec { "/usr/bin/apt-get update": alias => "aptgetupdate", require => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ], subscribe => [ File["/etc/apt/sources.list.d/myrepo.list"], File["/etc/apt/trusted.gpg"] ], refreshonly => true; } package { "mypackage": ensure => latest, require => Exec["aptgetupdate"]; "mypackage2": ensure => latest, require => Exec["aptgetupdate"]; } service { "myservice": enable => false, require => Package[mypackage]; } } 

(从这个木偶bootstrapping的例子 )。

所以你可以看到每个阶段如何要求先完成前一个阶段。 我会离开你去研究如何把这个应用到百胜,因为我不熟悉它存储文件的位置。

木偶从上到下读取configuration,所以如果你在该类中首先包含一个带有yum回购的类,那么这个回购将会在别的之前被添加。

如果您在软件包上使用require设置,则在添加软件包之前将确保所需的资源types存在,如下所示:

 node 'yournode.domain.com' { package { "bar": ensure => installed, require => Yumrepo["IUS"] } yumrepo { "IUS": baseurl => "http://dl.iuscommunity.org/pub/ius/stable/$operatingsystem/$operatingsystemrelease/$architecture", descr => "IUS Community repository", enabled => 1, gpgcheck => 0 } } 

上面的代码将在添加包之前添加回购。

像这样的东西对我有用:

 yumrepo { A: descr => "A repo", baseurl => '', enabled => 1, gpgcheck => 1, gpgkey => "", priority => 3 } yumrepo { B: descr => "B repo", baseurl => '', enabled => 1, gpgcheck => 1, gpgkey => "", priority => 3 } yumrepo { C: descr => "C repo", baseurl => '', enabled => 1, gpgcheck => 1, gpgkey => "", priority => 3; } Package { require => [Yumrepo[A], Yumrepo[B], Yumrepo[C]] } 

我在mysite.pp中包含了这样的内容。 这样,你的傀儡模块,免费参考百胜回购。