metatron 0.1.9 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 9904b986356c64a1f895a522baf591911fdd4bdce61d47d94b8db3a05148b11f
4
- data.tar.gz: e5230c29009ef2cbf5c9721fa13ddfc65dad02114dfd4c8fd24e9d6873ae0d47
3
+ metadata.gz: e2595e703b422eadf0c748386541eae93f9b447d74e2bd70160a85dc14c7f59a
4
+ data.tar.gz: 599adf4652b4e2bbf35f86f95c083f6e6e03780d44fa563c83ca714c90aa3004
5
5
  SHA512:
6
- metadata.gz: 3886638f6f20c362c519e1ddf5fa1a5067bc00d038d37586c9fc11c5ff887a7f1518b957ef334ffeabe02cae7938f75732f6ef1f68941c80fe70f66c9bbc5804
7
- data.tar.gz: 71b9e8ec7e997d71c4369caef8a6f45d74ee6e9120a01a6d8d5723057dd8c76d954cd879df94365050ae2bcf2786f2415578c32ec8d70eebe23049b79cc3a0d9
6
+ metadata.gz: fd16efd8685097c4fdb321de668cecb60ac24c0dab98e1e97ab40590007d524dfa9b0ba644174786d659a0fc6bc1225b48b62cb0ae2a1224e1503ee8a6aa40c7
7
+ data.tar.gz: d0255911256d4e233f300b5a82dbeba91feeba7819d920bdd2e2e3c505a02b1b7343fdfc8ec938912bc4f650491ddfdc51efc007f7e57e58527ecf0665b07adf
data/.rubocop.yml CHANGED
@@ -38,6 +38,9 @@ Metrics/ClassLength:
38
38
  Gemspec/RequireMFA:
39
39
  Enabled: false
40
40
 
41
+ Gemspec/DevelopmentDependencies:
42
+ Enabled: false
43
+
41
44
  Style/MixinUsage:
42
45
  Exclude:
43
46
  - "bin/console"
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- metatron (0.1.9)
4
+ metatron (0.2.0)
5
5
  json (~> 2.6)
6
6
  puma (~> 6.3)
7
7
  sinatra (~> 2.2)
@@ -50,7 +50,7 @@ GEM
50
50
  regexp_parser (2.8.1)
51
51
  reverse_markdown (2.1.1)
52
52
  nokogiri
53
- rexml (3.2.5)
53
+ rexml (3.2.6)
54
54
  rspec (3.12.0)
55
55
  rspec-core (~> 3.12.0)
56
56
  rspec-expectations (~> 3.12.0)
data/README.md CHANGED
@@ -203,7 +203,7 @@ module BlogController
203
203
  # status = compare_children(request_body["children"], desired_children)
204
204
  status = {}
205
205
 
206
- { status:, children: desired_children.map(&:render) }
206
+ { status:, children: desired_children }
207
207
  end
208
208
 
209
209
  def construct_app_resources(parent, db_secret)
@@ -235,18 +235,23 @@ module BlogController
235
235
 
236
236
  def construct_db_stateful_set(secret)
237
237
  stateful_set = Metatron::Templates::StatefulSet.new("db")
238
- stateful_set.image = "mysql:8.0"
238
+ container = Metatron::Templates::Container.new("db")
239
+ container.image = "mysql:8.0"
240
+ container.envfrom << secret.name
241
+ stateful_set.containers << container
239
242
  stateful_set.additional_pod_labels = { "app.kubernetes.io/component": "db" }
240
- stateful_set.envfrom << secret.name
241
243
  stateful_set
242
244
  end
243
245
 
244
246
  def construct_app_deployment(meta, spec, auth_secret)
245
247
  deployment = Metatron::Templates::Deployment.new(meta["name"], replicas: spec["replicas"])
246
- deployment.image = spec["image"]
248
+ container = Metatron::Templates::Container.new("app")
249
+ container.image = spec["image"]
250
+ container.envfrom << auth_secret.name
251
+ container.ports << { name: "web", containerPort: 3000 }
252
+
253
+ deployment.containers << container
247
254
  deployment.additional_pod_labels = { "app.kubernetes.io/component": "app" }
248
- deployment.envfrom << auth_secret.name
249
- deployment.ports << { name: "web", containerPort: 3000 }
250
255
  deployment
251
256
  end
252
257
 
@@ -9,7 +9,9 @@ module Metatron
9
9
  end
10
10
 
11
11
  post "/" do
12
- halt(sync.to_json)
12
+ data = sync
13
+ data[:children] = data[:children]&.map { |c| c.respond_to?(:render) ? c.render : c }
14
+ halt(data.to_json)
13
15
  end
14
16
  end
15
17
  end
@@ -3,12 +3,20 @@
3
3
  module Metatron
4
4
  # Base class for templating Kubernetes resources
5
5
  class Template
6
- attr_accessor :api_version, :label_namespace, :name
7
- attr_reader :kind
6
+ attr_accessor :api_version, :name
7
+ attr_reader :kind, :label_namespace
8
+
9
+ class << self
10
+ attr_writer :label_namespace
11
+
12
+ def label_namespace
13
+ @label_namespace ||= "metatron.therubyist.org"
14
+ end
15
+ end
8
16
 
9
17
  def initialize(name)
10
18
  @name = name
11
- @label_namespace = "metatron.therubyist.org"
19
+ @label_namespace = self.class.label_namespace
12
20
  @api_version = "v1"
13
21
  @kind = self.class.name.split("::").last
14
22
  run_initializers
@@ -8,78 +8,42 @@ module Metatron
8
8
  def self.included(base)
9
9
  # base.extend ClassMethods
10
10
  base.class_eval do
11
- attr_accessor :image, :image_pull_policy, :additional_labels, :additional_pod_labels,
12
- :resource_limits, :resource_requests, :probes, :ports, :security_context,
13
- :volume_mounts, :volumes, :additional_containers, :env, :envfrom,
14
- :container_security_context, :affinity, :termination_grace_period_seconds,
11
+ attr_accessor :additional_labels, :additional_pod_labels,
12
+ :security_context, :volumes, :containers, :init_containers,
13
+ :affinity, :termination_grace_period_seconds,
15
14
  :tolerations, :pod_annotations
16
15
 
17
16
  initializer :pod_producer_initialize
18
17
 
19
- alias_method :imagePullPolicy, :image_pull_policy
20
- alias_method :volumeMounts, :volume_mounts
21
18
  alias_method :securityContext, :security_context
22
- alias_method :environment, :env
23
19
  alias_method :terminationGracePeriodSeconds, :termination_grace_period_seconds
24
20
  end
25
21
  end
26
22
 
27
23
  def pod_producer_initialize
28
- @image = "gcr.io/google_containers/pause"
29
- @image_pull_policy = "IfNotPresent"
30
- @resource_limits = { memory: "512Mi", cpu: "500m" }
31
- @resource_requests = { memory: "64Mi", cpu: "10m" }
32
24
  @affinity = {}
33
- @env = {}
34
- @envfrom = []
35
- @probes = {}
36
- @ports = []
37
- @volume_mounts = []
38
25
  @volumes = []
39
26
  @security_context = {}
40
- @container_security_context = {}
41
- @additional_containers = []
27
+ @containers = []
28
+ @init_containers = []
42
29
  @additional_labels = {}
43
30
  @additional_pod_labels = {}
44
31
  @pod_annotations = {}
45
- @termination_grace_period_seconds = 60
32
+ @termination_grace_period_seconds = nil
46
33
  @tolerations = []
47
34
  end
48
35
 
49
36
  def formatted_affinity = affinity && !affinity.empty? ? { affinity: } : {}
50
37
 
51
- def formatted_environment
52
- env && !env.empty? ? { env: env.map { |k, v| { name: k, value: v } } } : {}
53
- end
54
-
55
- def formatted_envfrom
56
- if envfrom && !envfrom.empty?
57
- { envFrom: envfrom.map { |secret| { secretRef: { name: secret } } } }
58
- else
59
- {}
60
- end
61
- end
62
-
63
38
  def formatted_pod_annotations
64
39
  pod_annotations && !pod_annotations.empty? ? { annotations: pod_annotations } : {}
65
40
  end
66
41
 
67
- def formatted_ports = ports&.any? ? { ports: } : {}
68
-
69
42
  def formatted_security_context
70
43
  security_context && !security_context.empty? ? { securityContext: } : {}
71
44
  end
72
45
 
73
- def formatted_container_security_context
74
- if container_security_context && !container_security_context.empty?
75
- { securityContext: container_security_context }
76
- else
77
- {}
78
- end
79
- end
80
-
81
46
  def formatted_tolerations = tolerations&.any? ? { tolerations: } : {}
82
- def formatted_volume_mounts = volume_mounts&.any? ? { volumeMounts: } : {}
83
47
  def formatted_volumes = volumes&.any? ? { volumes: } : {}
84
48
  end
85
49
  end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for containers used by k8s resources (not an actual resource)
6
+ class Container
7
+ attr_accessor :name, :image, :command, :args, :env, :envfrom, :resources, :volume_mounts,
8
+ :image_pull_policy, :life_cycle, :probes, :security_context, :ports,
9
+ :stdin, :tty
10
+
11
+ alias imagePullPolicy image_pull_policy
12
+ alias volumeMounts volume_mounts
13
+ alias securityContext security_context
14
+ alias environment env
15
+ alias envFrom envfrom
16
+
17
+ def initialize(name, image = "gcr.io/google_containers/pause")
18
+ @name = name
19
+ @image = image
20
+ @command = nil
21
+ @args = []
22
+ @env = []
23
+ @resources = {}
24
+ @volume_mounts = []
25
+ @image_pull_policy = "IfNotPresent"
26
+ @life_cycle = {}
27
+ @probes = {}
28
+ @stdin = true
29
+ @tty = true
30
+ end
31
+
32
+ def render
33
+ {
34
+ name:,
35
+ image:,
36
+ imagePullPolicy:,
37
+ stdin:,
38
+ tty:
39
+ }.merge(probes)
40
+ .merge(formatted_resources)
41
+ .merge(formatted_environment)
42
+ .merge(formatted_envfrom)
43
+ .merge(formatted_ports)
44
+ .merge(formatted_volume_mounts)
45
+ .merge(formatted_security_context)
46
+ .compact
47
+ end
48
+
49
+ def formatted_environment # rubocop:disable Metrics/PerceivedComplexity
50
+ return {} unless env && !env.empty?
51
+
52
+ if env.is_a?(Hash)
53
+ mapped_values = env.map do |key, value|
54
+ v = { name: key }
55
+ if value.is_a?(Hash)
56
+ v.merge!(value)
57
+ else
58
+ v[:value] = value
59
+ end
60
+ v
61
+ end
62
+
63
+ { env: mapped_values }
64
+ elsif env.is_a?(Array)
65
+ { env: }
66
+ else
67
+ raise "Environment must be a Hash or Array"
68
+ end
69
+ end
70
+
71
+ def formatted_envfrom
72
+ if envfrom && !envfrom.empty?
73
+ { envFrom: envfrom.map { |secret| { secretRef: { name: secret } } } }
74
+ else
75
+ {}
76
+ end
77
+ end
78
+
79
+ def formatted_resources = resources&.any? ? { resources: } : {}
80
+
81
+ def formatted_ports = ports&.any? ? { ports: } : {}
82
+
83
+ def formatted_security_context
84
+ security_context && !security_context.empty? ? { securityContext: } : {}
85
+ end
86
+
87
+ def formatted_volume_mounts = volume_mounts&.any? ? { volumeMounts: } : {}
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,83 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for basic CronJob k8s resource
6
+ class CronJob < Template
7
+ include Concerns::Annotated
8
+ include Concerns::PodProducer
9
+ include Concerns::Namespaced
10
+
11
+ attr_accessor :schedule, :suspend, :concurrency_policy, :starting_deadline_seconds,
12
+ :successful_jobs_history_limit, :failed_jobs_history_limit,
13
+ :automount_service_account_token, :backoff_limit, :active_deadline_seconds,
14
+ :dns_policy, :restart_policy,
15
+ :scheduler_name, :service_account, :service_account_name
16
+
17
+ alias automountServiceAccountToken automount_service_account_token
18
+ alias backoffLimit backoff_limit
19
+ alias activeDeadlineSeconds active_deadline_seconds
20
+ alias concurrencyPolicy concurrency_policy
21
+ alias dnsPolicy dns_policy
22
+ alias restartPolicy restart_policy
23
+ alias schedulerName scheduler_name
24
+ alias serviceAccount service_account
25
+ alias serviceAccountName service_account_name
26
+ alias startingDeadlineSeconds starting_deadline_seconds
27
+ alias successfulJobsHistoryLimit successful_jobs_history_limit
28
+ alias failedJobsHistoryLimit failed_jobs_history_limit
29
+
30
+ def initialize(name, schedule = "* * * * *")
31
+ super(name)
32
+ @schedule = schedule
33
+ @api_version = "batch/v1"
34
+ @restart_policy = "OnFailure"
35
+ end
36
+
37
+ # rubocop:disable Metrics/AbcSize
38
+ # rubocop:disable Metrics/MethodLength
39
+ def render
40
+ {
41
+ apiVersion:,
42
+ kind:,
43
+ metadata: {
44
+ labels: { "#{label_namespace}/name": name }.merge(additional_labels),
45
+ name:
46
+ }.merge(formatted_annotations).merge(formatted_namespace),
47
+ spec: {
48
+ schedule:,
49
+ suspend:,
50
+ concurrencyPolicy:,
51
+ startingDeadlineSeconds:,
52
+ successfulJobsHistoryLimit:,
53
+ failedJobsHistoryLimit:,
54
+ jobTemplate: {
55
+ spec: {
56
+ activeDeadlineSeconds:,
57
+ backoffLimit:,
58
+ template: {
59
+ spec: {
60
+ automountServiceAccountToken:,
61
+ terminationGracePeriodSeconds:,
62
+ dnsPolicy:,
63
+ restartPolicy:,
64
+ schedulerName:,
65
+ serviceAccount:,
66
+ serviceAccountName:,
67
+ containers: containers.map(&:render),
68
+ init_containers: init_containers.any? ? init_containers.map(&:render) : nil
69
+ }.merge(formatted_volumes)
70
+ .merge(formatted_security_context)
71
+ .compact
72
+ }.compact
73
+ }.compact
74
+ }.merge(formatted_tolerations)
75
+ .compact
76
+ }.compact
77
+ }
78
+ end
79
+ # rubocop:enable Metrics/AbcSize
80
+ # rubocop:enable Metrics/MethodLength
81
+ end
82
+ end
83
+ end
@@ -15,8 +15,8 @@ module Metatron
15
15
  @api_version = "apps/v1"
16
16
  end
17
17
 
18
- # rubocop:disable Metrics/MethodLength
19
18
  # rubocop:disable Metrics/AbcSize
19
+ # rubocop:disable Metrics/MethodLength
20
20
  def render
21
21
  {
22
22
  apiVersion:,
@@ -35,24 +35,12 @@ module Metatron
35
35
  }.merge(formatted_pod_annotations),
36
36
  spec: {
37
37
  terminationGracePeriodSeconds:,
38
- containers: [
39
- {
40
- name: "app",
41
- image:,
42
- imagePullPolicy:,
43
- stdin: true,
44
- tty: true,
45
- resources: { limits: resource_limits, requests: resource_requests }
46
- }.merge(probes)
47
- .merge(formatted_environment)
48
- .merge(formatted_envfrom)
49
- .merge(formatted_ports)
50
- .merge(formatted_volume_mounts)
51
- .merge(formatted_container_security_context)
52
- ] + additional_containers
38
+ containers: containers.map(&:render),
39
+ init_containers: init_containers.any? ? init_containers.map(&:render) : nil
53
40
  }.merge(formatted_volumes)
54
41
  .merge(formatted_security_context)
55
42
  .merge(formatted_tolerations)
43
+ .compact
56
44
  }
57
45
  }
58
46
  }
@@ -38,24 +38,12 @@ module Metatron
38
38
  }.merge(formatted_pod_annotations).merge(formatted_namespace),
39
39
  spec: {
40
40
  terminationGracePeriodSeconds:,
41
- containers: [
42
- {
43
- name: "app",
44
- image:,
45
- imagePullPolicy:,
46
- stdin: true,
47
- tty: true,
48
- resources: { limits: resource_limits, requests: resource_requests }
49
- }.merge(probes)
50
- .merge(formatted_environment)
51
- .merge(formatted_envfrom)
52
- .merge(formatted_ports)
53
- .merge(formatted_volume_mounts)
54
- .merge(formatted_container_security_context)
55
- ] + additional_containers
41
+ containers: containers.map(&:render),
42
+ init_containers: init_containers.any? ? init_containers.map(&:render) : nil
56
43
  }.merge(formatted_volumes)
57
44
  .merge(formatted_security_context)
58
45
  .merge(formatted_tolerations)
46
+ .compact
59
47
  }
60
48
  }
61
49
  }
@@ -0,0 +1,62 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Metatron
4
+ module Templates
5
+ # Template for basic Job k8s resource
6
+ class Job < Template
7
+ include Concerns::Annotated
8
+ include Concerns::PodProducer
9
+ include Concerns::Namespaced
10
+
11
+ attr_accessor :backoff_limit, :completions, :parallelism, :restart_policy,
12
+ :pod_failure_policy, :active_deadline_seconds, :ttl_seconds_after_finished,
13
+ :suspend
14
+
15
+ alias activeDeadlineSeconds active_deadline_seconds
16
+ alias backoffLimit backoff_limit
17
+ alias podFailurePolicy pod_failure_policy
18
+ alias restartPolicy restart_policy
19
+ alias ttlSecondsAfterFinished ttl_seconds_after_finished
20
+
21
+ def initialize(name)
22
+ super(name)
23
+ @api_version = "batch/v1"
24
+ end
25
+
26
+ # rubocop:disable Metrics/AbcSize
27
+ # rubocop:disable Metrics/MethodLength
28
+ def render
29
+ {
30
+ apiVersion:,
31
+ kind:,
32
+ metadata: {
33
+ labels: { "#{label_namespace}/name": name }.merge(additional_labels),
34
+ name:
35
+ }.merge(formatted_annotations).merge(formatted_namespace),
36
+ spec: {
37
+ suspend:,
38
+ backoffLimit:,
39
+ activeDeadlineSeconds:,
40
+ completions:,
41
+ parallelism:,
42
+ podFailurePolicy:,
43
+ ttlSecondsAfterFinished:,
44
+ template: {
45
+ spec: {
46
+ terminationGracePeriodSeconds:,
47
+ restartPolicy:,
48
+ containers: containers.map(&:render),
49
+ init_containers: init_containers.any? ? init_containers.map(&:render) : nil
50
+ }.merge(formatted_volumes)
51
+ .merge(formatted_security_context)
52
+ .merge(formatted_tolerations)
53
+ .compact
54
+ }.compact
55
+ }.compact
56
+ }
57
+ end
58
+ # rubocop:enable Metrics/AbcSize
59
+ # rubocop:enable Metrics/MethodLength
60
+ end
61
+ end
62
+ end
@@ -4,6 +4,8 @@ module Metatron
4
4
  module Templates
5
5
  # Template for basic Namespace k8s resource
6
6
  class Namespace < Template
7
+ include Concerns::Annotated
8
+
7
9
  attr_accessor :additional_labels
8
10
 
9
11
  def initialize(name)
@@ -8,7 +8,6 @@ module Metatron
8
8
  include Concerns::PodProducer
9
9
  include Concerns::Namespaced
10
10
 
11
- # rubocop:disable Metrics/MethodLength
12
11
  # rubocop:disable Metrics/AbcSize
13
12
  def render
14
13
  {
@@ -20,28 +19,15 @@ module Metatron
20
19
  }.merge(formatted_annotations).merge(formatted_namespace),
21
20
  spec: {
22
21
  terminationGracePeriodSeconds:,
23
- containers: [
24
- {
25
- name: "app",
26
- image:,
27
- imagePullPolicy:,
28
- stdin: true,
29
- tty: true,
30
- resources: { limits: resource_limits, requests: resource_requests }
31
- }.merge(probes)
32
- .merge(formatted_environment)
33
- .merge(formatted_envfrom)
34
- .merge(formatted_ports)
35
- .merge(formatted_volume_mounts)
36
- .merge(formatted_container_security_context)
37
- ] + additional_containers
22
+ containers: containers.map(&:render),
23
+ init_containers: init_containers.any? ? init_containers.map(&:render) : nil
38
24
  }.merge(formatted_volumes)
39
25
  .merge(formatted_security_context)
40
26
  .merge(formatted_tolerations)
27
+ .compact
41
28
  }
42
29
  end
43
30
  # rubocop:enable Metrics/AbcSize
44
- # rubocop:enable Metrics/MethodLength
45
31
  end
46
32
  end
47
33
  end
@@ -37,24 +37,12 @@ module Metatron
37
37
  }.merge(formatted_pod_annotations),
38
38
  spec: {
39
39
  terminationGracePeriodSeconds:,
40
- containers: [
41
- {
42
- name: "app",
43
- image:,
44
- imagePullPolicy:,
45
- stdin: true,
46
- tty: true,
47
- resources: { limits: resource_limits, requests: resource_requests }
48
- }.merge(probes)
49
- .merge(formatted_environment)
50
- .merge(formatted_envfrom)
51
- .merge(formatted_ports)
52
- .merge(formatted_volume_mounts)
53
- .merge(formatted_container_security_context)
54
- ] + additional_containers
40
+ containers: containers.map(&:render),
41
+ init_containers: init_containers.any? ? init_containers.map(&:render) : nil
55
42
  }.merge(formatted_volumes)
56
43
  .merge(formatted_security_context)
57
44
  .merge(formatted_tolerations)
45
+ .compact
58
46
  }
59
47
  }
60
48
  }
@@ -47,24 +47,12 @@ module Metatron
47
47
  }.merge(formatted_pod_annotations),
48
48
  spec: {
49
49
  terminationGracePeriodSeconds:,
50
- containers: [
51
- {
52
- name: "app",
53
- image:,
54
- imagePullPolicy:,
55
- stdin: true,
56
- tty: true,
57
- resources: { limits: resource_limits, requests: resource_requests }
58
- }.merge(probes)
59
- .merge(formatted_environment)
60
- .merge(formatted_envfrom)
61
- .merge(formatted_ports)
62
- .merge(formatted_volume_mounts)
63
- .merge(formatted_security_context)
64
- ] + additional_containers
50
+ containers: containers.map(&:render),
51
+ init_containers: init_containers.any? ? init_containers.map(&:render) : nil
65
52
  }.merge(formatted_volumes)
66
53
  .merge(formatted_affinity)
67
54
  .merge(formatted_tolerations)
55
+ .compact
68
56
  }
69
57
  }
70
58
  }
@@ -3,7 +3,7 @@
3
3
  module Metatron
4
4
  VERSION = [
5
5
  0, # major
6
- 1, # minor
7
- 9 # patch
6
+ 2, # minor
7
+ 0 # patch
8
8
  ].join(".")
9
9
  end
data/lib/metatron.rb CHANGED
@@ -28,6 +28,9 @@ require "metatron/template"
28
28
  require "metatron/templates/concerns/annotated"
29
29
  require "metatron/templates/concerns/namespaced"
30
30
  require "metatron/templates/concerns/pod_producer"
31
+ require "metatron/templates/container"
32
+ require "metatron/templates/job"
33
+ require "metatron/templates/cron_job"
31
34
  require "metatron/templates/pod"
32
35
  require "metatron/templates/persistent_volume_claim"
33
36
  require "metatron/templates/deployment"
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.1.9
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jonathan Gnagy
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2023-07-27 00:00:00.000000000 Z
11
+ date: 2023-07-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json
@@ -260,9 +260,12 @@ files:
260
260
  - lib/metatron/templates/concerns/namespaced.rb
261
261
  - lib/metatron/templates/concerns/pod_producer.rb
262
262
  - lib/metatron/templates/config_map.rb
263
+ - lib/metatron/templates/container.rb
264
+ - lib/metatron/templates/cron_job.rb
263
265
  - lib/metatron/templates/daemon_set.rb
264
266
  - lib/metatron/templates/deployment.rb
265
267
  - lib/metatron/templates/ingress.rb
268
+ - lib/metatron/templates/job.rb
266
269
  - lib/metatron/templates/namespace.rb
267
270
  - lib/metatron/templates/persistent_volume_claim.rb
268
271
  - lib/metatron/templates/pod.rb