【发布时间】:2013-06-24 09:13:06
【问题描述】:
我想在厨师存储库中分享一些跨食谱的方法。我知道在食谱级别上,我可以将代码放入库目录中的模块中(请参阅related question)。我正在寻找的是类似的东西,但可以在我的 Chef 存储库中的所有食谱中找到。
我能想到几个解决方案:
- 创建一个gem,将gem 安装为chef run 的一部分。这似乎有点矫枉过正。
- 将文件放在某个文件夹中,然后将该文件夹添加到配方文件中的
$LOAD_PATH。我有一种感觉不适用于实际部署,因为主厨服务器对存储库一无所知。 - 将文件放在某个文件夹中,并将其符号链接到每个说明书的库目录中。
最后一个选项似乎是最可行的。有没有更好/更惯用的方式来做我想做的事?
【问题讨论】:
-
当你说“方法”时,你指的是纯 Ruby 代码,还是使用 Chef 的 DSL 的代码可以放在食谱中?如果它是纯 Ruby,那么 gem 可能是最好的出路,除非你只有几行代码,否则我几乎不认为它是矫枉过正的。如果是 Chef 代码,请使用 LWRP 创建一个库说明书,并将其包含在您的顶级应用程序说明书中。第二种方法可能适用于纯 Ruby 库,但我还没有尝试确定。
-
主要是纯Ruby代码。可能有十几种实用方法。我对 Chef 的依赖管理不是很熟悉,但我想知道它是否可以创建一个仅在其库文件夹中包含共享代码的食谱。
-
我刚刚尝试过,但它似乎不起作用,至少不是马上。我仍然认为宝石路径可能是最好的。 :)
-
另外,根据您的用例,您可以创建 LWRP 或定义作为方法的接口。这样,当您将此 lib 食谱作为另一个依赖项包含在内时,您将拥有可在食谱中使用的这些资源。
标签: ruby chef-infra