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
的转义序列