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

Inherits:
Kube::Cluster::Manifest::Middleware show all
Defined in:
lib/kube/cluster/manifest/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::Manifest::Middleware

CLUSTER_SCOPED_KINDS, POD_BEARING_KINDS

Instance Method Summary collapse

Constructor Details

#initialize(**labels) ⇒ Labels

Returns a new instance of Labels.



36
37
38
# File 'lib/kube/cluster/manifest/middleware/labels.rb', line 36

def initialize(**labels)
  @labels = normalize(labels)
end

Instance Method Details

#call(resource) ⇒ Object



40
41
42
43
44
45
# File 'lib/kube/cluster/manifest/middleware/labels.rb', line 40

def call(resource)
  h = resource.to_h
  h[:metadata] ||= {}
  h[:metadata][:labels] = @labels.merge(h[:metadata][:labels] || {})
  rebuild(resource, h)
end