【问题标题】:Chef: extending yum_package provider to check for version number in environment fileChef:扩展 yum_package 提供程序以检查环境文件中的版本号
【发布时间】:2015-05-01 21:39:49
【问题描述】:

我有 3 个厨师环境(dev、qa、prod),它们都共享一本食谱。环境文件包含 RPM 版本号:

{
  "name": "dev",
  ...
  "rpms": {
    "blah": "1.0",
    "blah2": "2.0"
  }
  ...
}

配方使用的:

rpms = node['rpms']
env = node['name']

yum_package "blah" do
    version "#{rpms['blah']}-#{env}"
end

yum_package "blah2" do
    version "#{rpms['blah2']}-common"
end

当我想添加新的 RPM 时出现问题。我想在 dev 中安装它以进行测试,因此我将适当的 yum_package 调用添加到配方并将版本号添加到 dev.json 环境文件中。但是,部署到 qa 和 prod 将失败,因为 qa 和 prod 环境文件中缺少 RPM 版本号。

有没有办法扩展yum_package 提供程序来检查环境文件中是否指定了版本号(如果没有指定版本则跳过)?或者这个问题有更优雅的解决方案吗?

【问题讨论】:

  • 我认为更优雅的是使用each 方法迭代键和值。 rpms.each { |k,v|版本“#{v}”}

标签: ruby chef-infra


【解决方案1】:

doptimusprime 的评论之后,以下应该可以工作(可以选择不指定确切版本并使用最新版本):

{
  "name": "dev",
  ...
  "rpms": {
    "blah": "1.0",
    "blah2": "2.0",
    "latestblah": nil
  }
  ...
}
node['rpms'].each do |p,v|
  yum_package p do
    version v if v
  end
end

version 是可选的,只有在指定版本时才会被调用)

【讨论】:

  • 基于这个想法,如果某些 rpm 具有版本发布值(如 1.0-dev 或 2.0-common),我将简单地更新环境文件以包含发布值,如 "blah": "1.0-dev",,对吗?
  • 您可以在此处放置底层提供者接受的任何版本号(在本例中为 yum)。
猜你喜欢
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多