class Middleware
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
Nested
Definitions
def self.build(**defaults, &block)
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
Implementation
def self.build(**defaults, &block)
Class.new(self) do
define_method(:initialize) do |**overrides|
super(**defaults, **overrides)
end
define_method(:call, &block)
end
end
def call(manifest)
Override in subclasses. Receives the full manifest, mutates it in place.
Implementation
def call(manifest)
end