Chef:扩展yum_package提供程序以检查环境文件

时间:2015-04-30 20:41:59

标签: ruby chef

我有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中安装 only 进行测试,因此我将相应的yum_package调用添加到配方中,并将版本号添加到dev.json环境文件中。但是,部署到qa和prod将失败,因为qa和prod环境文件中缺少RPM版本号。

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

1 个答案:

答案 0 :(得分:0)

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