Ruby Chef:扩展yum_程序包提供程序以检查环境文件中的版本号
我有3个厨师环境(dev、qa、prod),它们都共享一本食谱。环境文件包含RPM版本号: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_
{
"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
}
...
}