【问题标题】:erb: iterate over array of hasheserb:遍历哈希数组
【发布时间】:2017-06-10 15:21:52
【问题描述】:

我在 puppet 中有 hiera 数据,如下所示:

myservers:
  - serverA:
      propertyA: valueA
      propertyB: valueB
      propertyC: valueC
  - serverB:
      propertyA: valueD
      propertyB: valueE

来自该数据的配置文件应打印如下:

serverA:  PropertyA: valueA ; propertyB: valueB ; propertyC: valueC
serverB:  PropertyA: valueD ; propertyB: valueE

我试图通过遍历哈希数组将其放入 erb 模板中,但无法正确格式化。

<% myservers.each do |server| -%>
<%= server -%>: <%= server.each do |k,v| -%> <%= k -%>: <%= v -%> ;
<% end %>
<% end -%>

【问题讨论】:

    标签: arrays hash puppet erb


    【解决方案1】:

    我相信你的意思是:

    <% @myservers.each do |server| -%>
    <% server.keys.each do |s| -%>
    <%= s %>: <% server[s].each do |k,v| -%><%= k -%>: <%= v -%> ;<% end %>
    <% end -%>
    <% end -%>
    

    或者也许(如果您知道每个数组元素将仅包含一个服务器,如您的示例所示):

    <% @myservers.each do |server| -%>
    <%= server.keys[0] %>: <% server[server.keys[0]].each do |k,v| -%><%= k -%>: <%= v -%> ;<% end %>
    <% end -%>
    

    换句话说,您将真正的哈希数组视为哈希数组。

    此外,Puppet 清单中的变量在 ERB 模板中显示为实例变量,因此 @。见here

    【讨论】:

    • 对代码修复的解释会真正提高答案质量。
    • 我不确定在这方面添加文字是否有多大帮助,但无论如何,已更新。
    • 好的,再次更新,说明 Puppet 变量在 ERB 模板中作为实例变量传递。
    猜你喜欢
    • 2016-09-03
    • 1970-01-01
    • 2012-08-22
    • 1970-01-01
    • 2014-12-30
    • 1970-01-01
    • 1970-01-01
    • 2014-06-01
    相关资源
    最近更新 更多