kubes 0.5.1 → 0.6.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (131) 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 +53 -7
  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 +4 -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 +25 -83
  21. data/docs/_docs/helpers/aws/ssm.md +20 -38
  22. data/docs/_docs/helpers/custom.md +1 -0
  23. data/docs/_docs/helpers/google/advanced.md +10 -0
  24. data/docs/_docs/helpers/google/advanced/secrets.md +78 -0
  25. data/docs/_docs/helpers/google/gke.md +92 -0
  26. data/docs/_docs/helpers/google/secrets.md +30 -27
  27. data/docs/_docs/intro.md +2 -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/plugins.md +12 -0
  32. data/docs/_docs/plugins/aws.md +17 -0
  33. data/docs/_docs/plugins/google.md +18 -0
  34. data/docs/_docs/variables.md +12 -0
  35. data/docs/_docs/variables/advanced.md +64 -0
  36. data/docs/_docs/variables/basic.md +139 -0
  37. data/docs/_docs/vs.md +10 -0
  38. data/docs/_docs/vs/custom.md +109 -0
  39. data/docs/_docs/vs/helm.md +243 -0
  40. data/docs/_docs/vs/kustomize.md +167 -0
  41. data/docs/_includes/helpers/generator.md +13 -0
  42. data/docs/_includes/intro/features.md +11 -0
  43. data/docs/_includes/layering/layers.md +11 -15
  44. data/docs/_includes/plugins/gke-config.md +6 -0
  45. data/docs/_includes/sidebar.html +45 -0
  46. data/docs/_includes/variables/generator.md +12 -0
  47. data/docs/_includes/vs/article.md +1 -0
  48. data/docs/_includes/vs/kubes/layering.md +10 -0
  49. data/docs/_includes/vs/kubes/structure.md +24 -0
  50. data/docs/_reference/kubes-new-help.md +15 -0
  51. data/docs/_reference/kubes-new-helper.md +25 -0
  52. data/docs/_reference/kubes-new-resource.md +56 -0
  53. data/docs/_reference/kubes-new-variable.md +20 -0
  54. data/docs/_reference/kubes-new.md +6 -38
  55. data/kubes.gemspec +2 -2
  56. data/lib/kubes.rb +4 -3
  57. data/lib/kubes/auth.rb +13 -1
  58. data/lib/kubes/auth/base.rb +21 -0
  59. data/lib/kubes/auth/ecr.rb +1 -15
  60. data/lib/kubes/auth/gcr.rb +24 -0
  61. data/lib/kubes/cli/apply.rb +0 -1
  62. data/lib/kubes/cli/help/new/helper.md +4 -0
  63. data/lib/kubes/cli/help/{new.md → new/resource.md} +3 -3
  64. data/lib/kubes/cli/new.rb +12 -94
  65. data/lib/kubes/cli/new/helper.rb +24 -0
  66. data/lib/kubes/cli/new/resource.rb +97 -0
  67. data/lib/kubes/cli/new/variable.rb +16 -0
  68. data/lib/kubes/cli/prune.rb +4 -2
  69. data/lib/kubes/command.rb +1 -1
  70. data/lib/kubes/compiler/decorator/base.rb +1 -1
  71. data/lib/kubes/compiler/dsl/core/base.rb +6 -9
  72. data/lib/kubes/compiler/layering.rb +21 -7
  73. data/lib/kubes/compiler/shared/custom_variables.rb +38 -0
  74. data/lib/kubes/compiler/shared/plugin_helpers.rb +14 -0
  75. data/lib/kubes/compiler/strategy.rb +7 -6
  76. data/lib/kubes/compiler/strategy/base.rb +59 -2
  77. data/lib/kubes/compiler/strategy/dsl.rb +0 -29
  78. data/lib/kubes/compiler/strategy/erb.rb +10 -22
  79. data/lib/kubes/compiler/util/normalize.rb +6 -3
  80. data/lib/kubes/compiler/util/yaml_dump.rb +4 -4
  81. data/lib/kubes/config.rb +14 -0
  82. data/lib/kubes/hooks/builder.rb +20 -5
  83. data/lib/kubes/hooks/concern.rb +1 -1
  84. data/lib/kubes/kubectl/batch.rb +7 -0
  85. data/lib/kubes/plugin.rb +14 -0
  86. data/lib/kubes/util/sh.rb +1 -1
  87. data/lib/kubes/version.rb +1 -1
  88. data/lib/templates/new/helper/file.rb +2 -0
  89. data/lib/templates/new/{dsl → resource/dsl}/backend_config.rb +0 -0
  90. data/lib/templates/new/{dsl → resource/dsl}/config_map.rb +0 -0
  91. data/lib/templates/new/{dsl → resource/dsl}/daemon_set.rb +0 -0
  92. data/lib/templates/new/{dsl → resource/dsl}/deployment.rb +0 -0
  93. data/lib/templates/new/{dsl → resource/dsl}/ingress.rb +0 -0
  94. data/lib/templates/new/{dsl → resource/dsl}/job.rb +0 -0
  95. data/lib/templates/new/{dsl → resource/dsl}/managed_certificate.rb +0 -0
  96. data/lib/templates/new/{dsl → resource/dsl}/namespace.rb +0 -0
  97. data/lib/templates/new/{dsl → resource/dsl}/network_policy.rb +0 -0
  98. data/lib/templates/new/{dsl → resource/dsl}/pod.rb +0 -0
  99. data/lib/templates/new/{dsl → resource/dsl}/role.rb +0 -0
  100. data/lib/templates/new/{dsl → resource/dsl}/role_binding.rb +0 -0
  101. data/lib/templates/new/{dsl → resource/dsl}/secret.rb +0 -0
  102. data/lib/templates/new/{dsl → resource/dsl}/service.rb +0 -0
  103. data/lib/templates/new/{dsl → resource/dsl}/service_account.rb +0 -0
  104. data/lib/templates/new/{yaml → resource/yaml}/backend_config.yaml +0 -0
  105. data/lib/templates/new/{yaml → resource/yaml}/config_map.yaml +0 -0
  106. data/lib/templates/new/{yaml → resource/yaml}/daemon_set.yaml +0 -0
  107. data/lib/templates/new/{yaml → resource/yaml}/deployment.yaml +0 -0
  108. data/lib/templates/new/{yaml → resource/yaml}/ingress.yaml +0 -0
  109. data/lib/templates/new/{yaml → resource/yaml}/job.yaml +0 -0
  110. data/lib/templates/new/{yaml → resource/yaml}/managed_certificate.yaml +0 -0
  111. data/lib/templates/new/{yaml → resource/yaml}/namespace.yaml +0 -0
  112. data/lib/templates/new/{yaml → resource/yaml}/network_policy.yaml +0 -0
  113. data/lib/templates/new/{yaml → resource/yaml}/pod.yaml +0 -0
  114. data/lib/templates/new/{yaml → resource/yaml}/role.yaml +0 -0
  115. data/lib/templates/new/{yaml → resource/yaml}/role_binding.yaml +0 -0
  116. data/lib/templates/new/{yaml → resource/yaml}/secret.yaml +0 -0
  117. data/lib/templates/new/{yaml → resource/yaml}/service.yaml +0 -0
  118. data/lib/templates/new/{yaml → resource/yaml}/service_account.yaml +0 -0
  119. data/lib/templates/new/variable/file.rb +1 -0
  120. data/spec/fixtures/multiple-files/{deployment-1.rb → .kubes/resources/web/deployment-1.rb} +0 -0
  121. data/spec/fixtures/multiple-files/{deployment-2.rb → .kubes/resources/web/deployment-2.rb} +0 -0
  122. data/spec/fixtures/project/.kubes/resources/{deployment.rb → web/deployment.rb} +0 -0
  123. data/spec/fixtures/project/.kubes/resources/{foobar.rb → web/empty.rb} +0 -0
  124. data/spec/fixtures/project/.kubes/resources/{service.rb → web/service.rb} +1 -1
  125. data/spec/fixtures/syntax/{network_policy.rb → .kubes/resources/web/network_policy.rb} +0 -0
  126. data/spec/fixtures/syntax/{pod.rb → .kubes/resources/web/pod.rb} +0 -0
  127. data/spec/kubes/compiler/strategy/dsl_spec.rb +2 -2
  128. data/spec/kubes/compiler_spec.rb +1 -1
  129. data/spec/kubes/dsl/network_policy_spec.rb +1 -1
  130. data/spec/kubes/dsl/pod_spec.rb +1 -1
  131. metadata +101 -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,27 @@ 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
+ By default, the values are automatically base64 encoded. You can change the default behavior with a config option.
61
+
62
+ .kubes/config.rb
63
+
64
+ ```ruby
65
+ KubesGoogle.configure do |config|
66
+ config.base64_secrets = true
67
+ end
68
+ ```
69
+
70
+ Note: The use of `KubesGoogle.configure` instead of `Kubes.configure` here.
71
+
72
+ You can also set the `base64` option to turn on and off the automated base64 encoding on a per secret basis.
73
+
74
+ ```ruby
75
+ google_secret("demo-#{Kubes.env}-USER", base64: true) # default is base64=true
76
+ google_secret("demo-#{Kubes.env}-PASS", base64: false)
77
+ ```
75
78
 
76
- {% include helpers/base64.md %}
79
+ {% 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 %}
@@ -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,12 @@
1
+ ---
2
+ title: Kubes Plugins
3
+ ---
4
+
5
+ Kubes makes it easier to work with Kubernetes by automating the deployment workflow. Many of the conveniences it adds is done with plugins. For example, `aws_secret`, `aws_ssm`, `google_secret` are implemented with Cloud Provider specific Kubes plugins.
6
+
7
+ ## Baseline Plugins
8
+
9
+ The baseline plugins that currently ship with Kubes are:
10
+
11
+ * [kubes_aws]({% link _docs/plugins/aws.md %})
12
+ * [kubes_google]({% link _docs/plugins/google.md %})
@@ -0,0 +1,17 @@
1
+ ---
2
+ title: AWS Kubes Plugin
3
+ ---
4
+
5
+ The AWS Kubes Plugin adds support helpers like `aws_secret`. You can configure it's behavior. Example:
6
+
7
+ .kubes/config.rb
8
+
9
+ ```ruby
10
+ KubesAws.configure do |config|
11
+ config.base64_secrets = false
12
+ end
13
+ ```
14
+
15
+ Name | Description | Default
16
+ ---|---|---
17
+ base64_secrets | Whether or not to automatically base64 encoded values returned by the `aws_secret` helper. | true
@@ -0,0 +1,18 @@
1
+ ---
2
+ title: Google Kubes Plugin
3
+ ---
4
+
5
+ The Google Kubes Plugin adds support helpers like `google_secret`. You can configure it's behavior. Example:
6
+
7
+ .kubes/config.rb
8
+
9
+ ```ruby
10
+ KubesGoogle.configure do |config|
11
+ config.base64_secrets = true
12
+ end
13
+ ```
14
+
15
+ Name | Description | Default
16
+ ---|---|---
17
+ base64_secrets | Whether or not to automatically base64 encoded values returned by the `google_secret` helper. | true
18
+ {% include plugins/gke-config.md %}
@@ -0,0 +1,12 @@
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
+ {% include variables/generator.md %}
@@ -0,0 +1,64 @@
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
63
+
64
+ {% include variables/generator.md %}
@@ -0,0 +1,139 @@
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
+ ```
138
+
139
+ {% include variables/generator.md %}