Chef infra 如何在Chef中定义收敛时的变量?
这看起来像是关于在converge时间修改Chef行为的另一个问题,但我在任何文档或其他问题中都没有找到解决这个问题的方法 我的一本食谱中有这样的定义: 食谱:A,食谱:AChef infra 如何在Chef中定义收敛时的变量?,chef-infra,chef-recipe,Chef Infra,Chef Recipe,这看起来像是关于在converge时间修改Chef行为的另一个问题,但我在任何文档或其他问题中都没有找到解决这个问题的方法 我的一本食谱中有这样的定义: 食谱:A,食谱:A node['cookbookA']['resource'].each do |name, options| template "/etc/.../#{name}.conf" do .
node['cookbookA']['resource'].each do |name, options|
template "/etc/.../#{name}.conf" do
...
end
end
此配方包含在不同烹饪书中的不同配方中,并且节点['cookbookA']['resource']
的值在以下内容中定义:
食谱:B,食谱:B
include_recipe 'A::a'
node.default['cookbookA']['resource'] = ['foo']
在执行时,节点['cookbookA']['resource']
为空
我试过的
- 我试图找到一种方法将属性定义为
,但在本例中无法使用,因为它不是资源的参数,而是变量本身lazy
- 看起来很令人兴奋,但在本例中,我认为它不能使用,因为该方法修改了一个已经存在的资源,但在本例中,属性为空,因此没有创建
模板
(没有进行循环迭代)
- 在定义属性后放置
语句,没有效果李>include\u recipe
- 将优先级声明为
,没有运气节点。重写
如何解决这种情况,使配方
A::A
在收敛时在B::B
中定义了值,而不在属性中定义属性值,因为它依赖于配方 在为使用该属性的配方调用include\u recipe
之前,需要通过任何方法设置新属性值。两件事:在配方中使用节点。默认值
?如果要设置属性,请使用node.set[…]
或在属性文件中设置默认值。第二:您正在将节点['cookbookA']['resource']
设置为一个字符串,但随后您尝试将其作为数组进行迭代。这将抛出一个异常。刚刚尝试了节点。设置,不幸的是结果相同。我无法在属性中设置此属性,因为它依赖于配方(我只想在包含配方的情况下设置属性)2。是的,我的错,实际上我传递了一个数组,但是我用foo
字符串来说明这个例子。我在问题中更改了它。现在移动节点。将[…]
行设置在include\u recipe
上方@KarenB谢谢,这很有效。如果您愿意,请在提示中添加一个答案,我会接受它,因为它解决了我的问题。@nKn如果您从多个配方中收取此值,请在Cookbook属性文件中将其初始化为空数组,然后使用节点。默认值['key']