有没有办法强制人偶先做某些事情?例如,在安装任何软件包之前,我需要它在所有服务器上安装 RPM 以添加 yum 存储库(IUS 社区)。
Dav*_*ney 37
如果您想确保在所有服务器上都安装了存储库,那么我建议您这样做
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
}
}
Run Code Online (Sandbox Code Playgroud)
然后,对于任何扩展的节点,base
您可以说
class foo {
package { "bar": ensure => installed, require => Yumrepo["IUS"] }
}
Run Code Online (Sandbox Code Playgroud)
这将确保
bar
除非定义了 IUS 存储库,否则不会安装该软件包小智 18
尽管 stage 可以处理这个问题,也可以处理特定的 yum repo 依赖项,但最好是通用地声明这种关系。
只需放入 Yumrepo <| |> -> Package <| provider != 'rpm' |>
您的木偶清单。
node default {
Yumrepo <| |> -> Package <| provider != 'rpm' |>
}
Run Code Online (Sandbox Code Playgroud)
这使得所有 yumrepo 类型将在任何没有“rpm”作为其提供者的包之前得到处理。后一种排除是为了我可以使用(例如)epel-release RPM 包来帮助安装 yum 存储库。
(我在回答几乎相同的问题后发现了这个问题..所以我认为我的回答也适用于这里,值得重复一遍(在两个地方回答更安全..)
据我了解,这正是阶段的用途——它们让您可以对类执行进行分组和排序。我使用“stages”在 Debian 服务器上更新和配置 APT,这应该与您将使用 YUM 进行的操作非常相似。
首先,您在顶层(“节点”上方)声明“yum”阶段,以便“yum”阶段中的类将在“主要”阶段之前执行:
stage { 'yum' : before => Stage['main'] }
Run Code Online (Sandbox Code Playgroud)
然后,您将阶段分配给类。您可以在节点定义中正确执行此操作:
node default {
class { 'yumrepos' : stage => yum }
include packages
}
Run Code Online (Sandbox Code Playgroud)
你可以使用标签。这将允许您使用firstrun
或其他东西标记 repo 安装程序,
然后运行
puppetd --tags firstrun
Run Code Online (Sandbox Code Playgroud)
它只会执行与标签匹配的模块/语句。
归档时间: |
|
查看次数: |
45043 次 |
最近记录: |