kubes 0.7.6 → 0.7.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (57) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +18 -0
  3. data/README.md +4 -4
  4. data/docs/.gitignore +1 -0
  5. data/docs/Gemfile +1 -0
  6. data/docs/_config.yml +2 -0
  7. data/docs/_docs/config/hooks/docker.md +2 -0
  8. data/docs/_docs/config/hooks/generator.md +16 -0
  9. data/docs/_docs/config/hooks/kubectl.md +2 -0
  10. data/docs/_docs/config/hooks/kubes.md +2 -0
  11. data/docs/_docs/config/reference.md +1 -0
  12. data/docs/_docs/dsl/resources.md +1 -1
  13. data/docs/_docs/dsl.md +3 -3
  14. data/docs/_docs/helpers/aws/iam-role.md +1 -0
  15. data/docs/_docs/helpers/google/gke.md +1 -1
  16. data/docs/_docs/intro/structure.md +2 -2
  17. data/docs/_docs/layering/{merge.md → merge-dsl.md} +0 -0
  18. data/docs/_docs/layering/merge-options.md +76 -0
  19. data/docs/_docs/layering.md +1 -1
  20. data/docs/_docs/vs/kustomize.md +1 -1
  21. data/docs/_includes/banner/foot.html +2 -0
  22. data/docs/_includes/banner/head.html +5 -0
  23. data/docs/_includes/config/hooks/generator.md +6 -0
  24. data/docs/_includes/intro/install.md +1 -1
  25. data/docs/_includes/layering/layers.md +12 -10
  26. data/docs/_includes/learn/next-steps.md +11 -0
  27. data/docs/_includes/sidebar.html +3 -2
  28. data/docs/_layouts/default.html +2 -0
  29. data/docs/_reference/kubes-new-hook.md +30 -0
  30. data/docs/_reference/kubes-new-variable.md +7 -0
  31. data/docs/_reference/kubes-new.md +1 -0
  32. data/docs/bin/web +1 -1
  33. data/kubes.gemspec +1 -0
  34. data/lib/kubes/cli/help/new/hook.md +9 -0
  35. data/lib/kubes/cli/help/new/variable.md +6 -0
  36. data/lib/kubes/cli/new/hook.rb +18 -0
  37. data/lib/kubes/cli/new.rb +4 -0
  38. data/lib/kubes/compiler/decorator/hashable/field.rb +41 -21
  39. data/lib/kubes/compiler/decorator/hashable.rb +1 -1
  40. data/lib/kubes/compiler/decorator/post.rb +12 -12
  41. data/lib/kubes/compiler/layering.rb +17 -15
  42. data/lib/kubes/compiler/shared/runtime_helpers.rb +1 -1
  43. data/lib/kubes/config.rb +3 -0
  44. data/lib/kubes/core.rb +1 -1
  45. data/lib/kubes/util/consider.rb +2 -2
  46. data/lib/kubes/version.rb +1 -1
  47. data/lib/kubes.rb +1 -0
  48. data/lib/templates/new/hooks/docker.rb +9 -0
  49. data/lib/templates/new/hooks/kubectl.rb +11 -0
  50. data/lib/templates/new/hooks/kubes.rb +9 -0
  51. data/lib/templates/yaml/.kubes/resources/base/deployment.yaml.tt +2 -0
  52. data/spec/fixtures/decorators/deployment/configMap/volumes-name-first.yaml +14 -0
  53. data/spec/fixtures/decorators/deployment/configMap/volumes-name-second.yaml +14 -0
  54. data/spec/fixtures/decorators/ingress/tls.yaml +12 -0
  55. data/spec/kubes/compiler/decorator/post/deployment_spec.rb +25 -0
  56. data/spec/kubes/compiler/decorator/post/ingress_spec.rb +22 -0
  57. metadata +38 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e73d57fba41a00e9ace349a4b3d9da7815e52a5025fcda97b64cfc185797ba35
4
- data.tar.gz: a6114d33d48893ed2f748b0720aaf7dca8f71a75b4b3e3f4ae3f690680b35f26
3
+ metadata.gz: 6529d951f35f31cf105591f8d5ea0f3b8819e358f0b3388f22d17340af1f2bbf
4
+ data.tar.gz: d1c6e87a899a75a8f7078046c4058c69c46328c3b7138b4a934dae7fe287be4d
5
5
  SHA512:
6
- metadata.gz: e28f97ff9b675adbce4066afbbde6fa4c853f2172e430659db25b8865409d5fb19aace0a464c809a95ddee6152e8f389cd9e43c6dc9696c9297fd2b8465c5c77
7
- data.tar.gz: 42c6780d303119bb42d65075043bcaaf38fd1eec20a8b4448695a598ae22e7ab1b28f6d3920116c7cd9c76630be4d332871833f194383e1c05537ac3bab00a73
6
+ metadata.gz: 245ca41ceec0499da84ef056b19ad6f99e422f3c1013718d3e466128aeab6503fc1d0c3be19892633dab1acff1865816885fa6f7d1589c60d5ebe65cfaffab50
7
+ data.tar.gz: 551a265282d0a6af874517382859492bbe27bcd201790e94f3f7a9540d6ffeb4b6dc678b0aa1cfeab4e5983a0a591625da21ef7ec59bb01fe8c33fdbf681e8c2
data/CHANGELOG.md CHANGED
@@ -3,6 +3,24 @@
3
3
  All notable changes to this project will be documented in this file.
4
4
  This project *loosely tries* to adhere to [Semantic Versioning](http://semver.org/), even before v1.0.
5
5
 
6
+ ## [0.7.10] - 2021-12-18
7
+ - [#56](https://github.com/boltops-tools/kubes/pull/56) New hook generator
8
+ - [#57](https://github.com/boltops-tools/kubes/pull/57) Fix activesupport require
9
+ - add nokogiri dependency. looks like aws-sdk removed it and its breaking specs
10
+ - hook generator docs
11
+ - new hook generator
12
+
13
+ ## [0.7.9] - 2021-11-07
14
+ - [#55](https://github.com/boltops-tools/kubes/pull/55) make helper methods available in variables files
15
+
16
+ ## [0.7.8] - 2021-10-29
17
+ - [#54](https://github.com/boltops-tools/kubes/pull/54) fix configMap and secret hash when not first element in Array
18
+
19
+ ## [0.7.7] - 2021-10-21
20
+ - [#51](https://github.com/boltops-tools/kubes/pull/51) add hash checksum for tls secretName
21
+ - [#52](https://github.com/boltops-tools/kubes/pull/52) add role all layer to pre_layers
22
+ - [#53](https://github.com/boltops-tools/kubes/pull/53) Merger options
23
+
6
24
  ## [0.7.6] - 2021-10-12
7
25
  - remove init yaml templates, removed duplication
8
26
  - write full.yaml to .kubes/tmp instead
data/README.md CHANGED
@@ -17,8 +17,8 @@ Official Docs Site: [kubes.guru](https://kubes.guru)
17
17
  Kubes will:
18
18
 
19
19
  1. Build the docker image and push it to repo
20
- 2. Compile Kubernetes YAML files from YAML/ERB or a DSL and adjusts the Docker build image
21
- 3. Deploy via kubectl apply on the compiled Kubernetes YAML files
20
+ 2. Compile Kubernetes YAML files from YAML/ERB or a DSL with built Docker image
21
+ 3. Deploy via `kubectl apply` on the compiled Kubernetes YAML files
22
22
 
23
23
  ## Usage
24
24
 
@@ -42,7 +42,7 @@ Now, use `kubectl` directly in the proper order:
42
42
  kubectl apply -f .kubes/output/web/service.yaml
43
43
  kubectl apply -f .kubes/output/web/deployment.yaml
44
44
 
45
- You can also apply with kubes. This will compile the automatically files also.
45
+ You can also apply with kubes. This will automatically compile the files also.
46
46
 
47
47
  kubes apply
48
48
 
@@ -50,7 +50,7 @@ The deploy command, does all 3 steps: builds the docker image, compiles the `.ku
50
50
 
51
51
  kubes deploy
52
52
 
53
- ## Multiple Enviroments
53
+ ## Multiple Environments
54
54
 
55
55
  You can easily create multiple environments with the same YAML configs. Example:
56
56
 
data/docs/.gitignore CHANGED
@@ -3,3 +3,4 @@ _site
3
3
  .jekyll-metadata
4
4
  .jekyll-cache
5
5
  Gemfile.lock
6
+ _config-dev.yml
data/docs/Gemfile CHANGED
@@ -7,6 +7,7 @@ gem "opal-browser"
7
7
  gem "opal-jquery"
8
8
  gem "rake"
9
9
  gem "rerun"
10
+ gem "webrick"
10
11
 
11
12
  # GitHub pages does not support this plugin.
12
13
  # GitHub pages will not serve zipped assets even if we precompress them before hand.
data/docs/_config.yml CHANGED
@@ -69,3 +69,5 @@ defaults:
69
69
 
70
70
  plugins_dir:
71
71
  # - jekyll-gzip - GitHub pages does not support this plugin.
72
+
73
+ ads_url: "https://ads.boltops.com"
@@ -4,6 +4,8 @@ nav_text: Docker
4
4
  categories: hooks
5
5
  ---
6
6
 
7
+ {% include config/hooks/generator.md type="docker" %}
8
+
7
9
  Here are some examples of running custom hooks before and after the docker commands.
8
10
 
9
11
  ## Build Hooks
@@ -0,0 +1,16 @@
1
+ ---
2
+ title: Hook Generator
3
+ nav_text: Generator
4
+ categories: hooks
5
+ order: 9
6
+ ---
7
+
8
+ ## Examples
9
+
10
+ $ kubes new hook docker
11
+ create .kubes/config/hooks/docker.rb
12
+ $ kubes new hook kubectl
13
+ create .kubes/config/hooks/kubectl.rb
14
+ $ kubes new hook kubes
15
+ create .kubes/config/hooks/kubes.rb
16
+ $
@@ -4,6 +4,8 @@ nav_text: Kubectl
4
4
  categories: hooks
5
5
  ---
6
6
 
7
+ {% include config/hooks/generator.md type="kubectl" %}
8
+
7
9
  You can use hooks to run scripts at any part of the `kubectl` commands. Here's an example of running a script before and after the `kubectl apply` command for the `web/deployment` resource.
8
10
 
9
11
  .kubes/config/hooks/kubectl.rb
@@ -4,6 +4,8 @@ nav_text: Kubes
4
4
  categories: hooks
5
5
  ---
6
6
 
7
+ {% include config/hooks/generator.md type="kubes" %}
8
+
7
9
  You can use hooks to run scripts at specific steps of the `kubes deploy` lifecycle.
8
10
 
9
11
  ## Lifecycle Hooks
@@ -20,3 +20,4 @@ repo_auto_auth | Whether or not to try to auth authorize docker repo registry if
20
20
  skip | List of resources to skip. Can also be set with the `KUBES_SKIP` env var. `KUBES_SKIP` should be a list of strings separated by spaces. It adds onto the `config.skip` option. | []
21
21
  state.path | Where to store the state file with the last build Docker image. | .kubes/state/KUBES_ENV/data.json
22
22
  suffix_hash | Whether or not to append suffix hash to ConfigMap and Secret | true
23
+ merger.options | Merger options that control how Hashes are merged. More info: [Merger Options]({% link _docs/layering/merge-options.md %}) | `{overwrite_arrays: true}`
@@ -6,7 +6,7 @@ Here's a list of the resources supported by the Kubes DSL.
6
6
 
7
7
  {% assign docs = site.docs | where: "categories","dsl" %}
8
8
  {% for doc in docs -%}
9
- * [{{ doc.nav_text }}]({{ doc.url }})
9
+ * [{{ doc.title }}]({{ doc.url }})
10
10
  {% endfor %}
11
11
 
12
12
  For resources, that are not supported, you can use the [Generic resource]({% link _docs/dsl/resources/generic.md %}) or use [YAML]({% link _docs/yaml.md %}) instead. You can use a mix of DSL and YAML definitions in the `.kubes/resources` folder.
data/docs/_docs/dsl.md CHANGED
@@ -58,9 +58,9 @@ Notice how `port` and `targetPort` correspond to `spec.ports.port` and `spec.por
58
58
 
59
59
  In general:
60
60
 
61
- * The DSL methods behave as reader methods when no arguments are passed to it. IE: `name "demo-web"` sets the value.
62
- * The DSL methods behave as writer methods when arguments are passed to it. IE: `name` returns the value.
61
+ * The DSL methods behave as reader methods when no arguments are passed to it. IE: `name` returns the value.
62
+ * The DSL methods behave as writer methods when arguments are passed to it. IE: `name "demo-web"` sets the value.
63
63
 
64
64
  ## Merge Behavior
65
65
 
66
- Generally, the merge should behave as expected. For example, map or Hash fields are merged together from multiple layers. Strings are simply replaced. See more details at [Layering Merge Behavior]({% link _docs/layering/merge.md %})
66
+ Generally, the merge should behave as expected. For example, map or Hash fields are merged together from multiple layers. Strings are simply replaced. See more details at [Layering Merge Behavior]({% link _docs/layering/merge-dsl.md %})
@@ -16,6 +16,7 @@ iam_role = KubesAws::IamRole.new(
16
16
  namespace: "demo-#{Kubes.env}", # defaults to APP-ENV when not set. IE: demo-dev
17
17
  managed_policies: ["AmazonS3ReadOnlyAccess", "AmazonSSMReadOnlyAccess"], # defaults to empty when not set
18
18
  inline_policies: [:secrets_read_only], # See Secrets Read Only Inline Policy at the bottom
19
+ # cluster: "eks-cluster-name", # inferred with kubectl when not set
19
20
  )
20
21
  before("apply",
21
22
  label: "create iam role",
@@ -49,7 +49,7 @@ To build kubes as a Docker image entrypoint for [Google CloudBuild Custom Builde
49
49
 
50
50
  Be sure to set GOOGLE_PROJECT to your own project id.
51
51
 
52
- ## Example Codebuild YAML
52
+ ## Example Cloudbuild YAML
53
53
 
54
54
  cloudbuild.yaml:
55
55
 
@@ -34,10 +34,10 @@ Here's what a .kubes folder structure can look like this:
34
34
 
35
35
  Name | Description
36
36
  --- | ---
37
- base | The base folder is processed first and can be used to define common fields and resources. Learn more on the [Layering Docs]({% link _docs/layering.md %}).
38
37
  config | The config folder can be used to configure behavior of Kubes. The [docker]({% link _docs/config/docker.md %}) config is used to customize the docker command. The [env]({% link _docs/config/env.md %}) config is used to override `config.rb` settings on a `KUBES_ENV` basis. The [kubectl]({% link _docs/config/kubectl.md %}) config is used to customize the kubectl command.
39
38
  config.rb | The main thing to configure here is the repo to push the docker image to.
40
39
  output | Where kubes builds and writes the Kubernetes YAML to.
41
40
  resources | Where you define your Kubernetes resources.
42
- shared | The shared folder is where you can put shared resources. This folder gets applied first. More info: [Ordering]({% link _docs/intro/ordering.md %}).
41
+ resources/base | The base folder is processed first and can be used to define common fields and resources. Learn more on the [Layering Docs]({% link _docs/layering.md %}).
42
+ resources/shared | The shared folder is where you can put shared resources. This folder gets applied first. More info: [Ordering]({% link _docs/intro/ordering.md %}).
43
43
  state | Temporary state info that stores the built Docker image name.
File without changes
@@ -0,0 +1,76 @@
1
+ ---
2
+ title: Merge Options
3
+ ---
4
+
5
+ Underneath the hood, Kubes uses the [danielsdeleo/deep_merge](https://github.com/danielsdeleo/deep_merge) library to merge layers together. You can control the merge behavior options with [config.merger.options]({% link _docs/config/reference.md %}).
6
+
7
+ The default merge options is:
8
+
9
+ {overwrite_arrays: true}
10
+
11
+ You can control the merge behavior by setting:
12
+
13
+ .kubes/config.rb
14
+
15
+ ```ruby
16
+ Kubes.configure do |config|
17
+ # ...
18
+ config.merger.options = {overwrite_arrays: false}
19
+ end
20
+ ```
21
+
22
+ See the [danielsdeleo/deep_merge](https://github.com/danielsdeleo/deep_merge) docs for the different options.
23
+
24
+ ## Example of overwrite_arrays false
25
+
26
+ An example of where you might want to use `{overwrite_arrays: false}` is if you are using YAML and want a base sidecar container in all of your deployments.
27
+
28
+ .kubes/resources/base/deployment.yaml
29
+
30
+ ```yaml
31
+ spec:
32
+ template:
33
+ spec:
34
+ containers:
35
+ - name: sidecar
36
+ image: sidecar-image
37
+ ```
38
+
39
+ .kubes/resources/web/deployment.yaml
40
+
41
+ ```yaml
42
+ spec:
43
+ template:
44
+ metadata:
45
+ labels:
46
+ role: web
47
+ spec:
48
+ containers:
49
+ - name: web
50
+ image: <%= docker_image %>
51
+ ```
52
+
53
+ Produces:
54
+
55
+ ```yaml
56
+ # ...
57
+ spec:
58
+ template:
59
+ metadata:
60
+ labels:
61
+ role: web
62
+ spec:
63
+ containers:
64
+ - name: sidecar
65
+ image: sidecar-image
66
+ - name: web
67
+ image: gcr.io/boltops-learn/demo:kubes-2021-10-21T18-06-48
68
+ # ...
69
+ ```
70
+
71
+ However, using this merge behavior will also add additional ports if you are assigning a `targetPort` in the DSL. See:
72
+
73
+ * [DSL in service creates always default port 80 #45](https://github.com/boltops-tools/kubes/issues/45)
74
+ * [use deep_merge overwrite_arrays option #48](https://github.com/boltops-tools/kubes/pull/48)
75
+
76
+ Will welcome PRs for improvements.
@@ -7,4 +7,4 @@ Kubes supports layering files together so you can use the same Kubernetes files
7
7
  * [YAML Layering]({% link _docs/layering/yaml.md %})
8
8
  * [DSL Layering]({% link _docs/layering/dsl.md %})
9
9
  * [Mix Layering]({% link _docs/layering/mix.md %})
10
- * [Merge Behavior]({% link _docs/layering/merge.md %})
10
+ * [Merge Behavior]({% link _docs/layering/merge-dsl.md %})
@@ -135,7 +135,7 @@ You can even define your own custom helpers for even more control. See: [Helpers
135
135
 
136
136
  ## Kubes Features
137
137
 
138
- Kubes does a lot more than build YAML files. Here's a list of features:
138
+ Kubes does a lot more than building YAML files. Here's a list of features:
139
139
 
140
140
  {% include intro/features.md %}
141
141
 
@@ -0,0 +1,2 @@
1
+ <div id="foot-banner" class="foot-banner">
2
+ </div>
@@ -0,0 +1,5 @@
1
+ {% assign buildtime = "now" | date: "%Y%m%d%H%M%S" %}
2
+ <link rel="preload" href="{{ site.ads_url }}/ads/{{ site.time | date: '%s' }}.js" as="script" />
3
+ <script data-cfasync="false" async src="{{ site.ads_url }}/ads/{{ site.time | date: '%s' }}.js"></script>
4
+
5
+ <div id="head-banner" class="head-banner"></div>
@@ -0,0 +1,6 @@
1
+ ## Hook Generator
2
+
3
+ To generator a starter hook:
4
+
5
+ $ kubes new hook {{ include.type }}
6
+ create .kubes/config/hooks/{{ include.type }}.rb
@@ -16,4 +16,4 @@ Kubes calls docker. Kubes has been tested with docker 18.x-ce+. Generally, it sh
16
16
 
17
17
  ## gcloud
18
18
 
19
- If you are using the [gcloud builder](% link _docs/config/builder.md %), set up and configure the [gcloud cli](https://cloud.google.com/sdk/install).
19
+ If you are using the [gcloud builder]({% link _docs/config/builder.md %}), set up and configure the [gcloud cli](https://cloud.google.com/sdk/install).
@@ -11,6 +11,7 @@ Here's an example structure, so we can understand how layering works.
11
11
  ├── clock
12
12
  │ └── deployment.{{ include.ext }}
13
13
  └── web
14
+ ├── all.{{ include.ext }}
14
15
  ├── deployment
15
16
  │ ├── dev.{{ include.ext }}
16
17
  │ └── prod.{{ include.ext }}
@@ -34,16 +35,17 @@ Notes
34
35
 
35
36
  Here's a table showing the the full layering.
36
37
 
37
- Folder/Pattern | Example
38
- -------------------|--------------------------------------------
39
- base/all.{{ include.ext }} | base/all.{{ include.ext }}
40
- base/all/ENV.{{ include.ext }} | base/all/dev.{{ include.ext }}
41
- base/KIND.{{ include.ext }} | base/deployment.{{ include.ext }}
42
- base/KIND/base.{{ include.ext }} | base/deployment/base.{{ include.ext }}
43
- base/KIND/ENV.{{ include.ext }} | base/deployment/dev.{{ include.ext }}
44
- ROLE/KIND.{{ include.ext }} | web/deployment.{{ include.ext }}
45
- ROLE/KIND/base.{{ include.ext }} | web/deployment/base.{{ include.ext }}
46
- ROLE/KIND/ENV.{{ include.ext }} | web/deployment/dev.{{ include.ext }}
38
+ Type | Folder/Pattern | Example
39
+ ---|---|---
40
+ pre | base/all.{{ include.ext }} | base/all.{{ include.ext }}
41
+ pre | base/all/ENV.{{ include.ext }} | base/all/dev.{{ include.ext }}
42
+ pre | base/KIND.{{ include.ext }} | base/deployment.{{ include.ext }}
43
+ pre | base/KIND/base.{{ include.ext }} | base/deployment/base.{{ include.ext }}
44
+ pre | base/KIND/ENV.{{ include.ext }} | base/deployment/dev.{{ include.ext }}
45
+ pre | ROLE/all.{{ include.ext }} | web/all.{{ include.ext }}
46
+ main | ROLE/KIND.{{ include.ext }} | web/deployment.{{ include.ext }}
47
+ post | ROLE/KIND/base.{{ include.ext }} | web/deployment/base.{{ include.ext }}
48
+ post | ROLE/KIND/ENV.{{ include.ext }} | web/deployment/dev.{{ include.ext }}
47
49
 
48
50
  ## Real-World Uses
49
51
 
@@ -4,3 +4,14 @@ You've seen how to get started with Kubes. From here, you can check out the Docs
4
4
  * [Layering]({% link _docs/layering.md %}): Use the same Kubernetes YAML to build multiple environments like dev and prod with [layering]({% link _docs/layering.md %}).
5
5
  * [CLI Customizations]({% link _docs/config.md %}): You can customize the [cli args]({% link _docs/config/kubectl.md %}). You can also run hooks before and after kubectl commands.
6
6
  * [Extra Env]({% link _docs/extra-env.md %}): Create additional envs with little effort.
7
+
8
+ ## Learn Videos
9
+
10
+ Watch BoltOps Learn Kubes videos:
11
+
12
+ * [BoltOps Learn Kubes Videos](https://learn.boltops.com/tagged/kubes)
13
+
14
+
15
+ ## Kubes Features
16
+
17
+ {% include intro/features.md %}
@@ -72,7 +72,7 @@
72
72
  </li>
73
73
  <li><a href="{% link _docs/config/hooks.md %}">Hooks</a>
74
74
  <ul>
75
- {% assign docs = site.docs | where: "categories","hooks" %}
75
+ {% assign docs = site.docs | where: "categories","hooks" | sort: "order" %}
76
76
  {% for doc in docs -%}
77
77
  <li><a href="{{ doc.url }}">{{ doc.nav_text }}</a></li>
78
78
  {% endfor %}
@@ -97,7 +97,8 @@
97
97
  <li><a href="{% link _docs/layering/yaml.md %}">YAML</a></li>
98
98
  <li><a href="{% link _docs/layering/dsl.md %}">DSL</a></li>
99
99
  <li><a href="{% link _docs/layering/mix.md %}">Mix</a></li>
100
- <li><a href="{% link _docs/layering/merge.md %}">Merge Behavior</a></li>
100
+ <li><a href="{% link _docs/layering/merge-dsl.md %}">Merge DSL</a></li>
101
+ <li><a href="{% link _docs/layering/merge-options.md %}">Merge Options</a></li>
101
102
  </ul>
102
103
  </li>
103
104
  <li><a href="{% link _docs/dsl.md %}">DSL</a>
@@ -27,9 +27,11 @@
27
27
  </head>
28
28
 
29
29
  <body>
30
+ {% include banner/head.html %}
30
31
  {% include header.html %}
31
32
  {% include content.html %}
32
33
  {% include footer.html %}
34
+ {% include banner/foot.html %}
33
35
  {% include js.html %}
34
36
  </body>
35
37
  </html>
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: kubes new hook
3
+ reference: true
4
+ ---
5
+
6
+ ## Usage
7
+
8
+ kubes new hook
9
+
10
+ ## Description
11
+
12
+ Generates kubes hook file.
13
+
14
+ ## Examples
15
+
16
+ $ kubes new hook docker
17
+ create .kubes/config/hooks/docker.rb
18
+ $ kubes new hook kubectl
19
+ create .kubes/config/hooks/kubectl.rb
20
+ $ kubes new hook kubes
21
+ create .kubes/config/hooks/kubes.rb
22
+ $
23
+
24
+
25
+ ## Options
26
+
27
+ ```
28
+ y, [--force] # Bypass overwrite are you sure prompt for existing files
29
+ ```
30
+
@@ -11,6 +11,13 @@ reference: true
11
11
 
12
12
  Generates kubes variable file.
13
13
 
14
+ ## Examples
15
+
16
+ $ kubes new variable
17
+ create .kubes/variables/dev.rb
18
+ $ KUBES_ENV=prod kubes new variable
19
+ create .kubes/variables/prod.rb
20
+
14
21
 
15
22
  ## Options
16
23
 
@@ -14,6 +14,7 @@ Generates new resource.
14
14
  ## Subcommands
15
15
 
16
16
  * [kubes new helper]({% link _reference/kubes-new-helper.md %}) - Generates kubes helper file.
17
+ * [kubes new hook]({% link _reference/kubes-new-hook.md %}) - Generates kubes hook file.
17
18
  * [kubes new resource]({% link _reference/kubes-new-resource.md %}) - Generates Kubes Kubernetes resource definition.
18
19
  * [kubes new variable]({% link _reference/kubes-new-variable.md %}) - Generates kubes variable file.
19
20
 
data/docs/bin/web CHANGED
@@ -5,4 +5,4 @@
5
5
  # bin/web -P 8888
6
6
 
7
7
  bundle exec jekyll clean
8
- exec bundle exec jekyll serve "$@"
8
+ exec bundle exec jekyll serve --trace --config _config.yml,_config-dev.yml --port 4002 --host 0.0.0.0 "$@"
data/kubes.gemspec CHANGED
@@ -23,6 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency "dsl_evaluator"
24
24
  spec.add_dependency "hash_squeezer"
25
25
  spec.add_dependency "memoist"
26
+ spec.add_dependency "nokogiri"
26
27
  spec.add_dependency "rainbow"
27
28
  spec.add_dependency "render_me_pretty"
28
29
  spec.add_dependency "thor"
@@ -0,0 +1,9 @@
1
+ ## Examples
2
+
3
+ $ kubes new hook docker
4
+ create .kubes/config/hooks/docker.rb
5
+ $ kubes new hook kubectl
6
+ create .kubes/config/hooks/kubectl.rb
7
+ $ kubes new hook kubes
8
+ create .kubes/config/hooks/kubes.rb
9
+ $
@@ -0,0 +1,6 @@
1
+ ## Examples
2
+
3
+ $ kubes new variable
4
+ create .kubes/variables/dev.rb
5
+ $ KUBES_ENV=prod kubes new variable
6
+ create .kubes/variables/prod.rb
@@ -0,0 +1,18 @@
1
+ class Kubes::CLI::New
2
+ class Hook < Kubes::CLI::Sequence
3
+ argument :type, default: "kubes", description: "IE: docker, kubectl, kubes" # description doesnt really show up
4
+
5
+ def self.options
6
+ [
7
+ [:force, aliases: ["y"], type: :boolean, desc: "Bypass overwrite are you sure prompt for existing files"],
8
+ ]
9
+ end
10
+ options.each { |args| class_option(*args) }
11
+
12
+ public
13
+ def create_hook
14
+ set_source("new/hooks")
15
+ template "#{type}.rb", ".kubes/config/hooks/#{type}.rb"
16
+ end
17
+ end
18
+ end
data/lib/kubes/cli/new.rb CHANGED
@@ -11,5 +11,9 @@ class Kubes::CLI
11
11
  long_desc Help.text("new/variable")
12
12
  Variable.options.each { |args| option(*args) }
13
13
  register(Variable, "variable", "variable", "Generates kubes variable file.")
14
+
15
+ long_desc Help.text("new/hook")
16
+ Hook.options.each { |args| option(*args) }
17
+ register(Hook, "hook", "hook", "Generates kubes hook file.")
14
18
  end
15
19
  end
@@ -1,52 +1,72 @@
1
1
  class Kubes::Compiler::Decorator::Hashable
2
2
  class Field
3
- # item is full wrapper structure
3
+ # item is full structure
4
4
  #
5
- # secretRef: <--- wrapper
6
- # name: demo-secret
5
+ # secretRef: <--- wrapper_key
6
+ # name: demo-secret <--- target_key is 'name' from wrapper_map[wrapper_key]
7
7
  #
8
+ attr_reader :item # for debugging
8
9
  def initialize(item)
9
10
  @item = item
10
11
  end
11
12
 
12
13
  def hashable?
13
- x = @item.keys & map.keys
14
+ x = @item.keys & wrapper_map.keys
14
15
  !x.empty?
15
16
  end
16
17
 
17
18
  def kind
18
- wrapper =~ /configMap/ ? "ConfigMap" : "Secret"
19
+ wrapper_key =~ /configMap/ ? "ConfigMap" : "Secret"
19
20
  end
20
21
 
21
- # The key of the hashable value.
22
+ # The target key of the hashable value is that key used for find value to add hash
22
23
  #
23
24
  # envFrom:
24
- # - secretRef:
25
- # name: demo-secret <--- wrapper is 'name'
25
+ # - secretRef: <--- wrapper_key
26
+ # name: demo-secret <--- target_key is 'name' from wrapper_map[wrapper_key]
26
27
  #
27
- def key
28
- map[wrapper]
28
+ def target_key
29
+ wrapper_map[wrapper_key]
29
30
  end
30
31
 
31
32
  # The wrapper field is nested right above the item with the hashable value.
33
+ # Simple example:
32
34
  #
33
35
  # envFrom:
34
- # - secretRef: <--- wrapper
35
- # name: demo-secret
36
+ # - secretRef: <--- wrapper_key
37
+ # name: demo-secret <--- target_key is 'name' from wrapper_map[wrapper_key]
36
38
  #
37
- def wrapper
38
- @item.keys.first
39
+ # More complex example where there's a configMap.name key also on the same level.
40
+ #
41
+ # volumes:
42
+ # - name: config-map-volume
43
+ # configMap:
44
+ # name: demo-config-map
45
+ #
46
+ # Note: Wont work for case when there's are 2 matching wrapper_map keys,
47
+ # but don't think Kubernetes allows 2 matching wrapper_map keys.
48
+ # Example: This is invalid Kubernetes YAML.
49
+ #
50
+ # volumes:
51
+ # - name: config-map-volume
52
+ # configMap:
53
+ # name: demo-config-map
54
+ # secretRef:
55
+ # name: demo-seret
56
+ def wrapper_key
57
+ @item.keys.find { |k| wrapper_map.keys.include?(k) } # this key used for map[wrapper_key]
39
58
  end
40
59
 
41
60
  # wrapper element to key that stores the hashable value
42
- def map
61
+ def wrapper_map
43
62
  {
44
- 'configMapRef' => 'name',
45
- 'configMapKeyRef' => 'name',
46
- 'configMap' => 'name',
47
- 'secretRef' => 'name',
48
- 'secretKeyRef' => 'name',
49
- 'secret' => 'secretName',
63
+ 'configMapRef' => 'name', # containers.env.envFrom.configMapRef.name
64
+ 'configMapKeyRef' => 'name', # containers.env.valueFrom.configMapKeyRef.name
65
+ 'configMap' => 'name', # containers.env.envFrom.configMapRef.name
66
+ 'secretRef' => 'name', # containers.env.envFrom.secretRef.name
67
+ 'secretKeyRef' => 'name', # containers.env.valueFrom.secretKeyRef.name
68
+ 'secret' => 'secretName', # volumes.secret.secretName
69
+ 'tls' => 'secretName', # tls.secretName
50
70
  }
51
71
  end
52
72
  end
@@ -9,7 +9,7 @@ module Kubes::Compiler::Decorator
9
9
  name = @data.dig('metadata','name')
10
10
  return @data unless name
11
11
 
12
- # puts "name #{name}" # TODO: scope Kind so Secret and ConfigMap can have the same name...
12
+ # scope Kind so Secret and ConfigMap can have same name
13
13
  md5 = md5(@data)
14
14
  @data['metadata']['name'] = "#{name}-#{md5}"
15
15
  Storage.store(@data['kind'], name, md5)
@@ -16,12 +16,12 @@ module Kubes::Compiler::Decorator
16
16
  # hashable set from previous stack call
17
17
  if options[:hashable_field] && item.is_a?(Hash)
18
18
  field = options[:hashable_field]
19
- value_without_md5 = item[field.key]
19
+ value_without_md5 = item[field.target_key]
20
20
  @reset_hashable_field = true unless value_without_md5
21
21
  if field.hashable? && value_without_md5
22
22
  md5 = Hashable::Storage.fetch(field.kind, value_without_md5)
23
23
  v = [value_without_md5, md5].compact.join('-')
24
- item[field.key] = v
24
+ item[field.target_key] = v
25
25
  end
26
26
  end
27
27
 
@@ -29,10 +29,10 @@ module Kubes::Compiler::Decorator
29
29
  # Pretty tricky case. Given:
30
30
  #
31
31
  # envFrom:
32
- # - secretRef:
33
- # name: demo-secret
34
- # - configMapRef:
35
- # name: demo-config-map
32
+ # - secretRef: <--- wrapper_key
33
+ # name: demo-secret <--- target_key is 'name' from wrapper_map[wrapper_key]
34
+ # - configMapRef: <--- wrapper_key
35
+ # name: demo-config-map <--- target_key is 'name' from wrapper_map[wrapper_key]
36
36
  #
37
37
  # Need to reset the stored hashable_field in the call stack.
38
38
  # Else the field.kind is cached and the md5 look is incorrect
@@ -52,19 +52,19 @@ module Kubes::Compiler::Decorator
52
52
  #
53
53
  # 1. envFrom example
54
54
  # envFrom:
55
- # - secretRef:
56
- # name: demo-secret
55
+ # - secretRef: <--- wrapper_key
56
+ # name: demo-secret <--- target_key is 'name' from wrapper_map[wrapper_key]
57
57
  #
58
58
  # 2. valueFrom example
59
59
  # valueFrom:
60
- # secretKeyRef:
61
- # name: demo-secret
60
+ # secretKeyRef: <--- wrapper_key
61
+ # name: demo-secret <--- target_key is 'name' from wrapper_map[wrapper_key]
62
62
  # key: password
63
63
  #
64
64
  # 3. volumes example
65
65
  # volumes:
66
- # - secret:
67
- # secretName: demo-secret
66
+ # - secret: <--- wrapper_key
67
+ # secretName: demo-secret <--- target_key is 'name' from wrapper_map[wrapper_key]
68
68
  #
69
69
  # This is useful to capture for the next level of the stack call
70
70
  #
@@ -6,29 +6,21 @@ class Kubes::Compiler
6
6
  ext = File.extname(@path)
7
7
  kind = File.basename(@path).sub(ext,'') # IE: deployment
8
8
  kind = kind.pluralize if @block_form
9
+ role = @path.split('/')[-2] # .kubes/resources/web/deployment.yaml
9
10
  layers = [
10
- "all",
11
- "all/#{Kubes.env}",
12
- "#{kind}",
13
- "#{kind}/#{Kubes.env}",
11
+ "base/all",
12
+ "base/all/#{Kubes.env}",
13
+ "base/#{kind}",
14
+ "base/#{kind}/#{Kubes.env}",
15
+ "#{role}/all",
14
16
  ]
15
17
  layers = add_exts(layers)
16
18
  layers.map! do |layer|
17
- "#{Kubes.root}/.kubes/resources/base/#{layer}"
19
+ "#{Kubes.root}/.kubes/resources/#{layer}"
18
20
  end
19
21
  layers.select { |layer| File.exist?(layer) }
20
22
  end
21
23
 
22
- def add_exts(layers)
23
- layers.map do |layer|
24
- [
25
- "#{layer}.rb",
26
- "#{layer}.yaml",
27
- "#{layer}.yml",
28
- ]
29
- end.flatten
30
- end
31
-
32
24
  def post_layers
33
25
  return [] if Kubes.kustomize?
34
26
 
@@ -45,5 +37,15 @@ class Kubes::Compiler
45
37
  end
46
38
  layers.select { |layer| File.exist?(layer) }
47
39
  end
40
+
41
+ def add_exts(*layers)
42
+ layers.flatten.map do |layer|
43
+ [
44
+ "#{layer}.rb",
45
+ "#{layer}.yaml",
46
+ "#{layer}.yml",
47
+ ]
48
+ end.flatten
49
+ end
48
50
  end
49
51
  end
@@ -3,9 +3,9 @@ module Kubes::Compiler::Shared
3
3
  include Kubes::Compiler::Shared::Helpers
4
4
 
5
5
  def load_runtime_helpers
6
- load_custom_variables # also load custom variables
7
6
  load_plugin_helpers
8
7
  load_custom_helpers
8
+ load_custom_variables # also load custom variables
9
9
  end
10
10
 
11
11
  @@custom_helpers_loaded = false
data/lib/kubes/config.rb CHANGED
@@ -43,6 +43,9 @@ module Kubes
43
43
 
44
44
  config.suffix_hash = true # append suffix hash to ConfigMap and Secret
45
45
 
46
+ config.merger = ActiveSupport::OrderedOptions.new
47
+ config.merger.options = {overwrite_arrays: true}
48
+
46
49
  config
47
50
  end
48
51
 
data/lib/kubes/core.rb CHANGED
@@ -37,7 +37,7 @@ module Kubes
37
37
 
38
38
  # wrapper to ensure we use the same deeper_merge options everywhere
39
39
  def deep_merge!(a, b)
40
- a.deeper_merge!(b, overwrite_arrays: true)
40
+ a.deeper_merge!(b, config.merger.options)
41
41
  a
42
42
  end
43
43
  end
@@ -3,8 +3,8 @@ module Kubes::Util
3
3
  def consider?(path)
4
4
  File.file?(path) &&
5
5
  !path.include?('/resources/base') &&
6
- !path.include?('/base.yaml') &&
7
- !path.include?('/base.yml')
6
+ !path.include?('/base.') &&
7
+ !path.include?('/all.')
8
8
  end
9
9
  end
10
10
  end
data/lib/kubes/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kubes
2
- VERSION = "0.7.6"
2
+ VERSION = "0.7.10"
3
3
  end
data/lib/kubes.rb CHANGED
@@ -5,6 +5,7 @@ $:.unshift(File.expand_path("../", __FILE__))
5
5
  require "kubes/autoloader"
6
6
  Kubes::Autoloader.setup
7
7
 
8
+ require "active_support"
8
9
  require "active_support/core_ext/class"
9
10
  require "active_support/core_ext/hash"
10
11
  require "active_support/core_ext/string"
@@ -0,0 +1,9 @@
1
+ # Docs: https://kubes.guru/docs/config/hooks/docker/
2
+
3
+ before("build",
4
+ execute: "echo 'docker build before hook'",
5
+ )
6
+
7
+ after("build",
8
+ execute: "echo 'docker build after hook'",
9
+ )
@@ -0,0 +1,11 @@
1
+ # Docs: https://kubes.guru/docs/config/hooks/kubectl/
2
+
3
+ before("apply",
4
+ on: "web/deployment",
5
+ execute: "echo 'before apply hook test'",
6
+ )
7
+
8
+ after("delete",
9
+ on: "web/deployment",
10
+ execute: "echo 'after delete hook test'",
11
+ )
@@ -0,0 +1,9 @@
1
+ # Docs: https://kubes.guru/docs/config/hooks/kubes/
2
+
3
+ before("apply",
4
+ execute: "echo 'kubes before apply hook'",
5
+ )
6
+
7
+ after("apply",
8
+ execute: "echo 'kubes after apply hook'",
9
+ )
@@ -2,7 +2,9 @@ spec:
2
2
  selector:
3
3
  matchLabels:
4
4
  app: <%= app %>
5
+ env: <%= Kubes.env %>
5
6
  template:
6
7
  metadata:
7
8
  labels:
8
9
  app: <%= app %>
10
+ env: <%= Kubes.env %>
@@ -0,0 +1,14 @@
1
+ ---
2
+ # apiVersion: apps/v1
3
+ # kind: Deployment
4
+ # spec:
5
+ # template:
6
+ # spec:
7
+ # only including structure needed for spec
8
+ volumes:
9
+ - name: config-map-volume
10
+ configMap:
11
+ name: demo-config-map
12
+ items:
13
+ - key: k1
14
+ path: config-map.conf
@@ -0,0 +1,14 @@
1
+ ---
2
+ # apiVersion: apps/v1
3
+ # kind: Deployment
4
+ # spec:
5
+ # template:
6
+ # spec:
7
+ # only including structure needed for spec
8
+ volumes:
9
+ - configMap:
10
+ name: demo-config-map
11
+ items:
12
+ - key: k1
13
+ path: config-map.conf
14
+ name: config-map-volume
@@ -0,0 +1,12 @@
1
+ apiVersion: networking.k8s.io/v1
2
+ kind: Ingress
3
+ metadata:
4
+ name: web
5
+ spec:
6
+ tls:
7
+ - secretName: tls-secret
8
+ defaultBackend:
9
+ service:
10
+ name: web
11
+ port:
12
+ number: 80
@@ -135,4 +135,29 @@ describe Kubes::Compiler::Decorator::Post do
135
135
  end
136
136
  end
137
137
  end
138
+
139
+ context "order" do
140
+ # spec to fix issue https://github.com/boltops-tools/kubes/issues/49
141
+ describe "name first" do
142
+ let(:data) { fixture("configMap/volumes-name-first") }
143
+ it "run" do
144
+ decorator.run
145
+ data = decorator.data
146
+ volumes = data['volumes']
147
+ name = volumes[0]['configMap']['name']
148
+ expect(name).to eq("demo-config-map-fakehash-config")
149
+ end
150
+ end
151
+
152
+ describe "name second" do
153
+ let(:data) { fixture("configMap/volumes-name-second") }
154
+ it "run" do
155
+ decorator.run
156
+ data = decorator.data
157
+ volumes = data['volumes']
158
+ name = volumes[0]['configMap']['name']
159
+ expect(name).to eq("demo-config-map-fakehash-config")
160
+ end
161
+ end
162
+ end
138
163
  end
@@ -0,0 +1,22 @@
1
+ describe Kubes::Compiler::Decorator::Post do
2
+ let(:decorator) { described_class.new(data) }
3
+
4
+ def fixture(name)
5
+ YAML.load_file("spec/fixtures/decorators/ingress/#{name}.yaml")
6
+ end
7
+ before(:each) do
8
+ allow(Kubes::Compiler::Decorator::Hashable::Storage).to receive(:fetch).and_return("fakehash")
9
+ end
10
+
11
+ context "ingress" do
12
+ describe "tls" do
13
+ let(:data) { fixture("tls") }
14
+ it "run" do
15
+ decorator.run
16
+ data = decorator.data
17
+ name = data['spec']['tls'][0]['secretName']
18
+ expect(name).to eq("tls-secret-fakehash")
19
+ end
20
+ end
21
+ end
22
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubes
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.6
4
+ version: 0.7.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tung Nguyen
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-12 00:00:00.000000000 Z
11
+ date: 2021-12-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -80,6 +80,20 @@ dependencies:
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
82
  version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: nokogiri
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
98
  name: rainbow
85
99
  requirement: !ruby/object:Gem::Requirement
@@ -281,6 +295,7 @@ files:
281
295
  - docs/_docs/config/env.md
282
296
  - docs/_docs/config/hooks.md
283
297
  - docs/_docs/config/hooks/docker.md
298
+ - docs/_docs/config/hooks/generator.md
284
299
  - docs/_docs/config/hooks/kubectl.md
285
300
  - docs/_docs/config/hooks/kubes.md
286
301
  - docs/_docs/config/hooks/ruby.md
@@ -336,7 +351,8 @@ files:
336
351
  - docs/_docs/intro/structure.md
337
352
  - docs/_docs/layering.md
338
353
  - docs/_docs/layering/dsl.md
339
- - docs/_docs/layering/merge.md
354
+ - docs/_docs/layering/merge-dsl.md
355
+ - docs/_docs/layering/merge-options.md
340
356
  - docs/_docs/layering/mix.md
341
357
  - docs/_docs/layering/yaml.md
342
358
  - docs/_docs/learn/dsl.md
@@ -385,7 +401,10 @@ files:
385
401
  - docs/_docs/yaml.md
386
402
  - docs/_docs/yaml/multiple-files.md
387
403
  - docs/_docs/yaml/multiple-resources.md
404
+ - docs/_includes/banner/foot.html
405
+ - docs/_includes/banner/head.html
388
406
  - docs/_includes/commands.html
407
+ - docs/_includes/config/hooks/generator.md
389
408
  - docs/_includes/config/hooks/options.md
390
409
  - docs/_includes/content.html
391
410
  - docs/_includes/dsl/methods.md
@@ -434,6 +453,7 @@ files:
434
453
  - docs/_reference/kubes-logs.md
435
454
  - docs/_reference/kubes-new-help.md
436
455
  - docs/_reference/kubes-new-helper.md
456
+ - docs/_reference/kubes-new-hook.md
437
457
  - docs/_reference/kubes-new-resource.md
438
458
  - docs/_reference/kubes-new-variable.md
439
459
  - docs/_reference/kubes-new.md
@@ -577,11 +597,14 @@ files:
577
597
  - lib/kubes/cli/help/deploy.md
578
598
  - lib/kubes/cli/help/exec.md
579
599
  - lib/kubes/cli/help/new/helper.md
600
+ - lib/kubes/cli/help/new/hook.md
580
601
  - lib/kubes/cli/help/new/resource.md
602
+ - lib/kubes/cli/help/new/variable.md
581
603
  - lib/kubes/cli/init.rb
582
604
  - lib/kubes/cli/logs.rb
583
605
  - lib/kubes/cli/new.rb
584
606
  - lib/kubes/cli/new/helper.rb
607
+ - lib/kubes/cli/new/hook.rb
585
608
  - lib/kubes/cli/new/resource.rb
586
609
  - lib/kubes/cli/new/variable.rb
587
610
  - lib/kubes/cli/prune.rb
@@ -682,6 +705,9 @@ files:
682
705
  - lib/templates/dsl/.kubes/resources/web/deployment/prod.rb
683
706
  - lib/templates/dsl/.kubes/resources/web/service.rb
684
707
  - lib/templates/new/helper/file.rb
708
+ - lib/templates/new/hooks/docker.rb
709
+ - lib/templates/new/hooks/kubectl.rb
710
+ - lib/templates/new/hooks/kubes.rb
685
711
  - lib/templates/new/resource/dsl/backend_config.rb
686
712
  - lib/templates/new/resource/dsl/config_map.rb
687
713
  - lib/templates/new/resource/dsl/daemon_set.rb
@@ -731,10 +757,13 @@ files:
731
757
  - spec/fixtures/decorators/deployment/both/volumes.yaml
732
758
  - spec/fixtures/decorators/deployment/configMap/envFrom.yaml
733
759
  - spec/fixtures/decorators/deployment/configMap/valueFrom.yaml
760
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-first.yaml
761
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-second.yaml
734
762
  - spec/fixtures/decorators/deployment/configMap/volumes.yaml
735
763
  - spec/fixtures/decorators/deployment/secret/envFrom.yaml
736
764
  - spec/fixtures/decorators/deployment/secret/valueFrom.yaml
737
765
  - spec/fixtures/decorators/deployment/secret/volumes.yaml
766
+ - spec/fixtures/decorators/ingress/tls.yaml
738
767
  - spec/fixtures/decorators/pod/configMap/envFrom.yaml
739
768
  - spec/fixtures/decorators/pod/configMap/valueFrom.yaml
740
769
  - spec/fixtures/decorators/pod/configMap/volumes.yaml
@@ -761,6 +790,7 @@ files:
761
790
  - spec/fixtures/syntax/.kubes/resources/web/pod.rb
762
791
  - spec/kubes/cli/prune_spec.rb
763
792
  - spec/kubes/compiler/decorator/post/deployment_spec.rb
793
+ - spec/kubes/compiler/decorator/post/ingress_spec.rb
764
794
  - spec/kubes/compiler/decorator/post/pod_spec.rb
765
795
  - spec/kubes/compiler/strategy/dispatcher_spec.rb
766
796
  - spec/kubes/compiler_spec.rb
@@ -791,7 +821,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
791
821
  - !ruby/object:Gem::Version
792
822
  version: '0'
793
823
  requirements: []
794
- rubygems_version: 3.1.6
824
+ rubygems_version: 3.2.32
795
825
  signing_key:
796
826
  specification_version: 4
797
827
  summary: 'Kubernetes Deployment Tool: build docker image, compile Kubernetes YAML
@@ -806,10 +836,13 @@ test_files:
806
836
  - spec/fixtures/decorators/deployment/both/volumes.yaml
807
837
  - spec/fixtures/decorators/deployment/configMap/envFrom.yaml
808
838
  - spec/fixtures/decorators/deployment/configMap/valueFrom.yaml
839
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-first.yaml
840
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-second.yaml
809
841
  - spec/fixtures/decorators/deployment/configMap/volumes.yaml
810
842
  - spec/fixtures/decorators/deployment/secret/envFrom.yaml
811
843
  - spec/fixtures/decorators/deployment/secret/valueFrom.yaml
812
844
  - spec/fixtures/decorators/deployment/secret/volumes.yaml
845
+ - spec/fixtures/decorators/ingress/tls.yaml
813
846
  - spec/fixtures/decorators/pod/configMap/envFrom.yaml
814
847
  - spec/fixtures/decorators/pod/configMap/valueFrom.yaml
815
848
  - spec/fixtures/decorators/pod/configMap/volumes.yaml
@@ -836,6 +869,7 @@ test_files:
836
869
  - spec/fixtures/syntax/.kubes/resources/web/pod.rb
837
870
  - spec/kubes/cli/prune_spec.rb
838
871
  - spec/kubes/compiler/decorator/post/deployment_spec.rb
872
+ - spec/kubes/compiler/decorator/post/ingress_spec.rb
839
873
  - spec/kubes/compiler/decorator/post/pod_spec.rb
840
874
  - spec/kubes/compiler/strategy/dispatcher_spec.rb
841
875
  - spec/kubes/compiler_spec.rb