0

我有两本食谱:CookbookA 和 CookbookB

CookbookB 定义了一个属性(例如“include_xyz”)。
如果 CookbookA 已运行,则应将其设置为“true”,否则应将其设置为“false”。

CookbookB/attributes/default.rb 中的“include_xyz”定义应该如何?

4

2 回答 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 回答