繁体   English   中英

厨师Ruby - 可以在模板的变量中循环吗?

[英]Chef Ruby — are Loops within the variables for template possible?

我已经花了很多时间试图弄清楚如何做到这一点,我也调查了但是我还没找到合适的方法......?

基本上我正在尝试做类似以下的事情:

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM