如何在Chef-repo中的Chef cookbook之间共享代码?

我想在厨师回购中分享一些食谱方法。 我知道在菜谱级别上我可以将代码放在libraries目录中的模块中(参见相关问题 )。 我正在寻找的是类似的东西,但可以在我的厨师仓库的所有食谱中找到。

我能想到几个解决方案:

  • 创建一个gem,安装gem作为Chef run的一部分。 这似乎有点矫枉过正。
  • 将文件放在某个文件夹中,并将该文件夹添加到配方文件中的$LOAD_PATH 。 我有一种感觉不适用于实际部署,因为厨师服务器对回购没有任何了解。
  • 将文件放在某个文件夹中,并将其符号链接到每个cookbook的libraries目录中。

最后一个选项似乎是最可行的。 有没有更好/更惯用的方式来做我想要的?

您可以使用其他食谱中的库定义函数,但您必须教授厨师您的食谱depend于提供的食谱。

因此,例如,如果在cookbook A中,您有一个提供某些函数flibraries/default.rb ,只要B的metadata.rb文件包含以下行,您就可以从cookbook B访问它。

 depends "A" 

有关更多详细信息,请参阅有关元数据和库的Chef文档。

有3种不同的选项允许以主厨资源(1. LWRP2。HWRP )或方法(3。“ ”)的forms共享代码。 我建议你先考虑LWRP。 我发现这个答案非常适合解释所提到的技术之间的差异。