kubes 0.4.7 → 0.6.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (161) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +28 -0
  3. data/README.md +54 -8
  4. data/docs/_docs/config/hooks/kubes.md +1 -0
  5. data/docs/_docs/config/reference.md +1 -0
  6. data/docs/_docs/config/skip.md +1 -1
  7. data/docs/_docs/dsl/multiple-resources.md +6 -4
  8. data/docs/_docs/dsl/resources/job.md +62 -0
  9. data/docs/_docs/dsl/resources/secret.md +19 -2
  10. data/docs/_docs/extra-env/dsl.md +2 -2
  11. data/docs/_docs/extra-env/yaml.md +1 -1
  12. data/docs/_docs/generators.md +41 -0
  13. data/docs/_docs/helpers.md +17 -3
  14. data/docs/_docs/helpers/aws/advanced.md +10 -0
  15. data/docs/_docs/helpers/aws/advanced/secrets.md +131 -0
  16. data/docs/_docs/helpers/aws/advanced/ssm.md +78 -0
  17. data/docs/_docs/helpers/aws/secrets.md +18 -88
  18. data/docs/_docs/helpers/aws/ssm.md +20 -38
  19. data/docs/_docs/helpers/google/advanced.md +10 -0
  20. data/docs/_docs/helpers/google/advanced/secrets.md +78 -0
  21. data/docs/_docs/helpers/google/gke.md +33 -0
  22. data/docs/_docs/helpers/google/secrets.md +18 -27
  23. data/docs/_docs/helpers/google/service-account.md +8 -0
  24. data/docs/_docs/intro.md +2 -9
  25. data/docs/_docs/intro/docker-image.md +66 -0
  26. data/docs/_docs/intro/how-kubes-works.md +7 -11
  27. data/docs/_docs/layering.md +2 -0
  28. data/docs/_docs/layering/merge.md +1 -1
  29. data/docs/_docs/layering/mix.md +99 -0
  30. data/docs/_docs/learn/dsl/delete.md +10 -2
  31. data/docs/_docs/learn/dsl/review-project.md +2 -2
  32. data/docs/_docs/learn/yaml/delete.md +10 -2
  33. data/docs/_docs/learn/yaml/review-project.md +2 -2
  34. data/docs/_docs/patterns/clock-web-worker.md +3 -3
  35. data/docs/_docs/patterns/migrations.md +1 -1
  36. data/docs/_docs/patterns/multiple-envs.md +55 -0
  37. data/docs/_docs/variables.md +23 -0
  38. data/docs/_docs/variables/advanced.md +62 -0
  39. data/docs/_docs/variables/basic.md +137 -0
  40. data/docs/_docs/vs.md +10 -0
  41. data/docs/_docs/vs/custom.md +109 -0
  42. data/docs/_docs/vs/helm.md +243 -0
  43. data/docs/_docs/vs/kustomize.md +167 -0
  44. data/docs/_docs/yaml.md +2 -2
  45. data/docs/_includes/commands.html +2 -2
  46. data/docs/_includes/intro/features.md +11 -0
  47. data/docs/_includes/layering/layers.md +2 -4
  48. data/docs/_includes/sidebar.html +41 -0
  49. data/docs/_includes/vs/article.md +1 -0
  50. data/docs/_includes/vs/kubes/layering.md +10 -0
  51. data/docs/_includes/vs/kubes/structure.md +24 -0
  52. data/docs/_reference/kubes-delete.md +1 -1
  53. data/docs/_reference/kubes-exec.md +17 -1
  54. data/docs/_reference/kubes-init.md +2 -2
  55. data/docs/_reference/kubes-logs.md +2 -1
  56. data/docs/_reference/kubes-new-help.md +15 -0
  57. data/docs/_reference/kubes-new-helper.md +25 -0
  58. data/docs/_reference/kubes-new-resource.md +56 -0
  59. data/docs/_reference/kubes-new-variable.md +20 -0
  60. data/docs/_reference/kubes-new.md +26 -0
  61. data/docs/_reference/kubes-prune.md +22 -0
  62. data/docs/reference.md +2 -0
  63. data/kubes.gemspec +2 -2
  64. data/lib/kubes.rb +5 -3
  65. data/lib/kubes/auth.rb +4 -1
  66. data/lib/kubes/auth/base.rb +21 -0
  67. data/lib/kubes/auth/ecr.rb +1 -15
  68. data/lib/kubes/auth/gcr.rb +24 -0
  69. data/lib/kubes/cli.rb +9 -1
  70. data/lib/kubes/cli/apply.rb +0 -1
  71. data/lib/kubes/cli/build.rb +6 -0
  72. data/lib/kubes/cli/compile.rb +7 -0
  73. data/lib/kubes/cli/deploy.rb +1 -6
  74. data/lib/kubes/cli/exec.rb +5 -1
  75. data/lib/kubes/cli/help/exec.md +15 -0
  76. data/lib/kubes/cli/help/new/helper.md +4 -0
  77. data/lib/kubes/cli/help/new/resource.md +30 -0
  78. data/lib/kubes/cli/init.rb +1 -1
  79. data/lib/kubes/cli/new.rb +15 -0
  80. data/lib/kubes/cli/new/helper.rb +24 -0
  81. data/lib/kubes/cli/new/resource.rb +97 -0
  82. data/lib/kubes/cli/new/variable.rb +16 -0
  83. data/lib/kubes/cli/prune.rb +4 -2
  84. data/lib/kubes/cli/sequence.rb +1 -0
  85. data/lib/kubes/command.rb +7 -0
  86. data/lib/kubes/compiler.rb +19 -21
  87. data/lib/kubes/compiler/decorator/base.rb +1 -1
  88. data/lib/kubes/compiler/dsl/core/base.rb +6 -9
  89. data/lib/kubes/compiler/dsl/syntax/job.rb +217 -0
  90. data/lib/kubes/compiler/layering.rb +21 -7
  91. data/lib/kubes/compiler/shared/custom_variables.rb +38 -0
  92. data/lib/kubes/compiler/shared/helpers.rb +11 -2
  93. data/lib/kubes/compiler/shared/helpers/deprecated.rb +37 -0
  94. data/lib/kubes/compiler/shared/plugin_helpers.rb +14 -0
  95. data/lib/kubes/compiler/strategy.rb +7 -6
  96. data/lib/kubes/compiler/strategy/base.rb +59 -2
  97. data/lib/kubes/compiler/strategy/dsl.rb +0 -29
  98. data/lib/kubes/compiler/strategy/erb.rb +10 -22
  99. data/lib/kubes/compiler/util/normalize.rb +6 -3
  100. data/lib/kubes/compiler/util/yaml_dump.rb +4 -4
  101. data/lib/kubes/config.rb +14 -1
  102. data/lib/kubes/core.rb +6 -0
  103. data/lib/kubes/docker/strategy/image_name.rb +1 -1
  104. data/lib/kubes/hooks/builder.rb +20 -4
  105. data/lib/kubes/hooks/concern.rb +1 -1
  106. data/lib/kubes/kubectl/batch.rb +7 -33
  107. data/lib/kubes/kubectl/ordering.rb +42 -0
  108. data/lib/kubes/plugin.rb +14 -0
  109. data/lib/kubes/util/sh.rb +1 -1
  110. data/lib/kubes/version.rb +1 -1
  111. data/lib/templates/base/.kubes/config.rb.tt +1 -1
  112. data/lib/templates/base/.kubes/config/env/dev.rb +1 -1
  113. data/lib/templates/base/.kubes/config/env/prod.rb +1 -1
  114. data/lib/templates/dsl/.kubes/resources/web/deployment.rb +1 -1
  115. data/lib/templates/new/helper/file.rb +2 -0
  116. data/lib/templates/new/resource/dsl/backend_config.rb +10 -0
  117. data/lib/templates/new/resource/dsl/config_map.rb +5 -0
  118. data/lib/templates/new/resource/dsl/daemon_set.rb +11 -0
  119. data/lib/templates/new/resource/dsl/deployment.rb +4 -0
  120. data/lib/templates/new/resource/dsl/ingress.rb +3 -0
  121. data/lib/templates/new/resource/dsl/job.rb +2 -0
  122. data/lib/templates/new/resource/dsl/managed_certificate.rb +2 -0
  123. data/lib/templates/new/resource/dsl/namespace.rb +2 -0
  124. data/lib/templates/new/resource/dsl/network_policy.rb +7 -0
  125. data/lib/templates/new/resource/dsl/pod.rb +6 -0
  126. data/lib/templates/new/resource/dsl/role.rb +4 -0
  127. data/lib/templates/new/resource/dsl/role_binding.rb +7 -0
  128. data/lib/templates/new/resource/dsl/secret.rb +5 -0
  129. data/lib/templates/new/resource/dsl/service.rb +2 -0
  130. data/lib/templates/new/resource/dsl/service_account.rb +1 -0
  131. data/lib/templates/new/resource/yaml/backend_config.yaml +10 -0
  132. data/lib/templates/new/resource/yaml/config_map.yaml +9 -0
  133. data/lib/templates/new/resource/yaml/daemon_set.yaml +11 -0
  134. data/lib/templates/new/resource/yaml/deployment.yaml +19 -0
  135. data/lib/templates/new/resource/yaml/ingress.yaml +12 -0
  136. data/lib/templates/new/resource/yaml/job.yaml +19 -0
  137. data/lib/templates/new/resource/yaml/managed_certificate.yaml +7 -0
  138. data/lib/templates/new/resource/yaml/namespace.yaml +6 -0
  139. data/lib/templates/new/resource/yaml/network_policy.yaml +20 -0
  140. data/lib/templates/new/resource/yaml/pod.yaml +11 -0
  141. data/lib/templates/new/resource/yaml/role.yaml +13 -0
  142. data/lib/templates/new/resource/yaml/role_binding.yaml +11 -0
  143. data/lib/templates/new/resource/yaml/secret.yaml +9 -0
  144. data/lib/templates/new/resource/yaml/service.yaml +14 -0
  145. data/lib/templates/new/resource/yaml/service_account.yaml +4 -0
  146. data/lib/templates/new/variable/file.rb +1 -0
  147. data/lib/templates/yaml/.kubes/resources/base/all.yaml.tt +2 -0
  148. data/lib/templates/yaml/.kubes/resources/web/deployment.yaml.tt +1 -1
  149. data/spec/fixtures/multiple-files/{deployment-1.rb → .kubes/resources/web/deployment-1.rb} +0 -0
  150. data/spec/fixtures/multiple-files/{deployment-2.rb → .kubes/resources/web/deployment-2.rb} +0 -0
  151. data/spec/fixtures/project/.kubes/resources/{deployment.rb → web/deployment.rb} +0 -0
  152. data/spec/fixtures/project/.kubes/resources/{foobar.rb → web/empty.rb} +0 -0
  153. data/spec/fixtures/project/.kubes/resources/{service.rb → web/service.rb} +1 -1
  154. data/spec/fixtures/syntax/{network_policy.rb → .kubes/resources/web/network_policy.rb} +0 -0
  155. data/spec/fixtures/syntax/{pod.rb → .kubes/resources/web/pod.rb} +0 -0
  156. data/spec/kubes/cli/prune_spec.rb +1 -0
  157. data/spec/kubes/compiler/strategy/dsl_spec.rb +2 -2
  158. data/spec/kubes/compiler_spec.rb +6 -2
  159. data/spec/kubes/dsl/network_policy_spec.rb +1 -1
  160. data/spec/kubes/dsl/pod_spec.rb +1 -1
  161. metadata +98 -25
@@ -2,7 +2,7 @@ module Kubes::Hooks
2
2
  module Concern
3
3
  # options example: {:name=>"apply", :file=>".kubes/output/web/service.yaml"}
4
4
  def run_hooks(file, options={}, &block)
5
- hooks = Kubes::Hooks::Builder.new("#{Kubes.root}/.kubes/config/hooks/#{file}", options)
5
+ hooks = Kubes::Hooks::Builder.new(file, options)
6
6
  hooks.build # build hooks
7
7
  hooks.run_hooks(&block)
8
8
  end
@@ -22,10 +22,17 @@ class Kubes::Kubectl
22
22
  Kubes::Kubectl.run(@name, @options.merge(file: file))
23
23
  end
24
24
  end
25
+ prune # important to call within run_hooks for case of GKE IP whitelisting
25
26
  end
26
27
  end
27
28
  end
28
29
 
30
+ def prune
31
+ return unless @name == "apply" # only run for apply
32
+ return unless Kubes.config.auto_prune # prune old secrets and config maps
33
+ Kubes::CLI::Prune.new(@options.merge(yes: true, quiet: true)).run
34
+ end
35
+
29
36
  def switch_context(&block)
30
37
  kubectl = Kubes.config.kubectl
31
38
  context = kubectl.context
@@ -49,38 +56,5 @@ class Kubes::Kubectl
49
56
  end
50
57
  result
51
58
  end
52
-
53
- # kubes apply # {role: nil, resource: nil}
54
- # kubes apply clock # {role: "clock", resource: nil}
55
- # kubes apply clock deployment # {role: "clock", resource: "deployment"}
56
- def search_expr
57
- role, resource = @options[:role], @options[:resource]
58
- if role && resource
59
- "#{Kubes.root}/.kubes/output/#{role}/#{resource}.yaml"
60
- elsif role
61
- "#{Kubes.root}/.kubes/output/#{role}/*.yaml"
62
- else
63
- "#{Kubes.root}/.kubes/output/**/*.yaml"
64
- end
65
- end
66
-
67
- def files
68
- files = []
69
- Dir.glob(search_expr).each do |path|
70
- next unless process?(path)
71
- file = path.sub("#{Kubes.root}/", '')
72
- files << file
73
- end
74
- files
75
- end
76
-
77
- def process?(path)
78
- consider?(path) && two_levels_deep?(path)
79
- end
80
-
81
- def two_levels_deep?(path)
82
- rel_path = path.sub(%r{.*\.kubes/output/},'')
83
- rel_path.split('/').size == 2
84
- end
85
59
  end
86
60
  end
@@ -35,5 +35,47 @@ class Kubes::Kubectl
35
35
  i = index.to_s.rjust(3, "0") # pad with 0
36
36
  "#{i}-#{value}" # append name so that terms with same index get order alphabetically
37
37
  end
38
+
39
+ # kubes apply # {role: nil, resource: nil}
40
+ # kubes apply clock # {role: "clock", resource: nil}
41
+ # kubes apply clock deployment # {role: "clock", resource: "deployment"}
42
+ def search_expr
43
+ role, resource = @options[:role], @options[:resource]
44
+ if role && resource
45
+ "#{Kubes.root}/.kubes/output/#{role}/#{resource}.yaml"
46
+ elsif role
47
+ "#{Kubes.root}/.kubes/output/#{role}/*.yaml"
48
+ else
49
+ "#{Kubes.root}/.kubes/output/**/*.yaml"
50
+ end
51
+ end
52
+
53
+ def files
54
+ files = []
55
+ Dir.glob(search_expr).each do |path|
56
+ next unless process?(path)
57
+ file = path.sub("#{Kubes.root}/", '')
58
+ files << file
59
+ end
60
+ files
61
+ end
62
+
63
+ # Only considering files 2 layers deep. So:
64
+ #
65
+ # Yes = web/deployment.yaml
66
+ # No = web/deployment/dev.yaml
67
+ #
68
+ def process?(path)
69
+ if Kubes.kustomize?
70
+ File.file?(path)
71
+ else
72
+ consider?(path) && two_levels_deep?(path)
73
+ end
74
+ end
75
+
76
+ def two_levels_deep?(path)
77
+ rel_path = path.sub(%r{.*\.kubes/(resources|output)/},'')
78
+ rel_path.split('/').size == 2
79
+ end
38
80
  end
39
81
  end
@@ -0,0 +1,14 @@
1
+ module Kubes
2
+ module Plugin
3
+ @@plugins = []
4
+ def plugins
5
+ @@plugins
6
+ end
7
+
8
+ def register(klass)
9
+ @@plugins << klass
10
+ end
11
+
12
+ extend self
13
+ end
14
+ end
@@ -32,7 +32,7 @@ module Kubes::Util
32
32
 
33
33
  def sh_capture(command, options={})
34
34
  exit_on_fail = options[:exit_on_fail].nil? ? true : options[:exit_on_fail]
35
- logger.info "=> #{command}" if options[:show_command]
35
+ logger.debug "=> #{command}"
36
36
  out = `#{command}`.strip
37
37
  unless $?.success?
38
38
  logger.error "ERROR: running #{command}".color(:red)
@@ -1,3 +1,3 @@
1
1
  module Kubes
2
- VERSION = "0.4.7"
2
+ VERSION = "0.6.2"
3
3
  end
@@ -2,7 +2,7 @@ Kubes.configure do |config|
2
2
  config.repo = "<%= @options[:repo] %>"
3
3
  config.logger.level = "info"
4
4
  # auto-switching
5
- # config.kubectl.context = "dev-services"
5
+ # config.kubectl.context = "dev-cluster"
6
6
  # config.kubectl.context_keep = true # keep context after switching
7
7
  # config.kubectl.exit_on_fail_for_apply = true # whether or not continue if the kubectl command fails
8
8
  # config.kubectl.exit_on_fail_for_delete = false # whether or not continue if the kubectl command fails
@@ -2,5 +2,5 @@
2
2
  #
3
3
  # Example:
4
4
  # Kubes.configure do |config|
5
- # config.kubectl.context = "dev-services"
5
+ # config.kubectl.context = "dev-cluster"
6
6
  # end
@@ -2,5 +2,5 @@
2
2
  #
3
3
  # Example:
4
4
  # Kubes.configure do |config|
5
- # config.kubectl.context = "prod-services"
5
+ # config.kubectl.context = "prod-cluster"
6
6
  # end
@@ -2,7 +2,7 @@ name "web"
2
2
  labels(role: "web")
3
3
 
4
4
  replicas 1 # overridden on a env basis
5
- image built_image # IE: user/<%= app %>:kubes-2020-06-13T19-55-16-43afc6e
5
+ image docker_image # IE: user/<%= app %>:kubes-2020-06-13T19-55-16-43afc6e
6
6
 
7
7
  # revisionHistoryLimit 1 # uncomment to reduce old ReplicaSets, default is 10 https://bit.ly/3hqrzyP
8
8
  # maxUnavailable 25
@@ -0,0 +1,2 @@
1
+ module <%= underscored_name.camelize %>
2
+ end
@@ -0,0 +1,10 @@
1
+ name "<%= app %>"
2
+ spec(
3
+ timeoutSec: 40,
4
+ connectionDraining: {
5
+ drainingTimeoutSec: 60,
6
+ },
7
+ sessionAffinity: {
8
+ affinityType: "CLIENT_IP",
9
+ }
10
+ )
@@ -0,0 +1,5 @@
1
+ name "<%= app %>"
2
+ data(
3
+ KEY1: "value1",
4
+ KEY2: "value2",
5
+ )
@@ -0,0 +1,11 @@
1
+ name "<%= app %>"
2
+ labels("app": "<%= app %>")
3
+ updateStrategy(
4
+ type: "RollingUpdate",
5
+ rollingUpdate: {
6
+ maxUnavailable: 1
7
+ }
8
+ )
9
+ # annotations(
10
+ # "*scheduler**.alpha.kubernetes.io/critical-pod": '*'
11
+ # )
@@ -0,0 +1,4 @@
1
+ name "<%= role %>"
2
+ labels(role: "<%= role %>")
3
+ replicas 2
4
+ image "<%%= docker_image %>"
@@ -0,0 +1,3 @@
1
+ name "<%= app %>"
2
+ serviceName "<%= app %>"
3
+ servicePort 80
@@ -0,0 +1,2 @@
1
+ name "<%= app %>"
2
+ image(docker_image)
@@ -0,0 +1,2 @@
1
+ name "cert1"
2
+ domains(["cert1.example.com"])
@@ -0,0 +1,2 @@
1
+ name "<%= app %>"
2
+ labels(app: "<%= app %>") # useful with NetworkPolicy
@@ -0,0 +1,7 @@
1
+ name "web"
2
+ labels(app: "<%= app %>") # IE: backend
3
+ namespace "<%= app %>" # IE: backend
4
+
5
+ matchLabels(app: "<%= app %>", role: "<%= role %>") # IE: app: backend
6
+ fromNamespace(app: "<%= app %>") # IE: app: frontend
7
+ fromPod(app: "<%= app %>") # IE: backend
@@ -0,0 +1,6 @@
1
+ name "<%= app %>"
2
+ containers([
3
+ image: docker_image,
4
+ command: ["sleep", "3600"],
5
+ name: "<%= app %>",
6
+ ])
@@ -0,0 +1,4 @@
1
+ name "<%= app %>"
2
+ apiGroups([""])
3
+ resources(["pods"])
4
+ verbs(["get", "watch", "list"])
@@ -0,0 +1,7 @@
1
+ name "<%= app %>"
2
+
3
+ subjects([
4
+ {kind: "User", name: "me@email.com"},
5
+ ])
6
+
7
+ roleName "<%= app %>"
@@ -0,0 +1,5 @@
1
+ name "<%= app %>"
2
+ data(
3
+ username: base64("user"),
4
+ password: base64("pass"),
5
+ )
@@ -0,0 +1,2 @@
1
+ name "<%= app %>"
2
+ labels(role: "<%= role %>")
@@ -0,0 +1 @@
1
+ name "<%= app %>"
@@ -0,0 +1,10 @@
1
+ apiVersion: cloud.google.com/v1
2
+ kind: BackendConfig
3
+ metadata:
4
+ name: <%= app %>
5
+ spec:
6
+ timeoutSec: 40
7
+ connectionDraining:
8
+ drainingTimeoutSec: 60
9
+ sessionAffinity:
10
+ affinityType: CLIENT_IP
@@ -0,0 +1,9 @@
1
+ apiVersion: v1
2
+ kind: ConfigMap
3
+ metadata:
4
+ name: <%= app %>
5
+ labels:
6
+ app: <%= app %>
7
+ data:
8
+ KEY1: value1
9
+ KEY2: value2
@@ -0,0 +1,11 @@
1
+ apiVersion: apps/v1
2
+ kind: DaemonSet
3
+ metadata:
4
+ name: <%= app %>
5
+ labels:
6
+ app: <%= app %>
7
+ spec:
8
+ updateStrategy:
9
+ type: RollingUpdate
10
+ rollingUpdate:
11
+ maxUnavailable: 1
@@ -0,0 +1,19 @@
1
+ apiVersion: apps/v1
2
+ kind: Deployment
3
+ metadata:
4
+ name: <%= role %>
5
+ labels:
6
+ role: <%= role %>
7
+ spec:
8
+ replicas: 1 # overridden on a env basis
9
+ selector:
10
+ matchLabels:
11
+ role: <%= role %>
12
+ template:
13
+ metadata:
14
+ labels:
15
+ role: <%= role %>
16
+ spec:
17
+ containers:
18
+ - name: <%= role %>
19
+ image: <%%= docker_image %>
@@ -0,0 +1,12 @@
1
+ apiVersion: networking.k8s.io/v1beta1
2
+ kind: Ingress
3
+ metadata:
4
+ name: <%= role %>
5
+ spec:
6
+ rules:
7
+ - http:
8
+ paths:
9
+ - path: "/*"
10
+ backend:
11
+ serviceName: <%= role %>
12
+ servicePort: 80
@@ -0,0 +1,19 @@
1
+ apiVersion: batch/v1
2
+ kind: Job
3
+ metadata:
4
+ name: <%= app %>
5
+ spec:
6
+ template:
7
+ spec:
8
+ restartPolicy: Never
9
+ serviceAccountName: <%= app %>
10
+ containers:
11
+ - name: <%= app %>
12
+ image: <%%= docker_image %>
13
+ command: ["uptime"] # IE: ["bin/job/migrate.sh"]
14
+ # envFrom:
15
+ # - secretRef:
16
+ # name: <%= app %>
17
+ # - configMapRef:
18
+ # name: <%= app %>
19
+ backoffLimit: 1
@@ -0,0 +1,7 @@
1
+ apiVersion: networking.gke.io/v1beta2
2
+ kind: ManagedCertificate
3
+ metadata:
4
+ name: cert1
5
+ spec:
6
+ domains:
7
+ - cert1.example.com
@@ -0,0 +1,6 @@
1
+ apiVersion: v1
2
+ kind: Namespace
3
+ metadata:
4
+ name: <%= app %>-<%%= Kubes.env %>
5
+ labels:
6
+ app: <%= app %>
@@ -0,0 +1,20 @@
1
+ apiVersion: networking.k8s.io/v1
2
+ kind: NetworkPolicy
3
+ metadata:
4
+ name: <%= role %>
5
+ labels:
6
+ app: <%= app %> # IE: backend
7
+ namespace: <%= app %> # IE: backend
8
+ spec:
9
+ podSelector:
10
+ matchLabels:
11
+ app: <%= app %> # IE: backend
12
+ role: <%= role %>
13
+ ingress:
14
+ - from:
15
+ - namespaceSelector:
16
+ matchLabels:
17
+ app: <%= app %> # IE: frontend
18
+ - podSelector:
19
+ matchLabels:
20
+ app: <%= app %> # IE: backend
@@ -0,0 +1,11 @@
1
+ apiVersion: v1
2
+ kind: Pod
3
+ metadata:
4
+ name: <%= app %>
5
+ spec:
6
+ containers:
7
+ - image: <%%= docker_image %>
8
+ command:
9
+ - sleep
10
+ - '3600'
11
+ name: <%= app %>
@@ -0,0 +1,13 @@
1
+ apiVersion: rbac.authorization.k8s.io/v1
2
+ kind: Role
3
+ metadata:
4
+ name: <%= app %>
5
+ rules:
6
+ - apiGroups:
7
+ - ''
8
+ resources:
9
+ - pods
10
+ verbs:
11
+ - get
12
+ - watch
13
+ - list
@@ -0,0 +1,11 @@
1
+ apiVersion: rbac.authorization.k8s.io/v1
2
+ kind: RoleBinding
3
+ metadata:
4
+ name: <%= app %>
5
+ roleRef:
6
+ apiGroup: rbac.authorization.k8s.io
7
+ kind: Role
8
+ name: <%= app %>
9
+ subjects:
10
+ - kind: User
11
+ name: me@email.com