Class: Kube::Cluster::Middleware::Labels

Inherits:
Kube::Cluster::Middleware show all
Defined in:
lib/kube/cluster/middleware/labels.rb

Overview

Merges labels into metadata.labels on every resource. Existing labels are preserved; the supplied labels act as defaults that can be overridden per-resource.

stack do
  use Middleware::Labels, app: "web-app", managed_by: "kube_cluster"
end

The keyword arguments are converted to standard label keys:

app:        -> "app.kubernetes.io/name"
instance:   -> "app.kubernetes.io/instance"
version:    -> "app.kubernetes.io/version"
component:  -> "app.kubernetes.io/component"
part_of:    -> "app.kubernetes.io/part-of"
managed_by: -> "app.kubernetes.io/managed-by"

Any unrecognized keys are passed through as-is (string or symbol).

Constant Summary collapse

STANDARD_KEYS =
{
  app:        :"app.kubernetes.io/name",
  instance:   :"app.kubernetes.io/instance",
  version:    :"app.kubernetes.io/version",
  component:  :"app.kubernetes.io/component",
  part_of:    :"app.kubernetes.io/part-of",
  managed_by: :"app.kubernetes.io/managed-by",
}.freeze

Constants inherited from Kube::Cluster::Middleware

DEFAULT_FILTER

Instance Method Summary collapse

Methods inherited from Kube::Cluster::Middleware

build, #filter, #initialize

Constructor Details

This class inherits a constructor from Kube::Cluster::Middleware

Instance Method Details

#call(manifest) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
# File 'lib/kube/cluster/middleware/labels.rb', line 38

def call(manifest)
  labels = normalize(@opts)

  manifest.resources.map! do |resource|
    filter(resource) do
      h = resource.to_h
      h[:metadata] ||= {}
      h[:metadata][:labels] = labels.merge(h[:metadata][:labels] || {})
      resource.rebuild(h)
    end
  end
end