kubes 0.4.7 → 0.6.2

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.
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