Class: Kube::Cluster::Middleware
- Inherits:
-
Object
- Object
- Kube::Cluster::Middleware
- Defined in:
- lib/kube/cluster/middleware.rb,
lib/kube/cluster/middleware/stack.rb,
lib/kube/cluster/middleware/labels.rb,
lib/kube/cluster/middleware/namespace.rb,
lib/kube/cluster/middleware/annotations.rb,
lib/kube/cluster/middleware/resource_preset.rb,
lib/kube/cluster/middleware/security_context.rb,
lib/kube/cluster/middleware/pod_anti_affinity.rb,
lib/kube/cluster/middleware/hpa_for_deployment.rb,
lib/kube/cluster/middleware/ingress_for_service.rb,
lib/kube/cluster/middleware/service_for_deployment.rb
Overview
Base class for manifest middleware.
Middleware receives the full manifest and mutates it in place. Each middleware is responsible for iterating resources as needed.
Transform example:
class AddTeamLabel < Middleware
def call(manifest)
manifest.resources.map! do |resource|
h = resource.to_h
h[:metadata][:labels][:"app.kubernetes.io/team"] = "platform"
resource.rebuild(h)
end
end
end
Generative example:
class ServiceForDeployment < Middleware
def call(manifest)
generated = []
manifest.resources.each do |resource|
next unless resource.pod_bearing?
generated << build_service_from(resource)
end
manifest.resources.concat(generated)
end
end
Direct Known Subclasses
Annotations, HPAForDeployment, IngressForService, Labels, Namespace, PodAntiAffinity, ResourcePreset, SecurityContext, ServiceForDeployment
Defined Under Namespace
Classes: Annotations, HPAForDeployment, IngressForService, Labels, Namespace, PodAntiAffinity, ResourcePreset, SecurityContext, ServiceForDeployment, Stack
Constant Summary collapse
- DEFAULT_FILTER =
-> (x) {true}
Class Method Summary collapse
-
.build(**defaults, &block) ⇒ Object
Build an anonymous middleware class from a block.
Instance Method Summary collapse
-
#call(manifest) ⇒ Object
Override in subclasses.
- #filter(resource, &block) ⇒ Object
-
#initialize(filter: DEFAULT_FILTER, **opts) ⇒ Middleware
constructor
A new instance of Middleware.
Constructor Details
#initialize(filter: DEFAULT_FILTER, **opts) ⇒ Middleware
Returns a new instance of Middleware.
53 54 55 56 |
# File 'lib/kube/cluster/middleware.rb', line 53 def initialize(filter: DEFAULT_FILTER, **opts) @filter = filter @opts = opts end |
Class Method Details
.build(**defaults, &block) ⇒ Object
Build an anonymous middleware class from a block. The block becomes the #call method and runs via instance_exec, so filter, deep_merge, and @opts are all available inside it.
Middleware.build(filter: ->(r) { r.pod_bearing? }) do |manifest|
manifest.resources.map! do |resource|
filter(resource) do
h = resource.to_h
h[:metadata][:labels][:custom] = "yes"
resource.rebuild(h)
end
end
end
73 74 75 76 77 78 79 80 81 |
# File 'lib/kube/cluster/middleware.rb', line 73 def self.build(**defaults, &block) Class.new(self) do define_method(:initialize) do |**overrides| super(**defaults, **overrides) end define_method(:call, &block) end end |
Instance Method Details
#call(manifest) ⇒ Object
Override in subclasses. Receives the full manifest, mutates it in place.
106 107 |
# File 'lib/kube/cluster/middleware.rb', line 106 def call(manifest) end |
#filter(resource, &block) ⇒ Object
83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 |
# File 'lib/kube/cluster/middleware.rb', line 83 def filter(resource, &block) # In case super() wasn't called by the middleware. unless @filter.respond_to?(:call) @filter = DEFAULT_FILTER end # Usage: # def call(manifest) # manifest.resources.map! do |resource| # filter(resource) do # # ... middleware code here # end # end # end if @filter.call(resource) instance_exec(&block) else resource end end |