我们从某些属性动态计算运行时目录的名称:
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'
答案 0 :(得分:0)
如果您需要单独的文件(例如require_relative),则需要将变量设为导出的内容。您可以尝试将其设为常量,例如AppDir =
或方法。局部变量未加载require。
答案 1 :(得分:0)
在Chef中没有一个很好的方法可以做到这一点。配方和属性文件在非常不同的上下文中运行,所以你最好的选择是复制 - 意大利面锅炉板(如果它真的像你的例子一样小,那样做)或者其他可能是全局辅助方法但是那些很难安全写入。在Slack上给我打电话,我们可以为你的确切情况谈谈正确的帮助方法(覆盖所有这些方法对于SO答案来说并不实际)。
答案 2 :(得分:0)
如果您需要在一堆不同的食谱之间共享一些代码,您可以尝试使用从常见食谱依赖项加载的a library。