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