krane 2.4.0 → 2.4.1

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
  SHA256:
3
- metadata.gz: 8100399551f3e460863aa36cd1be88385a4dc648701f53a0be2bf13005796b63
4
- data.tar.gz: f5842c8d9d7f71ba9e7b0b5b2b16d956b4ba71931571d9badf3d7bc2a4eae846
3
+ metadata.gz: 93f7d9e842d616ea60e2c509f5e5a3fcb54d24375d426efd0345ba3a07dd2008
4
+ data.tar.gz: 24ccdd3165654319b55632a866f85839268644cb32ee719f55f03de6e5f63eb6
5
5
  SHA512:
6
- metadata.gz: 4ed454e7264750fd9b44ab0f3badbff014eb511b3ecd4696dce0b72cee7da2a0efdfac92a65214ead36fc336b941be6869e4282f47846e9dfbd2d9230a8a1607
7
- data.tar.gz: 6be5ba46142a43dd1965dca486de1e42020b7aa7c9a806d21a150bb581598dfdf8bb203361be97072a6f7e18a6041335ce722073bc5cd6830f2444828c423484
6
+ metadata.gz: 1c90430d28fe8513dd86aef6d160e04257beb66f294b998d780c66b27d8bdb7e5320947b06894399c49bcb336795f72a338fb197f3be4626467bfb286bbde2f0
7
+ data.tar.gz: 98fc07319ed605978d558777cea947a187bf3857d229b95945096d446fdbacd2637102e34a9e03afb9f5472105ce39d5d396f9c1cf8bc6f4c0677f28e6b88e9b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,16 @@
1
1
  ## next
2
2
 
3
+ ## 2.4.1
4
+
5
+ *Enhancements*
6
+
7
+ - Support restart task for stateful sets that use the `OnDelete` strategy [#840](https://github.com/Shopify/krane/pull/840)
8
+ - Make `krane render` produce output in a deterministic order [#871](https://github.com/Shopify/krane/pull/871)
9
+
10
+ *Other*
11
+
12
+ - Remove buildkite [#869](https://github.com/Shopify/krane/pull/869)
13
+
3
14
  ## 2.4.0
4
15
 
5
16
  *Enhancements*
data/README.md CHANGED
@@ -73,7 +73,7 @@ If you need the ability to render dynamic values in templates before deploying,
73
73
 
74
74
  ## Prerequisites
75
75
 
76
- * Ruby 2.6+
76
+ * Ruby 2.7+
77
77
  * Your cluster must be running Kubernetes v1.19.0 or higher<sup>1</sup>
78
78
 
79
79
  <sup>1</sup> We run integration tests against these Kubernetes versions. You can find our
@@ -27,13 +27,11 @@ module Krane
27
27
  "Consider switching to rollingUpdate.")
28
28
  @success_assumption_warning_shown = true
29
29
  end
30
- true
31
- else
32
- observed_generation == current_generation &&
33
- status_data['currentRevision'] == status_data['updateRevision'] &&
34
- desired_replicas == status_data['readyReplicas'].to_i &&
35
- desired_replicas == status_data['currentReplicas'].to_i
36
30
  end
31
+ observed_generation == current_generation &&
32
+ status_data['currentRevision'] == status_data['updateRevision'] &&
33
+ desired_replicas == status_data['readyReplicas'].to_i &&
34
+ desired_replicas == status_data['currentReplicas'].to_i
37
35
  end
38
36
 
39
37
  def deploy_failed?
@@ -69,10 +69,10 @@ module Krane
69
69
  deployments, statefulsets, daemonsets = identify_target_workloads(deployments, statefulsets,
70
70
  daemonsets, selector: selector)
71
71
 
72
- @logger.phase_heading("Triggering restart by annotating pod template #{RESTART_TRIGGER_ANNOTATION} annotation")
73
- patch_kubeclient_deployments(deployments)
74
- patch_kubeclient_statefulsets(statefulsets)
75
- patch_kubeclient_daemonsets(daemonsets)
72
+ @logger.phase_heading("Triggering restart")
73
+ restart_deployments!(deployments)
74
+ restart_statefulsets!(statefulsets)
75
+ restart_daemonsets!(daemonsets)
76
76
 
77
77
  if verify_result
78
78
  @logger.phase_heading("Waiting for rollout")
@@ -210,7 +210,15 @@ module Krane
210
210
  apps_v1_kubeclient.patch_daemon_set(record.metadata.name, build_patch_payload(record), @namespace)
211
211
  end
212
212
 
213
- def patch_kubeclient_deployments(deployments)
213
+ def delete_statefulset_pods(record)
214
+ pods = kubeclient.get_pods(namespace: record.metadata.namespace)
215
+ pods.select! do |pod|
216
+ pod.metadata.ownerReferences.find { |ref| ref.uid == record.metadata.uid }
217
+ end
218
+ pods.each { |pod| kubeclient.delete_pod(pod.metadata.name, pod.metadata.namespace) }
219
+ end
220
+
221
+ def restart_deployments!(deployments)
214
222
  deployments.each do |record|
215
223
  begin
216
224
  patch_deployment_with_restart(record)
@@ -221,18 +229,23 @@ module Krane
221
229
  end
222
230
  end
223
231
 
224
- def patch_kubeclient_statefulsets(statefulsets)
232
+ def restart_statefulsets!(statefulsets)
225
233
  statefulsets.each do |record|
226
- begin
234
+ @logger.info("Triggered `StatefulSet/#{record.metadata.name}` restart")
235
+ if record.spec.updateStrategy&.type == "OnDelete"
236
+ @logger.info("`StatefulSet/#{record.metadata.name}` has updateStrategy: OnDelete," \
237
+ " Restarting by forcefully deleting child pods"
238
+ )
239
+ delete_statefulset_pods(record)
240
+ else
227
241
  patch_statefulset_with_restart(record)
228
- @logger.info("Triggered `StatefulSet/#{record.metadata.name}` restart")
229
- rescue Kubeclient::HttpError => e
230
- raise RestartAPIError.new(record.metadata.name, e.message)
231
242
  end
243
+ rescue Kubeclient::HttpError => e
244
+ raise RestartAPIError.new(record.metadata.name, e.message)
232
245
  end
233
246
  end
234
247
 
235
- def patch_kubeclient_daemonsets(daemonsets)
248
+ def restart_daemonsets!(daemonsets)
236
249
  daemonsets.each do |record|
237
250
  begin
238
251
  patch_daemonset_with_restart(record)
@@ -104,11 +104,11 @@ module Krane
104
104
  dir_paths.each do |template_dir|
105
105
  resource_templates[template_dir] = Dir.foreach(template_dir).select do |filename|
106
106
  filename.end_with?(*VALID_TEMPLATES) || filename == EjsonSecretProvisioner::EJSON_SECRETS_FILE
107
- end
107
+ end.sort
108
108
  end
109
109
 
110
110
  # Filename paths
111
- file_paths.each do |filename|
111
+ file_paths.sort.each do |filename|
112
112
  dir_name = File.dirname(filename)
113
113
  resource_templates[dir_name] ||= []
114
114
  resource_templates[dir_name] << File.basename(filename) unless resource_templates[dir_name].include?(filename)
data/lib/krane/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Krane
3
- VERSION = "2.4.0"
3
+ VERSION = "2.4.1"
4
4
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: krane
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.4.0
4
+ version: 2.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Katrina Verey
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: exe
12
12
  cert_chain: []
13
- date: 2022-01-12 00:00:00.000000000 Z
13
+ date: 2022-02-02 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -411,7 +411,6 @@ executables:
411
411
  extensions: []
412
412
  extra_rdoc_files: []
413
413
  files:
414
- - ".buildkite/pipeline.nightly.yml"
415
414
  - ".github/CODEOWNERS"
416
415
  - ".github/ISSUE_TEMPLATE.md"
417
416
  - ".github/probots.yml"
@@ -1,15 +0,0 @@
1
- steps:
2
- - name: 'Run Test Suite (:kubernetes: 1.16-latest)'
3
- command: bin/ci
4
- agents:
5
- queue: k8s-ci
6
- env:
7
- LOGGING_LEVEL: 4
8
- KUBERNETES_VERSION: v1.16-latest
9
- - name: 'Run Test Suite (:kubernetes: 1.15-latest)'
10
- command: bin/ci
11
- agents:
12
- queue: k8s-ci
13
- env:
14
- LOGGING_LEVEL: 4
15
- KUBERNETES_VERSION: v1.15-latest