kubes 0.5.0 → 0.6.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.
Files changed (125) hide show
  1. checksums.yaml +4 -4
  2. data/.gcloudignore +22 -0
  3. data/.gitignore +1 -1
  4. data/CHANGELOG.md +22 -0
  5. data/Dockerfile +6 -6
  6. data/Dockerfile.alpine +20 -0
  7. data/README.md +54 -8
  8. data/docker/install/docker.sh +8 -0
  9. data/docker/install/gcloud.sh +18 -0
  10. data/docker/install/kubectl.sh +4 -0
  11. data/docs/_docs/config/hooks/kubes.md +1 -0
  12. data/docs/_docs/config/reference.md +1 -0
  13. data/docs/_docs/dsl/multiple-resources.md +3 -1
  14. data/docs/_docs/dsl/resources/secret.md +19 -2
  15. data/docs/_docs/generators.md +4 -4
  16. data/docs/_docs/helpers.md +16 -2
  17. data/docs/_docs/helpers/aws/advanced.md +10 -0
  18. data/docs/_docs/helpers/aws/advanced/secrets.md +131 -0
  19. data/docs/_docs/helpers/aws/advanced/ssm.md +78 -0
  20. data/docs/_docs/helpers/aws/secrets.md +18 -88
  21. data/docs/_docs/helpers/aws/ssm.md +20 -38
  22. data/docs/_docs/helpers/google/advanced.md +10 -0
  23. data/docs/_docs/helpers/google/advanced/secrets.md +78 -0
  24. data/docs/_docs/helpers/google/gke.md +89 -0
  25. data/docs/_docs/helpers/google/secrets.md +18 -27
  26. data/docs/_docs/intro.md +2 -11
  27. data/docs/_docs/intro/how-kubes-works.md +7 -11
  28. data/docs/_docs/layering.md +2 -0
  29. data/docs/_docs/layering/mix.md +99 -0
  30. data/docs/_docs/patterns/multiple-envs.md +55 -0
  31. data/docs/_docs/variables.md +23 -0
  32. data/docs/_docs/variables/advanced.md +62 -0
  33. data/docs/_docs/variables/basic.md +137 -0
  34. data/docs/_docs/vs.md +10 -0
  35. data/docs/_docs/vs/custom.md +109 -0
  36. data/docs/_docs/vs/helm.md +243 -0
  37. data/docs/_docs/vs/kustomize.md +167 -0
  38. data/docs/_includes/intro/features.md +11 -0
  39. data/docs/_includes/layering/layers.md +2 -4
  40. data/docs/_includes/sidebar.html +39 -0
  41. data/docs/_includes/vs/article.md +1 -0
  42. data/docs/_includes/vs/kubes/layering.md +10 -0
  43. data/docs/_includes/vs/kubes/structure.md +24 -0
  44. data/docs/_reference/kubes-new-help.md +15 -0
  45. data/docs/_reference/kubes-new-helper.md +25 -0
  46. data/docs/_reference/kubes-new-resource.md +56 -0
  47. data/docs/_reference/kubes-new-variable.md +20 -0
  48. data/docs/_reference/kubes-new.md +6 -38
  49. data/kubes.gemspec +2 -2
  50. data/lib/kubes.rb +4 -3
  51. data/lib/kubes/auth.rb +13 -1
  52. data/lib/kubes/auth/base.rb +21 -0
  53. data/lib/kubes/auth/ecr.rb +1 -15
  54. data/lib/kubes/auth/gcr.rb +24 -0
  55. data/lib/kubes/cli/apply.rb +0 -1
  56. data/lib/kubes/cli/help/new/helper.md +4 -0
  57. data/lib/kubes/cli/help/{new.md → new/resource.md} +3 -3
  58. data/lib/kubes/cli/new.rb +12 -94
  59. data/lib/kubes/cli/new/helper.rb +24 -0
  60. data/lib/kubes/cli/new/resource.rb +97 -0
  61. data/lib/kubes/cli/new/variable.rb +16 -0
  62. data/lib/kubes/cli/prune.rb +4 -2
  63. data/lib/kubes/command.rb +1 -1
  64. data/lib/kubes/compiler/decorator/base.rb +1 -1
  65. data/lib/kubes/compiler/dsl/core/base.rb +6 -9
  66. data/lib/kubes/compiler/layering.rb +21 -7
  67. data/lib/kubes/compiler/shared/custom_variables.rb +38 -0
  68. data/lib/kubes/compiler/shared/plugin_helpers.rb +14 -0
  69. data/lib/kubes/compiler/strategy.rb +7 -6
  70. data/lib/kubes/compiler/strategy/base.rb +59 -2
  71. data/lib/kubes/compiler/strategy/dsl.rb +0 -29
  72. data/lib/kubes/compiler/strategy/erb.rb +10 -22
  73. data/lib/kubes/compiler/util/normalize.rb +6 -3
  74. data/lib/kubes/compiler/util/yaml_dump.rb +4 -4
  75. data/lib/kubes/config.rb +14 -0
  76. data/lib/kubes/hooks/builder.rb +20 -5
  77. data/lib/kubes/hooks/concern.rb +1 -1
  78. data/lib/kubes/kubectl/batch.rb +7 -0
  79. data/lib/kubes/plugin.rb +14 -0
  80. data/lib/kubes/util/sh.rb +1 -1
  81. data/lib/kubes/version.rb +1 -1
  82. data/lib/templates/new/helper/file.rb +2 -0
  83. data/lib/templates/new/{dsl → resource/dsl}/backend_config.rb +0 -0
  84. data/lib/templates/new/{dsl → resource/dsl}/config_map.rb +0 -0
  85. data/lib/templates/new/{dsl → resource/dsl}/daemon_set.rb +0 -0
  86. data/lib/templates/new/{dsl → resource/dsl}/deployment.rb +0 -0
  87. data/lib/templates/new/{dsl → resource/dsl}/ingress.rb +0 -0
  88. data/lib/templates/new/{dsl → resource/dsl}/job.rb +0 -0
  89. data/lib/templates/new/{dsl → resource/dsl}/managed_certificate.rb +0 -0
  90. data/lib/templates/new/{dsl → resource/dsl}/namespace.rb +0 -0
  91. data/lib/templates/new/{dsl → resource/dsl}/network_policy.rb +0 -0
  92. data/lib/templates/new/{dsl → resource/dsl}/pod.rb +0 -0
  93. data/lib/templates/new/{dsl → resource/dsl}/role.rb +0 -0
  94. data/lib/templates/new/{dsl → resource/dsl}/role_binding.rb +0 -0
  95. data/lib/templates/new/{dsl → resource/dsl}/secret.rb +0 -0
  96. data/lib/templates/new/{dsl → resource/dsl}/service.rb +0 -0
  97. data/lib/templates/new/{dsl → resource/dsl}/service_account.rb +0 -0
  98. data/lib/templates/new/{yaml → resource/yaml}/backend_config.yaml +0 -0
  99. data/lib/templates/new/{yaml → resource/yaml}/config_map.yaml +0 -0
  100. data/lib/templates/new/{yaml → resource/yaml}/daemon_set.yaml +0 -0
  101. data/lib/templates/new/{yaml → resource/yaml}/deployment.yaml +0 -1
  102. data/lib/templates/new/{yaml → resource/yaml}/ingress.yaml +0 -0
  103. data/lib/templates/new/{yaml → resource/yaml}/job.yaml +0 -0
  104. data/lib/templates/new/{yaml → resource/yaml}/managed_certificate.yaml +0 -0
  105. data/lib/templates/new/{yaml → resource/yaml}/namespace.yaml +0 -0
  106. data/lib/templates/new/{yaml → resource/yaml}/network_policy.yaml +0 -0
  107. data/lib/templates/new/{yaml → resource/yaml}/pod.yaml +0 -0
  108. data/lib/templates/new/{yaml → resource/yaml}/role.yaml +0 -0
  109. data/lib/templates/new/{yaml → resource/yaml}/role_binding.yaml +0 -0
  110. data/lib/templates/new/{yaml → resource/yaml}/secret.yaml +0 -0
  111. data/lib/templates/new/{yaml → resource/yaml}/service.yaml +0 -0
  112. data/lib/templates/new/{yaml → resource/yaml}/service_account.yaml +0 -0
  113. data/lib/templates/new/variable/file.rb +1 -0
  114. data/spec/fixtures/multiple-files/{deployment-1.rb → .kubes/resources/web/deployment-1.rb} +0 -0
  115. data/spec/fixtures/multiple-files/{deployment-2.rb → .kubes/resources/web/deployment-2.rb} +0 -0
  116. data/spec/fixtures/project/.kubes/resources/{deployment.rb → web/deployment.rb} +0 -0
  117. data/spec/fixtures/project/.kubes/resources/{foobar.rb → web/empty.rb} +0 -0
  118. data/spec/fixtures/project/.kubes/resources/{service.rb → web/service.rb} +1 -1
  119. data/spec/fixtures/syntax/{network_policy.rb → .kubes/resources/web/network_policy.rb} +0 -0
  120. data/spec/fixtures/syntax/{pod.rb → .kubes/resources/web/pod.rb} +0 -0
  121. data/spec/kubes/compiler/strategy/dsl_spec.rb +2 -2
  122. data/spec/kubes/compiler_spec.rb +1 -1
  123. data/spec/kubes/dsl/network_policy_spec.rb +1 -1
  124. data/spec/kubes/dsl/pod_spec.rb +1 -1
  125. metadata +95 -56
@@ -4,17 +4,9 @@ nav_text: Secrets
4
4
  categories: helpers-google
5
5
  ---
6
6
 
7
- Set up a [Kubes hook](https://kubes.guru/docs/config/hooks/kubes/).
7
+ The `google_secret` helper fetches secret data from Google Secrets.
8
8
 
9
- .kubes/config/hooks/kubes.rb
10
-
11
- ```ruby
12
- before("compile",
13
- execute: KubesGoogle::Secrets.new(upcase: true, prefix: 'projects/686010496118/secrets/demo-dev-')
14
- )
15
- ```
16
-
17
- Then set the secrets in the YAML:
9
+ ## Example
18
10
 
19
11
  .kubes/resources/shared/secret.yaml
20
12
 
@@ -26,18 +18,17 @@ metadata:
26
18
  labels:
27
19
  app: demo
28
20
  data:
29
- <% KubesGoogle::Secrets.data.each do |k,v| -%>
30
- <%= k %>: <%= base64(v) %>
31
- <% end -%>
21
+ PASS: <%= google_secret("demo-#{Kubes.env}-PASS") %>
22
+ USER: <%= google_secret("demo-#{Kubes.env}-USER") %>
32
23
  ```
33
24
 
34
- This results in Google secrets with the prefix the `demo-dev-` being added to the Kubernetes secret data. The values are automatically base64 encoded.
25
+ The values are automatically base64 encoded.
35
26
 
36
27
  For example if you have these secret values:
37
28
 
38
- $ gcloud secrets versions access latest --secret demo-dev-db_user
29
+ $ gcloud secrets versions access latest --secret demo-dev-USER
39
30
  test1
40
- $ gcloud secrets versions access latest --secret demo-dev-db_pass
31
+ $ gcloud secrets versions access latest --secret demo-dev-PASS
41
32
  test2
42
33
  $
43
34
 
@@ -52,8 +43,8 @@ metadata:
52
43
  apiVersion: v1
53
44
  kind: Secret
54
45
  data:
55
- db_pass: dGVzdDEK
56
- db_user: dGVzdDIK
46
+ PASS: dGVzdDEK
47
+ USER: dGVzdDIK
57
48
  ```
58
49
 
59
50
  ## Variables
@@ -62,15 +53,15 @@ These environment variables can be set:
62
53
 
63
54
  Name | Description
64
55
  ---|---
65
- GCP_SECRET_PREFIX | Prefixed used to list and filter Google secrets. IE: `projects/686010496118/secrets/demo-dev-`.
66
- GOOGLE_PROJECT | Google project id.
56
+ GOOGLE_PROJECT | Google project id. This is required.
67
57
 
68
- Secrets#initialize options:
58
+ ## Base64 Option
69
59
 
70
- Variable | Description | Default
71
- ---|---|---
72
- base64 | Automatically base64 encode the values. | false
73
- upcase | Automatically upcase the Kubernetes secret data keys. | false
74
- prefix | Prefixed used to list and filter Google secrets. IE: `projects/686010496118/secrets/demo-dev-`. Can also be set with the `GCP_SECRET_PREFIX` env variable. The env variable takes the highest precedence. | nil
60
+ The value is automatically base64 encoded. You can set the `base64` option to turn on and off the automated base64 encoding.
61
+
62
+ ```ruby
63
+ google_secret("demo-#{Kubes.env}-USER", base64: true) # default is base64=true
64
+ google_secret("demo-#{Kubes.env}-PASS", base64: false)
65
+ ```
75
66
 
76
- {% include helpers/base64.md %}
67
+ {% include helpers/base64.md %}
@@ -6,15 +6,6 @@ title: What is Kubes?
6
6
 
7
7
  <div class="video-box"><div class="video-container"><iframe src="https://www.youtube.com/embed/M4zHL0mfKNU" frameborder="0" allowfullscreen=""></iframe></div></div>
8
8
 
9
- ## Features:
9
+ ## Features
10
10
 
11
- * Automation: [Builds the Docker image]({% link _docs/config/docker.md %}) and updates the compiled YAML files
12
- * Syntactic Sugar: Use an [ERB/YAML]({% link _docs/yaml.md %}) or a [DSL]({% link _docs/dsl.md %}) to write your Kubernetes YAML files. You can use a mix of DSL and YAML definitions in the `.kubes/resources` folder.
13
- * Layering: Use the same Kubernetes YAML to build multiple environments like dev and prod with [layering]({% link _docs/layering.md %}).
14
- * Generators: Kubes ships with a few generators to help you get building with Kubernetes quickly. See: [Generator Docs]({% link _docs/generators.md %}).
15
- * CLI Customizations: You can customize the [cli args]({% link _docs/config/args/kubectl.md %}).
16
- * Hooks: You can also run [hooks]({% link _docs/config/hooks.md %}) before and after [kubes]({% link _docs/config/hooks/kubes.md %}) and [kubectl]({% link _docs/config/hooks/kubectl.md %}) commands.
17
- * Automated Suffix Hashes: Automatically appends a suffix hash to ConfigMap and Secret resources. More details in [ConfigMap]({% link _docs/dsl/resources/config_map.md %}) and [Secret]({% link _docs/dsl/resources/secret.md %}) docs.
18
- * Kustomize Support: If you’re a kustomization user, you can use it with Kubes. More details in [Kustomize Support Docs]({% link _docs/misc/kustomize.md %}).
19
- * Auto Context Switching: Map dev to a specific kubectl context and prod to another kubectl context and Kubes can switch them automatically so you won't have to remember. More details in [Auto Context Docs]({% link _docs/misc/auto-context.md %}).
20
- * Ordering: Kubes run kubectl apply to create resources in the [correct order]({% link _docs/intro/ordering.md %}). For deleting, it kubes will run `kubectl delete` in the correct reverse order. The order is also [customizable]({% link _docs/intro/ordering/custom.md %}).
11
+ {% include intro/features.md %}
@@ -10,20 +10,16 @@ In fact, you can use Kubes to build the files first, and then run `kubectl` dire
10
10
  kubes docker push
11
11
  kubes compile # compiles the .kubes/resources files to .kubes/output
12
12
 
13
- Now, use `kubectl` directly. This will apply all the files:
13
+ Now, use `kubectl` directly and apply them in the proper order:
14
14
 
15
- kubectl apply --recursive -f .kubes/output
16
-
17
- You can also selectively apply specific files:
18
-
19
- kubectl apply -f .kubes/output/web/deployment.yaml
15
+ kubectl apply -f .kubes/output/shared/namespace.yaml
20
16
  kubectl apply -f .kubes/output/web/service.yaml
17
+ kubectl apply -f .kubes/output/web/deployment.yaml
21
18
 
22
- You can also apply with kubes. This will compile the files automatically also.
23
-
24
- kubes apply
25
-
26
- The deploy command, does all 3 steps: builds the docker image, compiles the `.kubes/resources` files, and runs kubectl apply.
19
+ The deploy command simpifily does all 3 steps: build, compile, and apply.
27
20
 
28
21
  kubes deploy
29
22
 
23
+ You can also run the `kubectl apply` only. The `kube apply` command compiles but will skip the docker build stage if it's already been built.
24
+
25
+ kubes apply
@@ -6,3 +6,5 @@ Kubes supports layering files together so you can use the same Kubernetes files
6
6
 
7
7
  * [YAML Layering]({% link _docs/layering/yaml.md %})
8
8
  * [DSL Layering]({% link _docs/layering/dsl.md %})
9
+ * [Mix Layering]({% link _docs/layering/mix.md %})
10
+ * [Merge Behavior]({% link _docs/layering/merge.md %})
@@ -0,0 +1,99 @@
1
+ ---
2
+ title: Mixed Layering
3
+ ---
4
+
5
+ You can mix and match the YAML and DSL forms together and layering still works.
6
+
7
+ ## Project Structure
8
+
9
+ Here's an example structure, so we can understand how layering works.
10
+
11
+ .kubes/resources/
12
+ ├── base
13
+ │ ├── all.yaml
14
+ │ └── deployment.yaml
15
+ └── web
16
+ ├── deployment
17
+ │ ├── dev.yaml
18
+ │ └── prod.yaml
19
+ ├── deployment.rb
20
+ └── service.yaml
21
+
22
+ Notice, how deployment.rb is defined as a DSL. The layers will still be merged like so:
23
+
24
+ .kubes/resources/base/all.yaml
25
+ .kubes/resources/base/deployment.yaml
26
+ .kubes/resources/web/deployment.rb
27
+ .kubes/resources/web/deployment/dev.rb
28
+
29
+ ## Resources Files
30
+
31
+ .kubes/resources/base/all.yaml
32
+
33
+ ```yaml
34
+ metadata:
35
+ namespace: demo-<%= Kubes.env %>
36
+ labels:
37
+ app: demo
38
+ ```
39
+
40
+ .kubes/resources/base/deployment.yaml
41
+
42
+ ```yaml
43
+ metadata:
44
+ labels:
45
+ app: demo
46
+ spec:
47
+ selector:
48
+ matchLabels:
49
+ app: demo
50
+ template:
51
+ metadata:
52
+ labels:
53
+ app: demo
54
+ ```
55
+
56
+ .kubes/resources/web/deployment.rb
57
+
58
+ ```ruby
59
+ name "web"
60
+ labels(role: "web")
61
+ image "nginx"
62
+ ```
63
+
64
+ .kubes/resources/web/deployment/dev.yaml
65
+
66
+ ```yaml
67
+ spec:
68
+ replicas: 2
69
+ ```
70
+
71
+ ## Output
72
+
73
+ The result is the merged layered files.
74
+
75
+ ```yaml
76
+ metadata:
77
+ namespace: demo-dev
78
+ labels:
79
+ app: demo
80
+ role: web
81
+ name: web
82
+ spec:
83
+ selector:
84
+ matchLabels:
85
+ app: demo
86
+ role: web
87
+ template:
88
+ metadata:
89
+ labels:
90
+ app: demo
91
+ role: web
92
+ spec:
93
+ containers:
94
+ - image: nginx
95
+ name: web
96
+ replicas: 2
97
+ apiVersion: apps/v1
98
+ kind: Deployment
99
+ ```
@@ -0,0 +1,55 @@
1
+ ---
2
+ title: Multiple Enviroments with Layering
3
+ nav_text: Multiple Enviroments
4
+ categories: patterns
5
+ ---
6
+
7
+ You can use Kubes to easily create multiple enviroments with the same YAML configs. This is thanks to [Kubes Layering]({% link _docs/layering.md %}). We'll walk through an example to help understand how it works.
8
+
9
+ ## Creating Multiple Enviroments
10
+
11
+ To create multiple enviroments like dev and prod just change KUBES_ENV. Example:
12
+
13
+ KUBES_ENV=dev kubes deploy
14
+ KUBES_ENV=prod kubes deploy
15
+
16
+ Different env files will be layered and merged to produce YAML files specific to each environment.
17
+
18
+ ## Project Structure
19
+
20
+ Here's an example structure, so we can understand how layering works to create multiple enviroments.
21
+
22
+ .kubes/resources/
23
+ ├── base
24
+ │ ├── all.yaml
25
+ │ └── deployment.yaml
26
+ └── web
27
+ ├── deployment
28
+ │ ├── dev.yaml
29
+ │ └── prod.yaml
30
+ ├── deployment.yaml
31
+ └── service.yaml
32
+
33
+ ## Concrete Example
34
+
35
+ Let's look at a concrete web/deployment.yaml.
36
+
37
+ Here are the files that get layered when `KUBES_ENV=dev`:
38
+
39
+ .kubes/resources/base/all.yaml
40
+ .kubes/resources/base/deployment.yaml
41
+ .kubes/resources/web/deployment.yaml
42
+ .kubes/resources/web/deployment/dev.yaml
43
+
44
+ And when `KUBES_ENV=prod`:
45
+
46
+ .kubes/resources/base/all.yaml
47
+ .kubes/resources/base/deployment.yaml
48
+ .kubes/resources/web/deployment.yaml
49
+ .kubes/resources/web/deployment/prod.yaml
50
+
51
+ Layering allows us to have common settings that are processed before your main `.kubes/resources/web/deployment.yaml` YAML manifest. And then add **environment** specific YAML files that get merged.
52
+
53
+ ## Variables and Helpers
54
+
55
+ Additional, you can use variables and helpers to provide environment specific values.
@@ -0,0 +1,23 @@
1
+ ---
2
+ title: Variables
3
+ ---
4
+
5
+ You can set variables to be made available to the templates. Generally, it is recommended to use Basic layering.
6
+
7
+ {% assign docs = site.docs | where: "categories","variables" %}
8
+ {% for doc in docs -%}
9
+ * [{{ doc.title }}]({{ doc.url }})
10
+ {% endfor %}
11
+
12
+ ## Generator
13
+
14
+ To help you get started quickly, you can generate starter variable code.
15
+
16
+ $ kubes new variable
17
+ create .kubes/variables/dev.rb
18
+
19
+ .kubes/variables/dev.rb
20
+
21
+ ```ruby
22
+ @example = "dev-value"
23
+ ```
@@ -0,0 +1,62 @@
1
+ ---
2
+ title: Advanced Variables
3
+ nav_text: Advanced
4
+ categories: variables
5
+ ---
6
+
7
+ Basic variables layering should provides enough flexibility and is generally recommended. This page covers more advanced variables layering.
8
+
9
+ ## Advanced Layering Example
10
+
11
+ Here's a more complex structure to demonstrate advanced layering.
12
+
13
+ .kubes/variables
14
+ ├── base
15
+ │ └── deployment.rb
16
+ ├── base.rb
17
+ ├── dev.rb
18
+ ├── prod.rb
19
+ └── web
20
+ ├── deployment
21
+ │ ├── dev.rb
22
+ │ └── prod.rb
23
+ └── deployment.rb
24
+
25
+ ## Concrete Example
26
+
27
+ Let's look at a concrete web/deployment.yaml.
28
+
29
+ Here are the files that get layered when `KUBES_ENV=dev`:
30
+
31
+ .kubes/variables/base.rb
32
+ .kubes/variables/dev.rb
33
+ .kubes/variables/base/deployment.rb
34
+ .kubes/variables/web/deployment.rb
35
+ .kubes/variables/web/deployment/dev.rb
36
+
37
+ And when `KUBES_ENV=prod`:
38
+
39
+ .kubes/variables/base.rb
40
+ .kubes/variables/prod.rb
41
+ .kubes/variables/base/deployment.rb
42
+ .kubes/variables/web/deployment.rb
43
+ .kubes/variables/web/deployment/prod.rb
44
+
45
+ With advanced layering you can target a specific role and kind. So variables are only scoped to the resources you want.
46
+
47
+ ## Full Layering Table
48
+
49
+ Here's a table showing the the full layering.
50
+
51
+ Folder/Pattern | Example
52
+ ------------------|--------------------------------------------
53
+ base.rb | base.rb
54
+ ENV.rb | dev.rb
55
+ base/all.rb | base/all.rb
56
+ base/all/ENV.rb | base/all/dev.rb
57
+ base/KIND.rb | base/deployment.rb
58
+ base/KIND/base.rb | base/deployment/base.rb
59
+ base/KIND/ENV.rb | base/deployment/dev.rb
60
+ ROLE/KIND.rb | web/deployment.rb
61
+ ROLE/KIND/base.rb | web/deployment/base.rb
62
+ ROLE/KIND/ENV.rb | web/deployment/dev.rb
@@ -0,0 +1,137 @@
1
+ ---
2
+ title: Basic Variables
3
+ nav_text: Basic
4
+ categories: variables
5
+ ---
6
+
7
+ ## Basic Layering Example
8
+
9
+ Here's an example variables directory structure:
10
+
11
+ .kubes/variables
12
+ ├── base.rb
13
+ ├── dev.rb
14
+ └── prod.rb
15
+
16
+ base.rb
17
+
18
+ ```ruby
19
+ @endpoint = "base-endpoint" # overriden by ENV specific variable files.
20
+ ```
21
+
22
+ dev.rb
23
+
24
+ ```ruby
25
+ @endpoint = "dev-endpoint"
26
+ ```
27
+
28
+ prod.rb
29
+
30
+ ```ruby
31
+ @endpoint = "prod-endpoint"
32
+ ```
33
+
34
+ The `@endpoint` value will be overriden by the ENV specific variable files.
35
+
36
+ ## Deployment YAML
37
+
38
+ Here's an example deployment.yaml
39
+
40
+ .kubes/resources/web/deployment.yaml
41
+
42
+ ```yaml
43
+ apiVersion: apps/v1
44
+ kind: Deployment
45
+ metadata:
46
+ name: web
47
+ labels:
48
+ role: web
49
+ spec:
50
+ replicas: 1 # overridden on a env basis
51
+ selector:
52
+ matchLabels:
53
+ role: web
54
+ template:
55
+ metadata:
56
+ labels:
57
+ role: web
58
+ spec:
59
+ containers:
60
+ - name: web
61
+ image: <%= docker_image %>
62
+ env:
63
+ - name: endpoint
64
+ value: <%= @endpoint %>
65
+ ```
66
+
67
+ ## Deploy
68
+
69
+ When you deploy you can use `KUBES_ENV` to and the ENV specific variables will be used:
70
+
71
+ KUBES_ENV=dev kubes deploy
72
+
73
+ Results in:
74
+
75
+ ```yaml
76
+ metadata:
77
+ namespace: demo-dev
78
+ labels:
79
+ app: demo
80
+ role: web
81
+ name: web
82
+ spec:
83
+ selector:
84
+ matchLabels:
85
+ app: demo
86
+ role: web
87
+ template:
88
+ metadata:
89
+ labels:
90
+ app: demo
91
+ role: web
92
+ spec:
93
+ containers:
94
+ - name: web
95
+ image: gcr.io/GOOGLE_PROJECT/demo:kubes-2020-11-07T22-29-02
96
+ env:
97
+ - name: endpoint
98
+ value: dev-endpoint
99
+ replicas: 1
100
+ apiVersion: apps/v1
101
+ kind: Deployment
102
+ ```
103
+
104
+ When using `KUBES_ENV=prod` the endpoint will use the `variables/prod.rb` values.
105
+
106
+ KUBES_ENV=prod kubes deploy
107
+
108
+ Results in:
109
+
110
+ ```yaml
111
+ metadata:
112
+ namespace: demo-prod
113
+ labels:
114
+ app: demo
115
+ role: web
116
+ name: web
117
+ spec:
118
+ selector:
119
+ matchLabels:
120
+ app: demo
121
+ role: web
122
+ template:
123
+ metadata:
124
+ labels:
125
+ app: demo
126
+ role: web
127
+ spec:
128
+ containers:
129
+ - name: web
130
+ image: gcr.io/GOOGLE_PROJECT/demo:kubes-2020-11-07T22-29-02
131
+ env:
132
+ - name: endpoint
133
+ value: prod-endpoint
134
+ replicas: 1
135
+ apiVersion: apps/v1
136
+ kind: Deployment
137
+ ```