Chef获得节点的当前角色

时间:2017-05-02 05:11:02

标签: ruby chef role

我有一些像这样的代码,它使得所有节点的数组都符合搜索条件。我有一大堆不同风格的负载均衡器,每个负载均衡器都有自己的主厨角色。

我可以通过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

1 个答案:

答案 0 :(得分:4)

Node具有roles属性,其中Chef自动存储节点运行列表中的所有角色。您可以从以下配方中访问它:

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

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