我有两本食谱:
CookbookA和CookbookB
CookbookB定义了一个属性(例如" include_xyz")。
这应该设置为" true"如果CookbookA已经运行,则应将其设置为" false"。
应该如何" include_xyz" CookbookB / attributes / default.rb中的定义如何?
答案 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,并使该属性成为真实的权威来源。