我有两本食谱:CookbookA 和 CookbookB
CookbookB 定义了一个属性(例如“include_xyz”)。
如果 CookbookA 已运行,则应将其设置为“true”,否则应将其设置为“false”。
CookbookB/attributes/default.rb 中的“include_xyz”定义应该如何?
问问题
32 次
2 回答
0
啊,明白了!
default['include_xyz'] = "#{node.recipe?('CookbookA')}"
于 2017-06-13T17:26:55.733 回答
0
由于属性文件都被解析(所有食谱中的所有属性都已同步到节点),在执行任何配方代码之前,在任何include_recipe "CookbookA"
语句可以被解析之前,这是不可能在属性代码中准确解决的。
您可以完全消除该属性并直接在配方中制作条件代码:
if node.recipe?('CookbookA')
# do stuff conditionally
end
但是,最好颠倒这个逻辑,并在 CookbookA 周围编写一个包装食谱,这样可以使行为正确。当断言正确的行为会更简单时,您正试图“监视” CookbookA。您可以添加一个属性来驱动您的食谱中的行为以及是否包含 CookbookA,并使该属性成为权威的事实来源。
于 2017-06-13T18:36:08.897 回答