kubes 0.7.7 → 0.7.8

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4f8112935cf2c796869c81fb0ede6a5b6b9589ba5daf981aab7ca2a806217e4c
4
- data.tar.gz: d84869a02096b266edc9e0c51ea2ec344f97f96afb0ce1dcc74d80ef71cb7567
3
+ metadata.gz: 55d217f4b05371a806a18151034bf36ff420fbc6724f1367c441d337a3ed71ad
4
+ data.tar.gz: 31912f0fb17ac8bb91acbc03cbb3cbbcd5f769170535ca7a48ea5dfe61aa0e40
5
5
  SHA512:
6
- metadata.gz: 11e5302088c91d06c41c3f1b3c6774b2361d7a1537d9e9c609152b2de215b35d0dd1f792d54788a557a6d39dcc3816aa7caaa1191c888aed135b2290d72d6355
7
- data.tar.gz: 0a47dee57d4ccb4ccd1e9877830328d60ba1a0a49b2d3592a7994f63cbe01cb84ee29ca646d057662a1dba0fafb94bc61c0a4ee84547ed951942d9c35cecf2ed
6
+ metadata.gz: da80f1de9af4f31ae3b449261591979e499a70f29c85bea4aa2e87d2c4efba8c63ef6c09cd71a423e5164ed5f8598062d3ffbcb6cc5fb01855484a29794026d8
7
+ data.tar.gz: 926c67bb5cdef8be996b8ded90a251f4ef6643ea40aaa1a817ed596d6482dc1cfcecd6f99322730c0a68df5c113e7708b0c1222abdea2e299bcc79779cda2916
data/CHANGELOG.md CHANGED
@@ -3,6 +3,9 @@
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.8] - 2021-10-29
7
+ - [#54](https://github.com/boltops-tools/kubes/pull/54) fix configMap and secret hash when not first element in Array
8
+
6
9
  ## [0.7.7] - 2021-10-21
7
10
  - [#51](https://github.com/boltops-tools/kubes/pull/51) add hash checksum for tls secretName
8
11
  - [#52](https://github.com/boltops-tools/kubes/pull/52) add role all layer to pre_layers
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
 
@@ -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,8 +58,8 @@ 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
 
@@ -1,53 +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',
50
- 'tls' => '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
51
70
  }
52
71
  end
53
72
  end
@@ -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
  #
data/lib/kubes/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Kubes
2
- VERSION = "0.7.7"
2
+ VERSION = "0.7.8"
3
3
  end
@@ -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 TODO: add issue number
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.7
4
+ version: 0.7.8
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-21 00:00:00.000000000 Z
11
+ date: 2021-10-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -732,10 +732,13 @@ files:
732
732
  - spec/fixtures/decorators/deployment/both/volumes.yaml
733
733
  - spec/fixtures/decorators/deployment/configMap/envFrom.yaml
734
734
  - spec/fixtures/decorators/deployment/configMap/valueFrom.yaml
735
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-first.yaml
736
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-second.yaml
735
737
  - spec/fixtures/decorators/deployment/configMap/volumes.yaml
736
738
  - spec/fixtures/decorators/deployment/secret/envFrom.yaml
737
739
  - spec/fixtures/decorators/deployment/secret/valueFrom.yaml
738
740
  - spec/fixtures/decorators/deployment/secret/volumes.yaml
741
+ - spec/fixtures/decorators/ingress/tls.yaml
739
742
  - spec/fixtures/decorators/pod/configMap/envFrom.yaml
740
743
  - spec/fixtures/decorators/pod/configMap/valueFrom.yaml
741
744
  - spec/fixtures/decorators/pod/configMap/volumes.yaml
@@ -762,6 +765,7 @@ files:
762
765
  - spec/fixtures/syntax/.kubes/resources/web/pod.rb
763
766
  - spec/kubes/cli/prune_spec.rb
764
767
  - spec/kubes/compiler/decorator/post/deployment_spec.rb
768
+ - spec/kubes/compiler/decorator/post/ingress_spec.rb
765
769
  - spec/kubes/compiler/decorator/post/pod_spec.rb
766
770
  - spec/kubes/compiler/strategy/dispatcher_spec.rb
767
771
  - spec/kubes/compiler_spec.rb
@@ -807,10 +811,13 @@ test_files:
807
811
  - spec/fixtures/decorators/deployment/both/volumes.yaml
808
812
  - spec/fixtures/decorators/deployment/configMap/envFrom.yaml
809
813
  - spec/fixtures/decorators/deployment/configMap/valueFrom.yaml
814
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-first.yaml
815
+ - spec/fixtures/decorators/deployment/configMap/volumes-name-second.yaml
810
816
  - spec/fixtures/decorators/deployment/configMap/volumes.yaml
811
817
  - spec/fixtures/decorators/deployment/secret/envFrom.yaml
812
818
  - spec/fixtures/decorators/deployment/secret/valueFrom.yaml
813
819
  - spec/fixtures/decorators/deployment/secret/volumes.yaml
820
+ - spec/fixtures/decorators/ingress/tls.yaml
814
821
  - spec/fixtures/decorators/pod/configMap/envFrom.yaml
815
822
  - spec/fixtures/decorators/pod/configMap/valueFrom.yaml
816
823
  - spec/fixtures/decorators/pod/configMap/volumes.yaml
@@ -837,6 +844,7 @@ test_files:
837
844
  - spec/fixtures/syntax/.kubes/resources/web/pod.rb
838
845
  - spec/kubes/cli/prune_spec.rb
839
846
  - spec/kubes/compiler/decorator/post/deployment_spec.rb
847
+ - spec/kubes/compiler/decorator/post/ingress_spec.rb
840
848
  - spec/kubes/compiler/decorator/post/pod_spec.rb
841
849
  - spec/kubes/compiler/strategy/dispatcher_spec.rb
842
850
  - spec/kubes/compiler_spec.rb