如何做厨师地图;在模板文件中排序

时间:2014-09-04 19:37:23

标签: ruby-on-rails ruby ruby-on-rails-3 chef chef-recipe

目前我在食谱中有以下代码

hadoop_nodes = search(:node, "(role:mapreduce-datanode OR role:mapreduce-namenode) AND chef_environment:#{node.chef_environment} AND domain:#{node['domain']}")
hadoop_nodes.map!{ |h| {:host_entry => "#{h['ipaddress']} #{h['fqdn']} #{h['hostname']}"}}
hadoop_nodes.sort!{ |x, y| x[:host_entry] <=> y[:host_entry] }

的模板文件
<%- @hadoop_nodes.each do |hadoop_node| -%>
<%= hadoop_node[:host_entry] %>
<%- end -%>

我想搬家

hadoop_nodes.map!{ |h| {:host_entry => "#{h['ipaddress']} #{h['fqdn']} #{h['hostname']}"}}

到模板文件,但不知道如何,任何帮助

2 个答案:

答案 0 :(得分:1)

模板与普通代码没有什么不同,只是您需要添加标记。

  • <%代码。
  • <%=表示您想要输出的内容。

因为它们都是围绕物体的环路,所以你不必改变太多:

<% @hadoop_nodes.each do |hadoop_node| %>
<%=   "#{hadoop_node['ipaddress']} #{hadoop_node['fqdn']} #{hadoop_node['hostname']}" %>
<% end %>

但您的请求却遗漏了sort。你也可以这样做:

<% @hadoop_nodes.sort{|x, y| x['hostname'] <=> y['hostname'] }.each do |hadoop_node| %>

答案 1 :(得分:0)

为什么要将其移入模板文件?在模板之外可能会更好。