如何在 Chef 收敛时定义变量?
How to define a variable at converge time in Chef?
这可能看起来像是关于在收敛时修改 Chef 的行为的另一个问题,但我在任何文档或其他问题中都没有找到解决这种情况的方法。
我的一本食谱在食谱中有这个定义:
食谱:一个,食谱:一个
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
,但在这种情况下不能使用它,因为它不是资源的参数,而是变量本身。
- This question 看起来很令人兴奋,但在这种情况下我认为它不能被使用,因为这个方法修改了一个已经存在的资源,但在这种情况下属性是空的所以没有
template
已创建(未进行循环迭代)。
- 在定义属性后放置
include_recipe
语句,没有效果。
- 将优先级声明为
node.override
,运气不好。
问题
这种情况如何解决,所以配方A::a
在收敛时具有B::b
内部定义的值,而没有定义attributes
内部属性的值,因为它是配方-依赖?
在为使用该属性的配方调用 include_recipe
之前,需要通过任何方法设置新的属性值。
这可能看起来像是关于在收敛时修改 Chef 的行为的另一个问题,但我在任何文档或其他问题中都没有找到解决这种情况的方法。
我的一本食谱在食谱中有这个定义:
食谱:一个,食谱:一个
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
,但在这种情况下不能使用它,因为它不是资源的参数,而是变量本身。 - This question 看起来很令人兴奋,但在这种情况下我认为它不能被使用,因为这个方法修改了一个已经存在的资源,但在这种情况下属性是空的所以没有
template
已创建(未进行循环迭代)。 - 在定义属性后放置
include_recipe
语句,没有效果。 - 将优先级声明为
node.override
,运气不好。
问题
这种情况如何解决,所以配方A::a
在收敛时具有B::b
内部定义的值,而没有定义attributes
内部属性的值,因为它是配方-依赖?
在为使用该属性的配方调用 include_recipe
之前,需要通过任何方法设置新的属性值。