Chef:扩展 yum_package 提供程序以检查环境文件中的版本号

Chef: extending yum_package provider to check for version number in environment file

我有 3 个厨师环境(开发、质量检查、生产),它们都共享一本食谱。环境文件包含 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 时,问题出现了。我想 only 在 dev 中安装它进行测试,所以我将适当的 yum_package 调用添加到配方中,并将版本号添加到 dev.json 环境文件中。但是,部署到 qa 和 prod 将失败,因为 qa 和 prod 环境文件中缺少 RPM 版本号。

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

根据 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 是可选的,只有在指定版本时才会被调用)