Chef infra 是否可以在不添加recipe do metadata.rb的情况下包含_recipe

Chef infra 是否可以在不添加recipe do metadata.rb的情况下包含_recipe,chef-infra,cookbook,recipe,Chef Infra,Cookbook,Recipe,我有一本食谱,需要为Windows和RHEL设备安装软件。我可以利用现有的烹饪书来制作RHEL盒,我将其称为LinuxFoo。我使用include\u recipe'linux foo'将其包含在默认配方中,并在烹饪书元数据中使用dependens'linux foo'添加 然而,通过向元数据添加依赖项,它打破了我的自定义Windows配方。我要走了 NoMethodError ------------- undefined method `[]' for nil:NilCla

我有一本食谱,需要为Windows和RHEL设备安装软件。我可以利用现有的烹饪书来制作RHEL盒,我将其称为
LinuxFoo
。我使用
include\u recipe'linux foo'
将其包含在默认配方中,并在烹饪书元数据中使用
dependens'linux foo'
添加

然而,通过向元数据添加依赖项,它打破了我的自定义Windows配方。我要走了

   NoMethodError
   -------------
   undefined method `[]' for nil:NilClass

   Platform:
   ---------
   x64-mingw32
尝试在测试厨房中聚合windows配方时。它将
../linux foo/attributes/default.rb
称为罪魁祸首,但没有指定哪个属性

有没有办法仍然
包含_recipe'linux foo'
,但不将其作为硬依赖项包含在
metadata.rb
中,或者以某种方式包装第三方食谱的默认属性


看起来我要么保留依赖项并打破windows配方,要么将linux和windows配方分成单独的烹饪书。

不幸的是,没有直接的方法可以做到这一点。Chef此时不支持可选依赖项


最好的解决办法是让您的
linux-foo
食谱安全地加载到非linux机器上,即使食谱不是这样。如果查看错误报告中提到的文件,您可以找到完整的堆栈跟踪,这将告诉您需要修复哪一行(尽管可能有多行)。

不幸的是,没有直接的方法来修复。Chef此时不支持可选依赖项


最好的解决办法是让您的
linux-foo
食谱安全地加载到非linux机器上,即使食谱不是这样。如果查看错误报告中提到的文件,您可以找到完整的堆栈跟踪,这将告诉您需要修复哪一行(尽管可能不止一行)。

谢谢@coderanger。我检查了转储在虚拟机上的stacktrace,它非常神秘,但我将重新讨论它。如何使第三方
linux-foo
cookbook安全并与我的windows配方兼容?我可以在我的食谱中包装或保护它有问题的默认属性吗?谢谢@coderanger。我检查了转储在虚拟机上的stacktrace,它非常神秘,但我将重新讨论它。如何使第三方
linux-foo
cookbook安全并与我的windows配方兼容?我可以在我的食谱中包装或保护它有问题的默认属性吗?