krane 3.6.2 → 3.7.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.github/workflows/ci.yml +3 -0
- data/CHANGELOG.md +9 -1
- data/README.md +1 -0
- data/dev.yml +1 -1
- data/lib/krane/resource_deployer.rb +24 -6
- data/lib/krane/version.rb +1 -1
- metadata +3 -6
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0bb4b346e9146186c9e1549f71708707568aa9872a2b7e0e1a0e6fd01e9f4d52
|
4
|
+
data.tar.gz: fb3662468c546ba6717cfd9de125cd4d6ef2caa2269404a618c2152770fc0d3d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7a4e23ab9d917f223c6e294a61b26d17791c3554257bbc81a95e5372f1d90af727a13b3bf470008be750fafbb7dbef322486289a2b247e9e60881eff2f4bad15
|
7
|
+
data.tar.gz: b73325f5894e1a9ed67e75d1dc1759ceea4afe58aad5be81f27905bd3d0a10ff38012494c26cf68b06c338cd24367bb8e6d472e7b394aed3f3e0f3dd1ff56546
|
data/.github/workflows/ci.yml
CHANGED
@@ -18,6 +18,7 @@ jobs:
|
|
18
18
|
- "3.0.4"
|
19
19
|
- "2.7.6"
|
20
20
|
kubernetes_version:
|
21
|
+
- "1.31.2"
|
21
22
|
- "1.30.0"
|
22
23
|
- "1.29.4"
|
23
24
|
- "1.28.0"
|
@@ -29,6 +30,8 @@ jobs:
|
|
29
30
|
- "serial_integration_test"
|
30
31
|
- "integration_test"
|
31
32
|
include:
|
33
|
+
- kubernetes_version: "1.31.2"
|
34
|
+
kind_image: "kindest/node:v1.31.2@sha256:18fbefc20a7113353c7b75b5c869d7145a6abd6269154825872dc59c1329912e"
|
32
35
|
- kubernetes_version: "1.30.0"
|
33
36
|
kind_image: "kindest/node:v1.30.0@sha256:047357ac0cfea04663786a612ba1eaba9702bef25227a794b52890dd8bcd692e"
|
34
37
|
- kubernetes_version: "1.29.4"
|
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
## next
|
2
2
|
|
3
|
+
## 3.7.0
|
4
|
+
|
5
|
+
- Annotate individual resources with `last-applied-configuration` when using `krane deploy` with `--annotate-individuals`. Previously, eligible resources that were made with `create` or `replace` were applied along with the rest of the resources. However, this causes issues when a mutating admission controller modifies otherwise immutable fields.
|
6
|
+
|
7
|
+
## 3.6.3
|
8
|
+
|
9
|
+
- Test against k8s 1.31
|
10
|
+
|
3
11
|
## 3.6.2
|
4
12
|
|
5
13
|
- Pinning `stats-instrument` to < 3.9 to avoid breaking changes.
|
@@ -8,7 +16,7 @@
|
|
8
16
|
|
9
17
|
*Features*
|
10
18
|
|
11
|
-
- Enable the option to bypass endpoint validation for a service by using the annotation `krane.shopify.io/skip-endpoint-validation: true`.
|
19
|
+
- Enable the option to bypass endpoint validation for a service by using the annotation `krane.shopify.io/skip-endpoint-validation: true`.
|
12
20
|
|
13
21
|
## 3.6.0
|
14
22
|
|
data/README.md
CHANGED
data/dev.yml
CHANGED
@@ -6,7 +6,7 @@ up:
|
|
6
6
|
- podman
|
7
7
|
- kind:
|
8
8
|
name: krane
|
9
|
-
image: kindest/node:v1.
|
9
|
+
image: kindest/node:v1.31.2@sha256:18fbefc20a7113353c7b75b5c869d7145a6abd6269154825872dc59c1329912e
|
10
10
|
commands:
|
11
11
|
test:
|
12
12
|
run: bin/test unit_test && bin/test cli_test && bin/test serial_integration_test && bin/test integration_test
|
@@ -22,7 +22,7 @@ module Krane
|
|
22
22
|
|
23
23
|
def deploy!(resources, verify_result, prune)
|
24
24
|
if verify_result
|
25
|
-
deploy_all_resources(resources, prune: prune, verify: true)
|
25
|
+
deploy_all_resources(resources, prune: prune, verify: true, annotate_individuals: true)
|
26
26
|
failed_resources = resources.reject(&:deploy_succeeded?)
|
27
27
|
success = failed_resources.empty?
|
28
28
|
if !success && failed_resources.all?(&:deploy_timed_out?)
|
@@ -30,7 +30,7 @@ module Krane
|
|
30
30
|
end
|
31
31
|
raise FatalDeploymentError unless success
|
32
32
|
else
|
33
|
-
deploy_all_resources(resources, prune: prune, verify: false)
|
33
|
+
deploy_all_resources(resources, prune: prune, verify: false, annotate_individuals: true)
|
34
34
|
logger.summary.add_action("deployed #{resources.length} #{'resource'.pluralize(resources.length)}")
|
35
35
|
warning = <<~MSG
|
36
36
|
Deploy result verification is disabled for this deploy.
|
@@ -73,12 +73,13 @@ module Krane
|
|
73
73
|
|
74
74
|
private
|
75
75
|
|
76
|
-
def deploy_all_resources(resources, prune: false, verify:, record_summary: true)
|
77
|
-
deploy_resources(resources, prune: prune, verify: verify, record_summary: record_summary
|
76
|
+
def deploy_all_resources(resources, prune: false, verify:, record_summary: true, annotate_individuals: false)
|
77
|
+
deploy_resources(resources, prune: prune, verify: verify, record_summary: record_summary,
|
78
|
+
annotate_individuals: annotate_individuals)
|
78
79
|
end
|
79
80
|
measure_method(:deploy_all_resources, 'normal_resources.duration')
|
80
81
|
|
81
|
-
def deploy_resources(resources, prune: false, verify:, record_summary: true)
|
82
|
+
def deploy_resources(resources, prune: false, verify:, record_summary: true, annotate_individuals: false)
|
82
83
|
return if resources.empty?
|
83
84
|
deploy_started_at = Time.now.utc
|
84
85
|
|
@@ -96,7 +97,6 @@ module Krane
|
|
96
97
|
applyables, individuals = resources.partition { |r| r.deploy_method == :apply }
|
97
98
|
# Prunable resources should also applied so that they can be pruned
|
98
99
|
pruneable_types = @prune_allowlist.map { |t| t.split("/").last }
|
99
|
-
applyables += individuals.select { |r| pruneable_types.include?(r.type) && !r.deploy_method_override }
|
100
100
|
|
101
101
|
individuals.each do |individual_resource|
|
102
102
|
individual_resource.deploy_started_at = Time.now.utc
|
@@ -122,6 +122,11 @@ module Krane
|
|
122
122
|
|
123
123
|
apply_all(applyables, prune)
|
124
124
|
|
125
|
+
if annotate_individuals
|
126
|
+
to_annotate = individuals.select { |r| pruneable_types.include?(r.type) && !r.deploy_method_override }
|
127
|
+
update_last_applied_annotations(to_annotate)
|
128
|
+
end
|
129
|
+
|
125
130
|
if verify
|
126
131
|
watcher = Krane::ResourceWatcher.new(resources: resources, deploy_started_at: deploy_started_at,
|
127
132
|
timeout: @global_timeout, task_config: @task_config, sha: @current_sha)
|
@@ -252,6 +257,19 @@ module Krane
|
|
252
257
|
[err, status]
|
253
258
|
end
|
254
259
|
|
260
|
+
def update_last_applied_annotations(resources)
|
261
|
+
resources.each do |resource|
|
262
|
+
err, status = set_last_applied_annotation(resource)
|
263
|
+
raise FatalDeploymentError, "Failed to set last applied annotation: #{err}" unless status.success?
|
264
|
+
end
|
265
|
+
end
|
266
|
+
|
267
|
+
def set_last_applied_annotation(resource)
|
268
|
+
_, err, status = kubectl.run("apply", "set-last-applied", "--create-annotation", "-f", resource.file_path, log_failure: false,
|
269
|
+
output_is_sensitive: resource.sensitive_template_content?, use_namespace: !resource.global?)
|
270
|
+
[err, status]
|
271
|
+
end
|
272
|
+
|
255
273
|
# Inspect the file referenced in the kubectl stderr
|
256
274
|
# to make it easier for developer to understand what's going on
|
257
275
|
def find_bad_files_from_kubectl_output(line)
|
data/lib/krane/version.rb
CHANGED
metadata
CHANGED
@@ -1,16 +1,15 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: krane
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 3.
|
4
|
+
version: 3.7.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Katrina Verey
|
8
8
|
- Daniel Turner
|
9
9
|
- Kir Shatrov
|
10
|
-
autorequire:
|
11
10
|
bindir: exe
|
12
11
|
cert_chain: []
|
13
|
-
date:
|
12
|
+
date: 2025-01-16 00:00:00.000000000 Z
|
14
13
|
dependencies:
|
15
14
|
- !ruby/object:Gem::Dependency
|
16
15
|
name: activesupport
|
@@ -512,7 +511,6 @@ licenses:
|
|
512
511
|
- MIT
|
513
512
|
metadata:
|
514
513
|
allowed_push_host: https://rubygems.org
|
515
|
-
post_install_message:
|
516
514
|
rdoc_options: []
|
517
515
|
require_paths:
|
518
516
|
- lib
|
@@ -527,8 +525,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
527
525
|
- !ruby/object:Gem::Version
|
528
526
|
version: '0'
|
529
527
|
requirements: []
|
530
|
-
rubygems_version: 3.
|
531
|
-
signing_key:
|
528
|
+
rubygems_version: 3.6.2
|
532
529
|
specification_version: 4
|
533
530
|
summary: A command line tool that helps you ship changes to a Kubernetes namespace
|
534
531
|
and understand the result
|