厨师模板嵌套循环

时间:2015-06-06 05:44:51

标签: erb chef-recipe cookbook

我的厨师食谱遇到了一个小问题,我尝试使用嵌套循环(循环循环)。我有一个多层次的数组,我想在厨师模板中循环所有级别。现在,我对以下内容表示赞同:

模板:

        <% @countries.each do |country| %>
                <% @countries[@country].each do |key, val| %>
                        <Publication <%= @country @key @val %> />
                <% end %>
        <% end %>

属性:

default['countries']['IE'] = {'57'=>'val2','58'=>'val2','61'=>'val','63'=>'val'}
default['countries']['DE'] =  {'110'=>'val2','113'=>'val2','115'=>'val2'}
default['countries']['BE'] = {'134'=>'val2','138'=>'val2','139'=>'val2'}

配方:

template "conf.xml" do
    action :create
    variables ({
        :countries => node['countries']
              })
end

首先我想循环国家级别,然后使用数组的键和值循环该数组中的每个级别。我希望有人可以帮助我解决这个问题。

最佳, - Thijs

1 个答案:

答案 0 :(得分:0)

你可以这样做,

    <% @countries.each do |country, country_details| -%>
      <% country_details.to_hash.each do |value| -%>
        <Publication <%= "#{country} #{value[0]} #{value[1]}" %> />
      <% end -%>
    <% end -%>

country_details理想情况下应该是一个哈希值,但是,Chef会将其更改为一个名为ImmutableMash的东西,需要将其转换为哈希值。 但是,在转换时,迭代后接收的值是数组而不是散列,因此需要以数组格式写入,即值[0]和值[1]。

以上代码返回以下输出,不确定您是否正在寻找此内容,

    <Publication IE 57 val2 />
    <Publication IE 58 val2 />
    <Publication IE 61 val />
    <Publication IE 63 val />
    <Publication DE 110 val2 />
    <Publication DE 113 val2 />
    <Publication DE 115 val2 />
    <Publication BE 134 val2 />
    <Publication BE 138 val2 />
    <Publication BE 139 val2 />