Chef infra 如果Chef客户端版本太旧,则忽略run_列表中的配方

Chef infra 如果Chef客户端版本太旧,则忽略run_列表中的配方,chef-infra,Chef Infra,我正在编写一些ohai插件,它依赖于烹饪书,需要chef版本>=12.7 我们的基础设施需要能够将我的插件烹饪书中的菜谱添加到12.4版本的节点上。配方不需要运行,只需进入标准运行列表即可 我是否可以指定只有在metadata.rb中的厨师版本>=12.7时才需要ohai cookbook?或者,如果厨师版本太旧,则应忽略整个烹饪书及其食谱。我认为您可以通过与 我从未试过,但觉得值得一试。 我还记得,在过去,我可以在菜谱中使用Chef::VERSION。这并不能解决这个问题。Chef仍然看到de

我正在编写一些ohai插件,它依赖于烹饪书,需要chef版本>=12.7

我们的基础设施需要能够将我的插件烹饪书中的菜谱添加到12.4版本的节点上。配方不需要运行,只需进入标准运行列表即可


我是否可以指定只有在metadata.rb中的厨师版本>=12.7时才需要ohai cookbook?或者,如果厨师版本太旧,则应忽略整个烹饪书及其食谱。

我认为您可以通过与

我从未试过,但觉得值得一试。
我还记得,在过去,我可以在菜谱中使用Chef::VERSION。

这并不能解决这个问题。Chef仍然看到depens“ohai”,并尝试编译CookbookDependes,但不能根据Chef版本将其设置为有条件的。if语句实际上将在上传烹饪书的工作站上进行计算。如果条件include_recipe有效,请使用它,但请参见此处:查看检查运行的chef版本的更好语法。如果ohai在12.4版的图书馆里爆炸了,除了升级12.4版或翻开ohai食谱之外,没有其他解决办法。
# recipes/default.rb
include_recipe 'foo' if Gem::Version.new(Gem.loaded_specs['chef'].version.to_s) >= Gem::Version.new('12.4')

# metadata.rb
depends 'foo' if  Gem::Version.new(Gem.loaded_specs['chef'].version.to_s) >= Gem::Version.new('12.4')