使动态变量可用于多个厨师食谱

时间:2017-09-12 18:26:00

标签: ruby variables chef

我们从某些属性动态计算运行时目录的名称:

var1 = (node['foo']['bar']).to_s
var2 = (node['foo']['baz']).to_s
app_dir = "/var/#{var1}/#{var2}

将此代码块复制到需要它的所有配方。当我们试图清理它时,它会弹出“没有资源,或者名为'app_dir'的局部变量。

我们尝试过以下方法:

1)将代码块移动到attributes / default.rb

2)将代码块移动到recipes / default.rb

3)与上面的2相同,但在需要变量

的配方中添加require_relative 'default'

3 个答案:

答案 0 :(得分:0)

如果您需要单独的文件(例如require_relative),则需要将变量设为导出的内容。您可以尝试将其设为常量,例如AppDir =或方法。局部变量未加载require。

答案 1 :(得分:0)

在Chef中没有一个很好的方法可以做到这一点。配方和属性文件在非常不同的上下文中运行,所以你最好的选择是复制 - 意大利面锅炉板(如果它真的像你的例子一样小,那样做)或者其他可能是全局辅助方法但是那些很难安全写入。在Slack上给我打电话,我们可以为你的确切情况谈谈正确的帮助方法(覆盖所有这些方法对于SO答案来说并不实际)。

答案 2 :(得分:0)

如果您需要在一堆不同的食谱之间共享一些代码,您可以尝试使用从常见食谱依赖项加载的a library