【发布时间】:2012-12-04 22:20:11
【问题描述】:
我正在尝试为具有以下属性的厨师制作食谱:
default['web-server']['hosts'] = [ { host: "some-ip", server: "some-server", port: "9000" } ]
我们的想法是对其进行迭代以创建配置文件(在本例中为 lighttpd),如下所示:
<% if node['web-server']['hosts'].length > 0 -%>
<% node['web-server']['hosts'].each do |host| -%>
$HTTP["host"] =~ "<%= host.host %>" {
proxy.balance = "round-robin" proxy.server = (
"" => (
"play" => (
"host" => "<%= host.server %>",
"port" => <%= host.port %>
)
)
)
}
<% end -%>
<% else -%>
<% end -%>
但是,在测试节点上运行 chef-client 时,我收到了以下信息:
FATAL: Chef::Mixin::Template::TemplateError: undefined method `host' for #<Mash:0x00000002b9a878>
在散列数组上循环的正确方法是什么?
【问题讨论】:
-
您可能不需要检查
array.length > 0是否是因为array.each的方法会自动循环遍历所有内容。如果数组中没有任何内容,array.each方法将立即结束。
标签: ruby chef-infra