根据依赖

时间:2017-06-13 16:54:57

标签: chef chef-recipe chef-attributes

我有两本食谱: CookbookA和CookbookB

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

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

2 个答案:

答案 0 :(得分:0)

啊,明白了!

default['include_xyz'] = "#{node.recipe?('CookbookA')}"

答案 1 :(得分:0)

由于属性文件都被解析(所有已经同步到节点的cookbook中的所有属性),在执行任何配方代码之前,并且在任何include_recipe "CookbookA"语句被解析之前,这是无法在属性代码中准确解决。

您可以完全消除该属性,只需直接在食谱中创建条件代码:

if node.recipe?('CookbookA')
   # do stuff conditionally
end

然而,反转这个逻辑可能更好,并且围绕CookbookA写一个包装器食谱,它可以使行为正确。当你更容易断言正确的行为时,你正试图“窥探”CookbookA。你可以添加一个属性来驱动你的食谱中的行为以及是否包括CookbookA,并使该属性成为真实的权威来源。