这可能看起来像是在收敛时修改Chef的行为的另一个问题,但我没有在任何文档或其他问题中找到解决此案例的方法。
我的一本食谱在食谱中有这个定义:
食谱:A,食谱:a
node['cookbookA']['resource'].each do |name, options|
template "/etc/.../#{name}.conf" do
...
end
end
此食谱包含在不同食谱中的不同食谱中,node['cookbookA']['resource']
的值在内部定义:
食谱:B,食谱:b
include_recipe 'A::a'
node.default['cookbookA']['resource'] = ['foo']
在执行时,node['cookbookA']['resource']
为空。
lazy
,但在这种情况下不能使用它,因为它不是资源的参数,而是变量本身。template
(没有循环迭代)。include_recipe
语句,没有效果。 node.override
,没有运气。如何解决这种情况,因此配方A::a
在收敛时具有B::b
内定义的值,而不定义attributes
内属性的值,因为它取决于配方?
答案 0 :(得分:1)
在为使用该属性的配方调用include_recipe
之前,需要通过任何方法设置新的属性值。