kubernetes-deploy 0.20.5 → 0.20.6

Sign up to get free protection for your applications and to get access to all the features.
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