Chef共享Ruby函数或库

时间:2017-03-09 19:16:12

标签: ruby chef

我们有一个本地Ruby库,我们在很多ruby项目中都包含这些库。它包含许多配置信息,这些信息在我们的主厨脚本中非常有用。这允许我们将所有配置放在一个地方,因此每次更改数据库时我们都不必创建多个位置等。尝试保持代码干燥。话虽如此,代码是直接的ruby函数,而不是主厨DSL。

我一直在努力将图书馆推入Chef,但发现它非常困难。这让我觉得我反对某种模式。

我已经尝试过并且没有工作。      - 通过require_relative和includes添加Ruby代码。      - 将Ruby代码添加到它自己的食谱中,然后包装食谱。      - 创建一个本地ruby gem(不能通过rubygems或其他repo检索)

什么有效:      - 将代码复制并粘贴到菜谱中。 (但它不可共享。)

我真正的问题是,在许多烹饪书中分享这个红宝石代码库的最佳方法是什么?根据最佳方式,你如何实际做到这一点?或指向正确的方向。

感谢。 迈尔斯。

3 个答案:

答案 0 :(得分:0)

我会使用Halite(免责声明:我的项目)将宝石转换为食谱,然后将其作为食谱上传。然后你可以依赖它,并在你的Chef代码中正常地要求它。

答案 1 :(得分:0)

您可以创建一本食谱并将ruby代码复制到cookbook的libraries文件夹中。然后,只要您将菜谱包含在运行列表中,Chef就会自动在节点上加载它。

你能告诉你,当你尝试“将Ruby代码添加到它自己的食谱中,然后包装食谱”时,你究竟做了什么以及什么行不通?

答案 2 :(得分:0)

我创建了一个ruby库。基本上,它在opsworks中读取服务器的ip。一旦它知道它知道它所处的环境,它就会设置一个哈希值。然后使用此哈希来设置属性。这样,所有服务器配置都存储在一个地方。

我可以将代码放在需要它的每个不同的食谱中。但是,我必须在每个不同的食谱中复制代码。我想将代码放在一个地方,并将其包含在每个食谱中。这样,如果我必须修改它,我只需要在一个地方进行修改。

我试着把它变成一颗宝石,并要求它没有运气 我还创建了一本只有库中红宝石代码的食谱。然后我包括"取决于等等#34;另一本食谱试图运行库函数,但我无法使它工作。

我可能已走上正轨,但在我开始工作之前我就停了下来。

基本上我想写一个简单的ruby代码库,我可以在任何我想要的食谱中使用它。必须有办法做到这一点,但我遇到了一些死胡同。我会一直把头撞在墙上。最终会打开一个洞!