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

dan*_*ain 11 ruby chef-infra

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

我能想到几个解决方案:

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

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

Emi*_*Sit 18

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

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

depends "A"
Run Code Online (Sandbox Code Playgroud)

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

  • 你能详细说明一下吗?我认为配方中仍然需要一些 Chef::Resource.send(:include, xxx) 语句才能使其工作? (3认同)