Chef Ruby——模板变量中的循环是否可行?
我已经花了很长时间试图找出如何做到这一点,我也进行了调查,但我没有找到正确的方法 基本上,我正在尝试做如下事情:Chef Ruby——模板变量中的循环是否可行?,ruby,chef-infra,Ruby,Chef Infra,我已经花了很长时间试图找出如何做到这一点,我也进行了调查,但我没有找到正确的方法 基本上,我正在尝试做如下事情: types = ['type1','type2'] classes = ['class1','class2'] classes.each do |class| types.each do |type| template "/files/filename.txt" do source "source_file.erb"
types = ['type1','type2']
classes = ['class1','class2']
classes.each do |class|
types.each do |type|
template "/files/filename.txt" do
source "source_file.erb"
owner "root"
group "root"
mode "0440"
variables({
:pri_areas => node['area']['#{type}']['#{class}'],
:rev_areas => node['area']['#{type}']['#{class}']
})
end
end
end
显然,我已经定义了所有属性,所以从前面看一切都正常。。
我仍然无法获得一个包含数组的循环,比如包含变量的数组?
也许是另一种不同的方法
有什么想法/帮助吗
非常感谢。您的代码存在一些问题,您需要先解决这些问题,然后才能正常工作 首先,
class
在Ruby中是一个保留关键字,因此不能用作变量名。您应该使用另一个,例如klass
其次,class
(或klass
)以及type
已经是循环中的字符串。因此,您不需要尝试字符串插值。您可以直接使用此选项:
variables({
:pri_areas => node['area'][type][klass],
:rev_areas => node['area'][type][klass]
})
字符串插值不起作用的原因是ruby知道两种不同类型的字符串文本:带有“
和带有的项目”
。不同之处在于,用“
分隔的字符串不允许字符串插值,并且通常不会将其中的任何内容解释为文字写入字符串以外的内容。只有在由“
分隔的字符串中,才能执行类似“{foo}”
的字符串插值,并使用类似\n
的转义序列