kubernetes-deploy 0.20.5 → 0.20.6

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
  SHA1:
3
- metadata.gz: b01e4098e730e6ee300284d185adb140cf3cdc80
4
- data.tar.gz: 6416b255318a78d3a1b6383263bbecd7b3603a4b
3
+ metadata.gz: 5f4739131c95e48be2df66d1ca820fc63fa92a0f
4
+ data.tar.gz: ef6afd733102c00d3ac9b42571da84a1edde0970
5
5
  SHA512:
6
- metadata.gz: aeeb95108945428fe39de942b7285843cd8a3960344089386bfbf1cfc1a551a50c1531d3e7d2082187f67640e6978ad1ab00f8ed7176b14d92bb56410ba78380
7
- data.tar.gz: d0c1753242a3131586627252707ef9674ff94d2ac0e8e9f39f6a147dbc05449b5414ce6f26c1e8ede9bb4bd58d5919bf94ed6629f97ff2abc9db5c74e4b70e82
6
+ metadata.gz: a025aaf9b1e4cb4689e8ad0e4101502f460146f5dbe36ed1da096a5b53679e24cf75dbb5f84cbe1ec0b739988a0eafebe20237c69a51614d130b551b8456fbfa
7
+ data.tar.gz: 4364997f2d82b1b80530ba1c5c52797dd009e5a6ab882570df0937479200cd17099fb8ac9d99527bc98dd0dfa4b8859ca6a9bd4e075d25d2fe055c32ea0fd40c
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  ### Master
2
2
 
3
+ *Enhancements*
4
+
5
+ ## 0.20.6
6
+
7
+ *Enhancements*
8
+ - All resources marked as prunable will now be added to the prune whitelist ([#326](https://github.com/Shopify/kubernetes-deploy/pull/326))
9
+ - Improve deploy status detection by ensuring we examine the correct generation ([#325](https://github.com/Shopify/kubernetes-deploy/pull/325))
10
+
11
+ *Bug Fixes*
12
+
13
+ ## 0.20.5
3
14
  *Enhancements*
4
15
  - Add Job resource class ([#295](https://github.com/Shopify/kubernetes-deploy/pull/296))
5
16
  - Add CustomResourceDefinition resource class ([#306](https://github.com/Shopify/kubernetes-deploy/pull/306))
@@ -9,6 +20,9 @@ being tracked ([#316](https://github.com/Shopify/kubernetes-deploy/pull/316))
9
20
  - Allow CRs to be pruned based on `kubernetes-deploy.shopify.io/prunable` annotation on the custom resource definitions ([312](https://github.com/Shopify/kubernetes-deploy/pull/312))
10
21
  - Add HorizontalPodAutoscaler resource class ([#305](https://github.com/Shopify/kubernetes-deploy/pull/305))
11
22
 
23
+ *Bug Fixes*
24
+ - Prevent crash when STATSD_IMPLEMENTATION isn't set. ([#3242](https://github.com/Shopify/kubernetes-deploy/pull/324))
25
+
12
26
  ### 0.20.4
13
27
  *Enhancements*
14
28
  - Don't consider pod preempting a failure ([#317](https://github.com/shopify/kubernetes-deploy/pull/317))
data/README.md CHANGED
@@ -180,7 +180,7 @@ Both `.yaml.erb` and `.yml.erb` file extensions are supported. Templates must re
180
180
 
181
181
  ##### Limitations when using partials
182
182
 
183
- Partials can be included almost everywhere in ERB templates, with one notable exception: you cannot use a partial to define a subset of fields. For example, given a partial `p` defining two fields 'a' and 'b',
183
+ Partials can be included almost everywhere in ERB templates. Note: when using a partial to insert additional key-value pairs to a map you must use [YAML merge keys](http://yaml.org/type/merge.html). For example, given a partial `p` defining two fields 'a' and 'b',
184
184
 
185
185
  ```yaml
186
186
  a: 1
@@ -205,22 +205,8 @@ b: 2
205
205
  but you can do:
206
206
 
207
207
  ```yaml
208
- x:
209
- <%= partial 'p' %>
210
- ```
211
-
212
- or even
213
-
214
- ```yaml
215
- x: <%= partial 'p' %>
216
- ```
217
-
218
- which both will result in
219
-
220
- ```yaml
221
- x:
222
- a: 1
223
- b: 2
208
+ <<: <%= partial 'p' %>
209
+ x: yz
224
210
  ```
225
211
 
226
212
  This is a limitation of the current implementation.
@@ -26,7 +26,7 @@ Gem::Specification.new do |spec|
26
26
  spec.add_dependency "activesupport", ">= 5.0"
27
27
  spec.add_dependency "kubeclient", "~> 3.0"
28
28
  spec.add_dependency "googleauth", "= 0.6.2" # https://github.com/google/google-auth-library-ruby/issues/153
29
- spec.add_dependency "ejson", "1.0.1"
29
+ spec.add_dependency "ejson", "~> 1.0"
30
30
  spec.add_dependency "colorize", "~> 0.8"
31
31
  spec.add_dependency "statsd-instrument", "~> 2.2"
32
32
 
@@ -82,6 +82,7 @@ module KubernetesDeploy
82
82
  extensions/v1beta1/Ingress
83
83
  apps/v1beta1/StatefulSet
84
84
  autoscaling/v1/HorizontalPodAutoscaler
85
+ policy/v1beta1/PodDisruptionBudget
85
86
  )
86
87
  if server_version >= Gem::Version.new('1.8.0')
87
88
  wl << "batch/v1beta1/CronJob"
@@ -359,6 +360,9 @@ module KubernetesDeploy
359
360
 
360
361
  # Apply can be done in one large batch, the rest have to be done individually
361
362
  applyables, individuals = resources.partition { |r| r.deploy_method == :apply }
363
+ # Prunable resources should also applied so that they can be pruned
364
+ pruneable_types = prune_whitelist.map { |t| t.split("/").last }
365
+ applyables += individuals.select { |r| pruneable_types.include?(r.type) }
362
366
 
363
367
  individuals.each do |r|
364
368
  @logger.info("- #{r.id} (#{r.pretty_timeout_type})") if resources.length > 1
@@ -139,6 +139,17 @@ module KubernetesDeploy
139
139
  @instance_data.present?
140
140
  end
141
141
 
142
+ def current_generation
143
+ return -1 unless exists? # must be different default than observed_generation
144
+ @instance_data["metadata"]["generation"]
145
+ end
146
+
147
+ def observed_generation
148
+ return -2 unless exists?
149
+ # populating this is a best practice, but not all controllers actually do it
150
+ @instance_data["status"]["observedGeneration"]
151
+ end
152
+
142
153
  def status
143
154
  exists? ? "Exists" : "Unknown"
144
155
  end
@@ -18,9 +18,5 @@ module KubernetesDeploy
18
18
  def deploy_failed?
19
19
  false
20
20
  end
21
-
22
- def deploy_method
23
- :replace
24
- end
25
21
  end
26
22
  end
@@ -22,10 +22,6 @@ module KubernetesDeploy
22
22
  false
23
23
  end
24
24
 
25
- def deploy_method
26
- :replace
27
- end
28
-
29
25
  private
30
26
 
31
27
  def proxy_deployment_ready?
@@ -24,7 +24,8 @@ module KubernetesDeploy
24
24
  end
25
25
 
26
26
  def deploy_failed?
27
- pods.present? && pods.any?(&:deploy_failed?)
27
+ pods.present? && pods.any?(&:deploy_failed?) &&
28
+ observed_generation == current_generation
28
29
  end
29
30
 
30
31
  def fetch_logs(kubectl)
@@ -35,16 +36,6 @@ module KubernetesDeploy
35
36
 
36
37
  private
37
38
 
38
- def current_generation
39
- return -1 unless exists? # must be different default than observed_generation
40
- @instance_data["metadata"]["generation"]
41
- end
42
-
43
- def observed_generation
44
- return -2 unless exists?
45
- @instance_data["status"]["observedGeneration"]
46
- end
47
-
48
39
  def rollout_data
49
40
  return { "currentNumberScheduled" => 0 } unless exists?
50
41
  @instance_data["status"]
@@ -31,6 +31,7 @@ module KubernetesDeploy
31
31
 
32
32
  def deploy_succeeded?
33
33
  return false unless exists? && @latest_rs.present?
34
+ return false unless observed_generation == current_generation
34
35
 
35
36
  if required_rollout == 'full'
36
37
  @latest_rs.deploy_succeeded? &&
@@ -51,7 +52,8 @@ module KubernetesDeploy
51
52
  end
52
53
 
53
54
  def deploy_failed?
54
- @latest_rs&.deploy_failed?
55
+ @latest_rs&.deploy_failed? &&
56
+ observed_generation == current_generation
55
57
  end
56
58
 
57
59
  def failure_message
@@ -8,9 +8,5 @@ module KubernetesDeploy
8
8
  def deploy_failed?
9
9
  false
10
10
  end
11
-
12
- def deploy_method
13
- :replace
14
- end
15
11
  end
16
12
  end
@@ -24,10 +24,6 @@ module KubernetesDeploy
24
24
  false
25
25
  end
26
26
 
27
- def deploy_method
28
- :replace
29
- end
30
-
31
27
  private
32
28
 
33
29
  def deployment_ready?
@@ -8,7 +8,7 @@ module KubernetesDeploy
8
8
  end
9
9
 
10
10
  def deploy_succeeded?
11
- exists?
11
+ exists? && observed_generation == current_generation
12
12
  end
13
13
 
14
14
  def deploy_method
@@ -27,10 +27,6 @@ module KubernetesDeploy
27
27
  false
28
28
  end
29
29
 
30
- def deploy_method
31
- :replace
32
- end
33
-
34
30
  private
35
31
 
36
32
  def deployment_ready?
@@ -26,12 +26,15 @@ module KubernetesDeploy
26
26
  end
27
27
 
28
28
  def deploy_succeeded?
29
+ observed_generation == current_generation &&
29
30
  desired_replicas == rollout_data["availableReplicas"].to_i &&
30
31
  desired_replicas == rollout_data["readyReplicas"].to_i
31
32
  end
32
33
 
33
34
  def deploy_failed?
34
- pods.present? && pods.all?(&:deploy_failed?)
35
+ pods.present? &&
36
+ pods.all?(&:deploy_failed?) &&
37
+ observed_generation == current_generation
35
38
  end
36
39
 
37
40
  def desired_replicas
@@ -30,6 +30,7 @@ module KubernetesDeploy
30
30
  end
31
31
  true
32
32
  else
33
+ observed_generation == current_generation &&
33
34
  status_data['currentRevision'] == status_data['updateRevision'] &&
34
35
  desired_replicas == status_data['readyReplicas'].to_i &&
35
36
  desired_replicas == status_data['currentReplicas'].to_i
@@ -38,7 +39,8 @@ module KubernetesDeploy
38
39
 
39
40
  def deploy_failed?
40
41
  return false if update_strategy == ONDELETE
41
- pods.present? && pods.any?(&:deploy_failed?)
42
+ pods.present? && pods.any?(&:deploy_failed?) &&
43
+ observed_generation == current_generation
42
44
  end
43
45
 
44
46
  private
@@ -8,9 +8,5 @@ module KubernetesDeploy
8
8
  def deploy_failed?
9
9
  false
10
10
  end
11
-
12
- def deploy_method
13
- :replace
14
- end
15
11
  end
16
12
  end
@@ -8,9 +8,5 @@ module KubernetesDeploy
8
8
  def deploy_failed?
9
9
  false
10
10
  end
11
-
12
- def deploy_method
13
- :replace
14
- end
15
11
  end
16
12
  end
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module KubernetesDeploy
3
- VERSION = "0.20.5"
3
+ VERSION = "0.20.6"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubernetes-deploy
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.20.5
4
+ version: 0.20.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Verey
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2018-08-07 00:00:00.000000000 Z
12
+ date: 2018-09-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: activesupport
@@ -57,16 +57,16 @@ dependencies:
57
57
  name: ejson
58
58
  requirement: !ruby/object:Gem::Requirement
59
59
  requirements:
60
- - - '='
60
+ - - "~>"
61
61
  - !ruby/object:Gem::Version
62
- version: 1.0.1
62
+ version: '1.0'
63
63
  type: :runtime
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
- - - '='
67
+ - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: 1.0.1
69
+ version: '1.0'
70
70
  - !ruby/object:Gem::Dependency
71
71
  name: colorize
72
72
  requirement: !ruby/object:Gem::Requirement