0

私は、とりわけ次の属性を持つシェフのレシピを構築しようとしています:

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>

ハッシュの配列をループする正しい方法は何ですか?

4

1 に答える 1

3

わかりました、私はこれを理解しました。hash[:key]正しい構文は、 を介してハッシュキーにアクセスすることです。

$HTTP["host"] =~ "<%= host[:host] %>" {
    proxy.balance = "round-robin" proxy.server = (
         "" => (
             "play" => (
               "host" => "<%= host[:server] %>",
               "port" => <%= host[:port] %>
             )
         )
       )
  }
  <%   end -%>
  <% else -%>
  <% end -%>
于 2012-12-04T14:20:11.527 に答える