我正在编写一个设置负载均衡器的方法。我需要知道具有“role [wp_wasya]”的节点的IP,或者具有某个角色的其他节点的IP。我在网上看到有办法按名称获取节点,是否有办法通过搜索其角色来获取节点?
答案 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::Node
个Hash
个对象,其行为类似于Hash
(尽管不是{{1}} 1}})。