3

ノードがある場合は、ノードの IP を見つける必要があります。問題は、「cluster_nodes.first」は問題ありませんが、メソッドがなく、「.ip」が存在せず、cluster_nodes.first[:ip] も存在せず、Chef Wiki に関する情報が見つからないことです。

cluster_nodes = search(:node, "name:cluster1*")

if cluster_nodes.size > 0
  node[:primary_node] = cluster_nodes.first.ip
else
  node[:primary_node] = ''
end

エラー:

[Sat, 01 Sep 2012 10:29:22 +0000] ERROR: Running exception handlers
[Sat, 01 Sep 2012 10:29:22 +0000] FATAL: Saving node information to /var/chef/cache/failed-run-data.json
[Sat, 01 Sep 2012 10:29:22 +0000] ERROR: Exception handlers complete
[Sat, 01 Sep 2012 10:29:22 +0000] FATAL: Stacktrace dumped to /var/chef/cache/chef-stacktrace.out
[Sat, 01 Sep 2012 10:29:22 +0000] FATAL: ArgumentError: Attribute ip is not defined!
4

1 に答える 1

0

haproxy レシピには良い例があり、これはそのレシピから抜粋したスニペットです。

cluster_nodes = search(:node, "name:cluster1*")
member = cluster_nodes.first if cluster_nodes

if cluster_nodes && cluster_nodes.size > 0
  primary_node = begin
    if member.attribute?('cloud')
      if node.attribute?('cloud') && (member['cloud']['provider'] == node['cloud']['provider'])
         member['cloud']['local_ipv4']
      else
        member['cloud']['public_ipv4']
      end
    else
      member['ipaddress']
    end
  end
else
  primary_node = ''
end

わたしにはできる。最初のノードは空の値を取得し、2 番目、3 番目などは IP アドレスを取得します。

于 2012-09-01T15:20:25.333 に答える