Chef / Ruby:通过哈希数组迭代

时间:2017-11-16 02:57:04

标签: ruby chef chef-recipe

我试图遍历我的Chef属性文件中定义的哈希并将其写入配置模板:

default['disk'] = node['block_device'].select { |i,j| j['state'] == 'running' && i != 'cdrom' }.select { |r| puts "Disk #{r}"}

在我的Chef模板中,我使用<%= @disk%>调用变量,因此所有工作都在属性文件变量中完成。

上面的属性会在编译cookbook时显示我想要的结果,但是使用puts方法不会写入配置模板,而是我想出了空字符串(见下文)。

Compiling Cookbooks...
Disk sda
Disk sdb
Converging 7 resources
....
+    Disk "{}"

如果我删除了puts方法(不应该让它写入配置模板),那么我将整个[' block_device']结构(而不​​仅仅是设备名称)作为写入的磁盘值改为配置模板。

我也试过在配置模板中使用puts方法,但没有在哪里。在厨师 - 客户端运行期间,如何在模板中为每个键值在模板中写一个新行?我想在编译期间将它写入配置模板而不是STDOUT

1 个答案:

答案 0 :(得分:3)

Chef模板使用Erb格式化您是否希望实际使用它:

# recipe
template '/asdf' do
  # ...
  variables disks: node['block_device'].select { |i,j| j['state'] == 'running' && i != 'cdrom' }
end

# template
<%- @disk.each do |i, j| -%>
<%= i %>
<%- end -%>