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

时间:2013-06-27 02:14:45

标签: ruby chef

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

我可以想到几个解决方案:

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

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

2 个答案:

答案 0 :(得分:18)

您可以使用其他食谱中的库定义函数,但您必须教导厨师将您的食谱depend放在提供的食谱上。

因此,例如,如果在食谱A中,您有libraries/default.rb提供了一些功能f,只要B的metadata.rb文件包含该功能,您就可以从食谱B中访问它。行:

depends "A"

有关详细信息,请参阅metadatalibraries上的Chef文档。

答案 1 :(得分:1)

有3个不同的选项允许以主厨资源(1. LWRP ,2。 HWRP )或方法(3。)的形式共享代码库“)。我建议你先考虑LWRP。我发现this answer非常善于解释所提到的技术之间的差异。