metatron 0.11.2 → 0.11.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 172d36a4cdb46cbfce74e2f31002c3b6706b1ff9a328d6b44dc919c444d8bed3
4
- data.tar.gz: 8ebd13c4d65b6b2f07eab819a3ba7ed2d50dbfc63f2b83fcaafe642bdf51b7cd
3
+ metadata.gz: a46bbee8fe39f8373f5ec65dd4142bd490117024d18190db8092a10f2da64072
4
+ data.tar.gz: 3959470b07cf923a6df1fe5060b86bc8378016a9ce43590d07e3e9c7e691ba38
5
5
  SHA512:
6
- metadata.gz: bca6a3fbe34796dfbf322222f0f10b02cd31a33a99940a6e11789ea01066df8ea1f13701a91a2bae6918b3e5cb8f89ba3d0e768d711fb9dba7205a46b905b8b9
7
- data.tar.gz: 62e5d5740817bf1767d2eab44309cf5ced41380dcd8ad1015ff89ce3ebc1bf9d7dc5debd3ffba15d5fa5f312edebddb6f979203954bb22eee8f93b87cbfc746c
6
+ metadata.gz: 873d6df9d70638d47ccd3564ec8b56da41d7fefe3fdb72e99b806c27645f91321d34840c98c805584f2e257bf4bbedae4ab38d1c28a8c7b022ef09fe89e74768
7
+ data.tar.gz: 42a596702fdf60d0db2514f02b85681ea542fbe5899284e59899954ccce06751501397e4e99b960396697f1f1b1cbeec48f86bf8abeead91d3c77bbfb923feb0
@@ -1,3 +1,3 @@
1
1
  {
2
- ".": "0.11.2"
2
+ ".": "0.11.3"
3
3
  }
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [0.11.3](https://github.com/jgnagy/metatron/compare/metatron/v0.11.2...metatron/v0.11.3) (2026-02-27)
4
+
5
+
6
+ ### Features
7
+
8
+ * add Gateway API resource templates (closes [#92](https://github.com/jgnagy/metatron/issues/92)) ([9820f78](https://github.com/jgnagy/metatron/commit/9820f786dfeff6148d6e5c81e46c628d8f5ca697))
9
+
3
10
  ## [0.11.2](https://github.com/jgnagy/metatron/compare/metatron/v0.11.1...metatron/v0.11.2) (2025-06-18)
4
11
 
5
12
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- metatron (0.11.2)
4
+ metatron (0.11.3)
5
5
  base64
6
6
  json (~> 2.6)
7
7
  rack (>= 2.2.8, < 4)
@@ -25,9 +25,9 @@ GEM
25
25
  language_server-protocol (3.17.0.4)
26
26
  lint_roller (1.1.0)
27
27
  logger (1.6.6)
28
- nokogiri (1.18.8-arm64-darwin)
28
+ nokogiri (1.18.9-arm64-darwin)
29
29
  racc (~> 1.4)
30
- nokogiri (1.18.8-x86_64-linux-gnu)
30
+ nokogiri (1.18.9-x86_64-linux-gnu)
31
31
  racc (~> 1.4)
32
32
  observer (0.1.2)
33
33
  ostruct (0.6.1)
@@ -36,7 +36,7 @@ GEM
36
36
  ast (~> 2.4.1)
37
37
  racc
38
38
  racc (1.8.1)
39
- rack (3.1.16)
39
+ rack (3.1.18)
40
40
  rack-test (2.2.0)
41
41
  rack (>= 1.3)
42
42
  rainbow (3.1.1)
@@ -46,7 +46,7 @@ GEM
46
46
  regexp_parser (2.10.0)
47
47
  reverse_markdown (3.0.0)
48
48
  nokogiri
49
- rexml (3.4.1)
49
+ rexml (3.4.2)
50
50
  rspec (3.13.0)
51
51
  rspec-core (~> 3.13.0)
52
52
  rspec-expectations (~> 3.13.0)
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ module Concerns
6
+ # Provides common parent reference functionality for Gateway API route resources
7
+ module RouteResource
8
+ def self.included(base)
9
+ base.class_eval do
10
+ attr_reader :parent_refs
11
+
12
+ initializer :route_resource_initialize
13
+ end
14
+ end
15
+
16
+ def route_resource_initialize
17
+ @parent_refs = []
18
+ end
19
+
20
+ def add_parent_ref(name:, namespace: nil, kind: "Gateway", section_name: nil, port: nil)
21
+ ref = { name:, kind: }
22
+ ref[:namespace] = namespace if namespace
23
+ ref[:sectionName] = section_name if section_name
24
+ ref[:port] = port if port
25
+ @parent_refs << ref
26
+ end
27
+
28
+ def formatted_parent_refs
29
+ parent_refs.empty? ? {} : { parentRefs: parent_refs }
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class Gateway
6
+ # Internal model for a Gateway listener
7
+ class Listener
8
+ attr_accessor :name, :port, :protocol, :hostname, :tls, :allowed_routes
9
+
10
+ def initialize(name, port:, protocol:, hostname: nil, tls: nil, allowed_routes: nil)
11
+ @name = name
12
+ @port = port
13
+ @protocol = protocol
14
+ @hostname = hostname
15
+ @tls = tls
16
+ @allowed_routes = allowed_routes
17
+ end
18
+
19
+ def render
20
+ { name:, port:, protocol: }
21
+ .merge(hostname ? { hostname: } : {})
22
+ .merge(tls ? { tls: } : {})
23
+ .merge(allowed_routes ? { allowedRoutes: allowed_routes } : {})
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for Gateway k8s resource (Gateway API)
6
+ class Gateway < Template
7
+ include Concerns::Annotated
8
+ include Concerns::Namespaced
9
+
10
+ attr_accessor :gateway_class_name, :additional_labels
11
+ attr_reader :listeners
12
+
13
+ def initialize(name, gateway_class_name:)
14
+ super(name)
15
+ @gateway_class_name = gateway_class_name
16
+ @api_version = "gateway.networking.k8s.io/v1"
17
+ @additional_labels = {}
18
+ @listeners = []
19
+ end
20
+
21
+ def add_listener(listener = nil, **attrs)
22
+ @listeners << if listener.is_a?(Listener)
23
+ listener
24
+ else
25
+ Listener.new(attrs.delete(:name), **attrs)
26
+ end
27
+ end
28
+
29
+ def render
30
+ {
31
+ apiVersion:,
32
+ kind:,
33
+ metadata: {
34
+ name:,
35
+ labels: base_labels.merge(additional_labels)
36
+ }.merge(formatted_annotations).merge(formatted_namespace),
37
+ spec: {
38
+ gatewayClassName: gateway_class_name,
39
+ listeners: listeners.map(&:render)
40
+ }
41
+ }
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class GRPCRoute
6
+ # Internal model for a GRPCRoute filter.
7
+ # The +type+ must be the canonical CamelCase name (e.g.
8
+ # "RequestHeaderModifier", "ResponseHeaderModifier", "RequestMirror",
9
+ # "ExtensionRef"). All remaining keyword arguments become the type-specific
10
+ # configuration nested under the auto-derived camelCase key.
11
+ #
12
+ # Example:
13
+ # Filter.new(
14
+ # type: "RequestHeaderModifier",
15
+ # add: [{ name: "X-Custom-Header", value: "custom-value" }]
16
+ # )
17
+ # # => { type: "RequestHeaderModifier",
18
+ # # requestHeaderModifier: { add: [{ ... }] } }
19
+ class Filter
20
+ attr_accessor :type, :config
21
+
22
+ def initialize(type:, **config)
23
+ @type = type
24
+ @config = config
25
+ end
26
+
27
+ def render
28
+ { type: }.merge(config.empty? ? {} : { type_key => config })
29
+ end
30
+
31
+ private
32
+
33
+ def type_key
34
+ # PascalCase → lowerCamelCase, handling acronym prefixes:
35
+ # "RequestHeaderModifier" → :requestHeaderModifier
36
+ # "ExtensionRef" → :extensionRef
37
+ type
38
+ .sub(/\A([A-Z]+)(?=[A-Z][a-z])/, &:downcase)
39
+ .sub(/\A[A-Z]/, &:downcase)
40
+ .to_sym
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class GRPCRoute
6
+ # Internal model for a GRPCRoute rule
7
+ class Rule
8
+ attr_accessor :backend_refs, :matches
9
+ attr_reader :filters
10
+
11
+ def initialize(backend_refs:, matches: nil)
12
+ @backend_refs = backend_refs
13
+ @matches = matches
14
+ @filters = []
15
+ end
16
+
17
+ def add_filter(filter = nil, **attrs)
18
+ @filters << if filter.is_a?(Filter)
19
+ filter
20
+ else
21
+ Filter.new(**attrs)
22
+ end
23
+ end
24
+
25
+ def render
26
+ { backendRefs: backend_refs }
27
+ .merge(matches ? { matches: } : {})
28
+ .merge(filters.empty? ? {} : { filters: filters.map(&:render) })
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for GRPCRoute k8s resource (Gateway API)
6
+ class GRPCRoute < Template
7
+ include Concerns::Annotated
8
+ include Concerns::Namespaced
9
+ include Concerns::RouteResource
10
+
11
+ attr_accessor :additional_labels
12
+ attr_reader :hostnames, :rules
13
+
14
+ def initialize(name)
15
+ super
16
+ @api_version = "gateway.networking.k8s.io/v1"
17
+ @additional_labels = {}
18
+ @hostnames = []
19
+ @rules = []
20
+ end
21
+
22
+ def add_hostname(hostname)
23
+ @hostnames << hostname
24
+ end
25
+
26
+ def add_rule(rule = nil, **attrs)
27
+ @rules << if rule.is_a?(Rule)
28
+ rule
29
+ else
30
+ Rule.new(**attrs)
31
+ end
32
+ end
33
+
34
+ def formatted_hostnames
35
+ hostnames.empty? ? {} : { hostnames: }
36
+ end
37
+
38
+ def render
39
+ {
40
+ apiVersion:,
41
+ kind:,
42
+ metadata: {
43
+ name:,
44
+ labels: base_labels.merge(additional_labels)
45
+ }.merge(formatted_annotations).merge(formatted_namespace),
46
+ spec: formatted_parent_refs
47
+ .merge(formatted_hostnames)
48
+ .merge(rules.empty? ? {} : { rules: rules.map(&:render) })
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class HTTPRoute
6
+ # Internal model for an HTTPRoute filter.
7
+ # The +type+ must be the canonical CamelCase name (e.g. "URLRewrite",
8
+ # "RequestHeaderModifier"). All remaining keyword arguments become the
9
+ # type-specific configuration nested under the auto-derived camelCase key.
10
+ #
11
+ # Example:
12
+ # Filter.new(
13
+ # type: "URLRewrite",
14
+ # hostname: "example.net",
15
+ # path: { type: "ReplacePrefixMatch", replacePrefixMatch: "/new-prefix" }
16
+ # )
17
+ # # => { type: "URLRewrite", urlRewrite: { hostname: "example.net", path: { ... } } }
18
+ class Filter
19
+ attr_accessor :type, :config
20
+
21
+ def initialize(type:, **config)
22
+ @type = type
23
+ @config = config
24
+ end
25
+
26
+ def render
27
+ { type: }.merge(config.empty? ? {} : { type_key => config })
28
+ end
29
+
30
+ private
31
+
32
+ def type_key
33
+ # PascalCase → lowerCamelCase, handling acronym prefixes:
34
+ # "URLRewrite" → :urlRewrite
35
+ # "RequestHeaderModifier" → :requestHeaderModifier
36
+ type
37
+ .sub(/\A([A-Z]+)(?=[A-Z][a-z])/, &:downcase)
38
+ .sub(/\A[A-Z]/, &:downcase)
39
+ .to_sym
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class HTTPRoute
6
+ # Internal model for an HTTPRoute rule
7
+ class Rule
8
+ attr_accessor :backend_refs, :matches
9
+ attr_reader :filters
10
+
11
+ def initialize(backend_refs:, matches: nil)
12
+ @backend_refs = backend_refs
13
+ @matches = matches
14
+ @filters = []
15
+ end
16
+
17
+ def add_filter(filter = nil, **attrs)
18
+ @filters << if filter.is_a?(Filter)
19
+ filter
20
+ else
21
+ Filter.new(**attrs)
22
+ end
23
+ end
24
+
25
+ def render
26
+ { backendRefs: backend_refs }
27
+ .merge(matches ? { matches: } : {})
28
+ .merge(filters.empty? ? {} : { filters: filters.map(&:render) })
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for HTTPRoute k8s resource (Gateway API)
6
+ class HTTPRoute < Template
7
+ include Concerns::Annotated
8
+ include Concerns::Namespaced
9
+ include Concerns::RouteResource
10
+
11
+ attr_accessor :additional_labels
12
+ attr_reader :hostnames, :rules
13
+
14
+ def initialize(name)
15
+ super
16
+ @api_version = "gateway.networking.k8s.io/v1"
17
+ @additional_labels = {}
18
+ @hostnames = []
19
+ @rules = []
20
+ end
21
+
22
+ def add_hostname(hostname)
23
+ @hostnames << hostname
24
+ end
25
+
26
+ def add_rule(rule = nil, **attrs)
27
+ @rules << if rule.is_a?(Rule)
28
+ rule
29
+ else
30
+ Rule.new(**attrs)
31
+ end
32
+ end
33
+
34
+ def formatted_hostnames
35
+ hostnames.empty? ? {} : { hostnames: }
36
+ end
37
+
38
+ def render
39
+ {
40
+ apiVersion:,
41
+ kind:,
42
+ metadata: {
43
+ name:,
44
+ labels: base_labels.merge(additional_labels)
45
+ }.merge(formatted_annotations).merge(formatted_namespace),
46
+ spec: formatted_parent_refs
47
+ .merge(formatted_hostnames)
48
+ .merge(rules.empty? ? {} : { rules: rules.map(&:render) })
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class TCPRoute
6
+ # Internal model for a TCPRoute rule
7
+ class Rule
8
+ attr_accessor :backend_refs
9
+
10
+ def initialize(backend_refs:)
11
+ @backend_refs = backend_refs
12
+ end
13
+
14
+ def render
15
+ { backendRefs: backend_refs }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for TCPRoute k8s resource (Gateway API)
6
+ class TCPRoute < Template
7
+ include Concerns::Annotated
8
+ include Concerns::Namespaced
9
+ include Concerns::RouteResource
10
+
11
+ attr_accessor :additional_labels
12
+ attr_reader :rules
13
+
14
+ def initialize(name)
15
+ super
16
+ @api_version = "gateway.networking.k8s.io/v1alpha2"
17
+ @additional_labels = {}
18
+ @rules = []
19
+ end
20
+
21
+ def add_rule(rule = nil, **attrs)
22
+ @rules << if rule.is_a?(Rule)
23
+ rule
24
+ else
25
+ Rule.new(**attrs)
26
+ end
27
+ end
28
+
29
+ def render
30
+ {
31
+ apiVersion:,
32
+ kind:,
33
+ metadata: {
34
+ name:,
35
+ labels: base_labels.merge(additional_labels)
36
+ }.merge(formatted_annotations).merge(formatted_namespace),
37
+ spec: formatted_parent_refs
38
+ .merge(rules.empty? ? {} : { rules: rules.map(&:render) })
39
+ }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class TLSRoute
6
+ # Internal model for a TLSRoute rule
7
+ class Rule
8
+ attr_accessor :backend_refs
9
+
10
+ def initialize(backend_refs:)
11
+ @backend_refs = backend_refs
12
+ end
13
+
14
+ def render
15
+ { backendRefs: backend_refs }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,53 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for TLSRoute k8s resource (Gateway API)
6
+ class TLSRoute < Template
7
+ include Concerns::Annotated
8
+ include Concerns::Namespaced
9
+ include Concerns::RouteResource
10
+
11
+ attr_accessor :additional_labels
12
+ attr_reader :hostnames, :rules
13
+
14
+ def initialize(name)
15
+ super
16
+ @api_version = "gateway.networking.k8s.io/v1"
17
+ @additional_labels = {}
18
+ @hostnames = []
19
+ @rules = []
20
+ end
21
+
22
+ def add_hostname(hostname)
23
+ @hostnames << hostname
24
+ end
25
+
26
+ def add_rule(rule = nil, **attrs)
27
+ @rules << if rule.is_a?(Rule)
28
+ rule
29
+ else
30
+ Rule.new(**attrs)
31
+ end
32
+ end
33
+
34
+ def formatted_hostnames
35
+ hostnames.empty? ? {} : { hostnames: }
36
+ end
37
+
38
+ def render
39
+ {
40
+ apiVersion:,
41
+ kind:,
42
+ metadata: {
43
+ name:,
44
+ labels: base_labels.merge(additional_labels)
45
+ }.merge(formatted_annotations).merge(formatted_namespace),
46
+ spec: formatted_parent_refs
47
+ .merge(formatted_hostnames)
48
+ .merge(rules.empty? ? {} : { rules: rules.map(&:render) })
49
+ }
50
+ end
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ class UDPRoute
6
+ # Internal model for a UDPRoute rule
7
+ class Rule
8
+ attr_accessor :backend_refs
9
+
10
+ def initialize(backend_refs:)
11
+ @backend_refs = backend_refs
12
+ end
13
+
14
+ def render
15
+ { backendRefs: backend_refs }
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for UDPRoute k8s resource (Gateway API)
6
+ class UDPRoute < Template
7
+ include Concerns::Annotated
8
+ include Concerns::Namespaced
9
+ include Concerns::RouteResource
10
+
11
+ attr_accessor :additional_labels
12
+ attr_reader :rules
13
+
14
+ def initialize(name)
15
+ super
16
+ @api_version = "gateway.networking.k8s.io/v1alpha2"
17
+ @additional_labels = {}
18
+ @rules = []
19
+ end
20
+
21
+ def add_rule(rule = nil, **attrs)
22
+ @rules << if rule.is_a?(Rule)
23
+ rule
24
+ else
25
+ Rule.new(**attrs)
26
+ end
27
+ end
28
+
29
+ def render
30
+ {
31
+ apiVersion:,
32
+ kind:,
33
+ metadata: {
34
+ name:,
35
+ labels: base_labels.merge(additional_labels)
36
+ }.merge(formatted_annotations).merge(formatted_namespace),
37
+ spec: formatted_parent_refs
38
+ .merge(rules.empty? ? {} : { rules: rules.map(&:render) })
39
+ }
40
+ end
41
+ end
42
+ end
43
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Metatron
4
- VERSION = "0.11.2"
4
+ VERSION = "0.11.3"
5
5
  end
data/lib/metatron.rb CHANGED
@@ -24,6 +24,7 @@ require "metatron/template"
24
24
  require "metatron/templates/concerns/annotated"
25
25
  require "metatron/templates/concerns/namespaced"
26
26
  require "metatron/templates/concerns/pod_producer"
27
+ require "metatron/templates/concerns/route_resource"
27
28
  require "metatron/templates/container"
28
29
  require "metatron/templates/pod"
29
30
  require "metatron/templates/job"
@@ -33,7 +34,21 @@ require "metatron/templates/cluster_role_binding"
33
34
  require "metatron/templates/cron_job"
34
35
  require "metatron/templates/daemon_set"
35
36
  require "metatron/templates/deployment"
37
+ require "metatron/templates/gateway"
38
+ require "metatron/templates/gateway/listener"
39
+ require "metatron/templates/grpc_route"
40
+ require "metatron/templates/grpc_route/rule"
41
+ require "metatron/templates/grpc_route/filter"
42
+ require "metatron/templates/http_route"
43
+ require "metatron/templates/http_route/rule"
44
+ require "metatron/templates/http_route/filter"
36
45
  require "metatron/templates/ingress"
46
+ require "metatron/templates/tcp_route"
47
+ require "metatron/templates/tcp_route/rule"
48
+ require "metatron/templates/tls_route"
49
+ require "metatron/templates/tls_route/rule"
50
+ require "metatron/templates/udp_route"
51
+ require "metatron/templates/udp_route/rule"
37
52
  require "metatron/templates/limit_range"
38
53
  require "metatron/templates/namespace"
39
54
  require "metatron/templates/network_policy"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metatron
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.11.2
4
+ version: 0.11.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-06-18 00:00:00.000000000 Z
11
+ date: 2026-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: base64
@@ -260,11 +260,20 @@ files:
260
260
  - lib/metatron/templates/concerns/annotated.rb
261
261
  - lib/metatron/templates/concerns/namespaced.rb
262
262
  - lib/metatron/templates/concerns/pod_producer.rb
263
+ - lib/metatron/templates/concerns/route_resource.rb
263
264
  - lib/metatron/templates/config_map.rb
264
265
  - lib/metatron/templates/container.rb
265
266
  - lib/metatron/templates/cron_job.rb
266
267
  - lib/metatron/templates/daemon_set.rb
267
268
  - lib/metatron/templates/deployment.rb
269
+ - lib/metatron/templates/gateway.rb
270
+ - lib/metatron/templates/gateway/listener.rb
271
+ - lib/metatron/templates/grpc_route.rb
272
+ - lib/metatron/templates/grpc_route/filter.rb
273
+ - lib/metatron/templates/grpc_route/rule.rb
274
+ - lib/metatron/templates/http_route.rb
275
+ - lib/metatron/templates/http_route/filter.rb
276
+ - lib/metatron/templates/http_route/rule.rb
268
277
  - lib/metatron/templates/ingress.rb
269
278
  - lib/metatron/templates/job.rb
270
279
  - lib/metatron/templates/limit_range.rb
@@ -281,6 +290,12 @@ files:
281
290
  - lib/metatron/templates/service.rb
282
291
  - lib/metatron/templates/service_account.rb
283
292
  - lib/metatron/templates/stateful_set.rb
293
+ - lib/metatron/templates/tcp_route.rb
294
+ - lib/metatron/templates/tcp_route/rule.rb
295
+ - lib/metatron/templates/tls_route.rb
296
+ - lib/metatron/templates/tls_route/rule.rb
297
+ - lib/metatron/templates/udp_route.rb
298
+ - lib/metatron/templates/udp_route/rule.rb
284
299
  - lib/metatron/templates/volume_snapshot.rb
285
300
  - lib/metatron/templates/volume_snapshot_content.rb
286
301
  - lib/metatron/version.rb