如何从食谱中找到具有特定角色的节点?

时间:2013-11-29 20:39:10

标签: chef chef-recipe

我正在编写一个设置负载均衡器的方法。我需要知道具有“role [wp_wasya]”的节点的IP,或者具有某个角色的其他节点的IP。我在网上看到有办法按名称获取节点,是否有办法通过搜索其角色来获取节点?

2 个答案:

答案 0 :(得分:2)

app_nodes = search( :node, "role:#{ whatever_role }" )
app_node = app_nodes[0]

答案 1 :(得分:0)

此搜索将仅返回结果集中的第一个节点。

app_nodes = search( :node, "role:#{ whatever_role }" )
app_node = app_nodes[0]

它还将使用Ruby字符串插值(#{}),因此如果您指定特定角色(wp_wasya),则可能不需要。不过,最好使用roles属性进行搜索,因为这将返回嵌套角色的节点。

如果您正在寻找多个节点,并且只想返回IP地址:

app_servers = search(:node, "roles:wp_wasya").map {|n| n['ipaddress']}

这将是一个IP地址字符串数组。例如,我们可以在chef-shell

中对此进行测试
chef > app_servers = search(:node, "roles:wp_wasya").map {|n| n['ipaddress']}
 => ["10.13.37.20", "10.13.37.21"]

我们可以使用#map,因为此#search将返回Array Chef::NodeHash个对象,其行为类似于Hash(尽管不是{{1}} 1}})。