我在chef中的attributes / default.rb文件中有一个带有值的哈希数组,如下所示:
default['server']['database'] = [
{
'name' => 'srv1'
'user' => 'usr1'
'pass' => 'pwd1'
},
{
'name' => 'srv2'
'user' => 'user2'
'pass' => 'pwd3'
}
]
然后,我有一个带有以下嵌套循环的templates / default / server.xml.erb文件:
<% node['server']['database'].each do |hash| %>
<% hash.each do |key, value| %>
<%if key == "name" %>
<Resource name="#{value}"
<% else %>
#{key}="#{value}"
<% end %>
<% end %>
/>
<% end %>
预期结果是:
<Resource name="srv1"
user="usr1"
pass="pwd1"
/>
<Resource name="srv2"
user="usr2"
pass="pwd2"
/>
我最终得到的是:
<Resource name="#{value}"
#{key}="#{value}"
#{key}="#{value}"
/>
<Resource name="#{value}"
#{key}="#{value}"
#{key}="#{value}"
/>
我在普通的红宝石中试过这个并得到它来打印预期的结果。不知道我在这里做错了什么,但请你,如果你能说清楚,我会很感激。
答案 0 :(得分:1)
您需要使用erb <%= %>
<% node['server']['database'].each do |hash| %>
<% hash.each do |key, value| %>
<%if key == "name" %>
<Resource name="<%= value %>"
<% else %>
<%= "#{key}=\"#{value}\"" %>
<% end %>
<% end %>
/>
<% end %>
答案 1 :(得分:0)
我会做这样的事情:
<% node['server']['database'].each do |hash| %>
<Resource name="<%= hash['name'] %>"
user="<%= hash['user'] %>"
pass="<%= hash['pass'] %>" />
<% end %>
或者:
<% node['server']['database'].each do |hash| %>
<Resource <%= hash.map { |k, v| "#{k}=#{v.inspect}" }.join(' ') %> />
<% end %>
请注意,在极端情况下,哈希中的键的顺序可能很难调试。与嵌套示例相比,我的示例不依赖于特定的键排序。