2017-03-03 60 views
0

我有一本食谱,需要为Windows和RHEL盒安装软件。现在有一本我可以用于RHEL盒子的烹饪书,我将其称为linux-foo。我将它包含在include_recipe 'linux-foo'的默认配方中,并在食谱元数据中添加depends 'linux-foo'是否可以在不添加配方的情况下使用include_recipe do metadata.rb

但是,通过向元数据添加依赖关系,它破坏了我的自定义Windows配方。我得到

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

    Platform: 
    --------- 
    x64-mingw32 

当试图在测试厨房收敛窗口食谱。它指的是.../linux-foo/attributes/default.rb作为罪魁祸首,但没有指定哪个属性。

有没有办法仍然include_recipe 'linux-foo'但不包括它作为metadata.rb的硬依赖项或以某种方式包装第三方食谱的默认属性?

它看起来像我要么保持依赖关系,并打破Windows配方或将Linux和Windows配方分离成单独的食谱。

回答

0

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

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

+0

谢谢@coderanger。我检查了VM上的堆栈跟踪,它非常神秘,但我会重新审视它。我可以通过哪些方式使第三方'linux-foo'食谱安全并与我的Windows配方兼容?我能否以某种方式在我的食谱中包装或保护其有问题的默认属性? – mywoes123

相关问题