我有一些像这样的代码,它使得所有节点的数组都符合搜索条件。我有一大堆不同风格的负载均衡器,每个负载均衡器都有自己的主厨角色。
我可以通过knife node edit max_data_lb-1
"run_list": [
"role[max_data_lb]"
]
我希望将角色拉出来并将其放在变量中供以后使用。我已经看到很多方法可以检查特定角色是否在当前run_list中,如node.role?('name')
,但只返回一个布尔值。我无法弄清楚如何在run_list中返回角色数组。
flavor = '#{node.role}'
# Somehow scrapes the node data for the role on the currently processing node.
#max_data_lb in one of my cases.
⚠ lb_q = "roles:#{flavor} AND chef_environment:#{node.chef_environment}"
lb_array = search(:node, lb_q, filter_result: { fqdn: ['fqdn'] }).map { |n| n['fqdn'] }.sort
#Code I'm trying to generalize and replace
⚠ #max_data_lb_q = "roles:max_data_lb AND chef_environment:#{node.chef_environment}"
⚠ #max_data_lb_array = search(:node, q, filter_result: { fqdn: ['fqdn'] }).map { |n| n['fqdn'] }.sort
⚠ #maxapi_lb_q = "roles:max_api_lb AND chef_environment:#{node.chef_environment}"
⚠ #maxapi_lb_array = search(:node, q, filter_result: { fqdn: ['fqdn'] }).map { |n| n['fqdn'] }.sort
答案 0 :(得分:4)
Node具有roles
属性,其中Chef自动存储节点运行列表中的所有角色。您可以从以下配方中访问它:
my_roles = node['roles'] #or node[:roles]
无论您喜欢(字符串或符号)来访问属性。