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

Ruby Chef:扩展yum_程序包提供程序以检查环境文件中的版本号,ruby,chef-infra,Ruby,Chef Infra,我有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_

我有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\u-package
调用,并将版本号添加到dev.json环境文件中。但是,部署到qa和prod将失败,因为qa和prod环境文件中缺少RPM版本号

是否有方法扩展
yum\u包
提供程序,以检查环境文件中是否指定了版本号(如果未指定版本,则跳过)?或者有更优雅的解决方案解决此问题吗?

在的注释之后,以下内容应该可以使用(可以选择不指定确切版本,而是使用最新版本):

节点['rpms']。每个节点都有| p,v|
百事可乐
版本v如果版本v
结束
结束

version
是可选的,并且只有在指定了版本的情况下才会被调用)

我认为更优雅的做法是使用
每个方法迭代键和值。基于这个想法,如果一些RPM有版本发布值(如1.0-dev或2.0-common),我只需更新环境文件以包含发布值,如
“blah”:“1.0-dev”,
,对吗?您可以在那里输入基础提供程序接受的任何版本号(本例中为百胜)。
{
  "name": "dev",
  ...
  "rpms": {
    "blah": "1.0",
    "blah2": "2.0",
    "latestblah": nil
  }
  ...
}