Chef 获取节点的当前角色

Chef get node's current role

我有一些这样的代码,可以生成一个包含所有符合搜索条件的节点的数组。我有一大堆不同风格的负载均衡器,每一个都有自己的 Chef 角色。

我可以看到我想要的 knife node edit max_data_lb-1

  "run_list": [
  "role[max_data_lb]"
]

我想把这个角色拉出来,放到一个变量里,以备后用。我见过很多方法可以检查当前 run_list 中是否有特定角色,例如 node.role?('name'),但只有 return 是布尔值。我不知道如何 return 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

节点有一个 roles 属性,Chef 会自动存储节点 运行 列表中的所有角色。您可以像这样从食谱中访问它:

my_roles = node['roles'] #or node[:roles] 

您喜欢(字符串或符号)访问属性。