2012-09-01 27 views
3

我需要找到一個節點的IP,如果有的話。問題是'cluster_nodes.first'沒問題,但它沒有任何方法,'.ip'不存在,cluster_nodes.first [:ip]也沒有,我在Chef Wiki上找不到任何信息。如何在Chef配方中動態查找主機的IP

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! 

回答

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 

這對我的作品。第一個節點獲得一個空值,第二個獲得IP地址。

相關問題