Class: Kube::Cluster::Standard::Role

Inherits:
Object
  • Object
show all
Defined in:
lib/kube/cluster/standard/role.rb

Overview

A Role with an ergonomic rules shorthand. Each rule maps a resource spec to its verbs; the spec is “resource” (core API group) or “group/resource”:

Role.new(rules: [
  "secrets"        => %w[get list],
  "batch/cronjobs" => %w[get],
])

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(rules:, name: nil, &block) ⇒ Role

Returns a new instance of Role.



23
24
25
26
27
28
29
30
31
# File 'lib/kube/cluster/standard/role.rb', line 23

def initialize(rules:, name: nil, &block)
  @rules_input = rules

  super() do
    .name = name if name
    self.rules = Role.build_rules(rules)
    instance_exec(&block) if block
  end
end

Instance Attribute Details

#rules_inputObject (readonly)

The original rules shorthand, so a named copy can be rebuilt from it (rebuild downgrades the class; reconstructing keeps it a Standard::Role).



21
22
23
# File 'lib/kube/cluster/standard/role.rb', line 21

def rules_input
  @rules_input
end

Class Method Details

.build_rules(rules) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/kube/cluster/standard/role.rb', line 37

def self.build_rules(rules)
  entries = rules.is_a?(Hash) ? [rules] : Array(rules)

  entries.flat_map do |entry|
    entry.map do |spec, verbs|
      group, resource = spec.include?("/") ? spec.split("/", 2) : ["", spec]
      { apiGroups: [group], resources: [resource], verbs: Array(verbs) }
    end
  end
end

Instance Method Details

#nameObject



33
34
35
# File 'lib/kube/cluster/standard/role.rb', line 33

def name
  to_h.dig(:metadata, :name)
end