Chef/Ruby:遍历哈希数组
Chef/Ruby: Iterating through a Hash Array
我正在尝试遍历我的 Chef 属性文件中定义的散列并将其写入配置模板:
default['disk'] = node['block_device'].select { |i,j| j['state'] == 'running' && i != 'cdrom' }.select { |r| puts "Disk #{r}"}
在我的 Chef 模板中,我使用 <%= @disk %> 调用变量,因此所有工作都在属性文件变量中完成。
上面的属性会在编译食谱时显示我想要的结果,但是使用 puts 方法不会写入配置模板,我想出了一个空字符串来代替(见下文)。
Compiling Cookbooks...
Disk sda
Disk sdb
Converging 7 resources
....
+ Disk "{}"
如果我删除 puts 方法(不需要它来写入配置模板),那么我将整个 ['block_device'] 结构(而不仅仅是设备名称)作为磁盘值写入配置模板。
我也试过在配置模板中使用 puts 方法,但没有成功。在 chef-client 运行 期间,如何在模板中为数组中的每个键值写入一个新行?我想在编译期间将其写入配置模板而不是 STDOUT??
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 -%>
我正在尝试遍历我的 Chef 属性文件中定义的散列并将其写入配置模板:
default['disk'] = node['block_device'].select { |i,j| j['state'] == 'running' && i != 'cdrom' }.select { |r| puts "Disk #{r}"}
在我的 Chef 模板中,我使用 <%= @disk %> 调用变量,因此所有工作都在属性文件变量中完成。
上面的属性会在编译食谱时显示我想要的结果,但是使用 puts 方法不会写入配置模板,我想出了一个空字符串来代替(见下文)。
Compiling Cookbooks...
Disk sda
Disk sdb
Converging 7 resources
....
+ Disk "{}"
如果我删除 puts 方法(不需要它来写入配置模板),那么我将整个 ['block_device'] 结构(而不仅仅是设备名称)作为磁盘值写入配置模板。
我也试过在配置模板中使用 puts 方法,但没有成功。在 chef-client 运行 期间,如何在模板中为数组中的每个键值写入一个新行?我想在编译期间将其写入配置模板而不是 STDOUT??
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 -%>