krane 3.3.0 → 3.4.0

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: ea6e5f5541819d9404729a0c1f05aae53c4d909817c73349aab761987ea0b368
4
- data.tar.gz: '049f3b4cd88f914580475b84e33f3bd216f363f6b5474dd76810ce53f051d4e0'
3
+ metadata.gz: 0a400c15e247a60bf8596665ddf2737abb44c2418358212e689890eb2178956f
4
+ data.tar.gz: '0386e1417ba00c97add6aa7184176785f82d05de5453140a8806540833c85f46'
5
5
  SHA512:
6
- metadata.gz: b860d42eb86ff04e44faf2709ff98c31cc60a2c0c1418088dff894cadcda8b9c85400a17e3db1946211996bd5389bde75d0efc5bb75d12231b6977b89ff23753
7
- data.tar.gz: 4345f565b49788844df7ac55978237192990de8689a55cc76b1d48e54aa69fb1ae3f93869d1760a606a9d6d3a3c0c3521d0eef77da414122c6b3b594204f0379
6
+ metadata.gz: a8b4c706a3918d6d3b66f098ae03c1e02680d59bef3f8eab34248997bfc11e512206f1b1d1794f50f12965e7a0cffbb2df2293b4639dd28b4b8526db881cf315
7
+ data.tar.gz: 7d113bfa20d8dec893fa3494ea7f55a9bf89c3a59ca7a461e1076c5fed37c2725b495a96efa5034c18b857819c96f5803045dec444a3c205e70f647b162f8106
data/.github/CODEOWNERS CHANGED
@@ -1 +1 @@
1
- * @Shopify/app-lifecycle
1
+ * @Shopify/infrastructure-tooling
@@ -0,0 +1,18 @@
1
+ name: Project automations
2
+ on:
3
+ issues:
4
+ types:
5
+ - opened
6
+ - reopened
7
+ env:
8
+ PROJECT_URL: https://github.com/orgs/Shopify/projects/2279
9
+
10
+ jobs:
11
+ add-to-project:
12
+ name: Issue or PR opened
13
+ runs-on: shopify-ubuntu-latest
14
+ steps:
15
+ - uses: actions/add-to-project@v0.4.0 # https://github.com/actions/add-to-project/tree/v0.4.0
16
+ with:
17
+ project-url: ${{ env.PROJECT_URL }}
18
+ github-token: ${{ secrets.SHOPIFY_GH_ACCESS_TOKEN }}
@@ -16,10 +16,13 @@ jobs:
16
16
  - "3.0.4"
17
17
  - "2.7.6"
18
18
  kubernetes_version:
19
+ - "1.27.3"
19
20
  - "1.26.4"
20
21
  - "1.24.13"
21
22
  - "1.23.17"
22
23
  include:
24
+ - kubernetes_version: "1.27.3"
25
+ kind_image: "kindest/node:v1.27.3@sha256:9dd3392d79af1b084671b05bcf65b21de476256ad1dcc853d9f3b10b4ac52dde"
23
26
  - kubernetes_version: "1.26.4"
24
27
  kind_image: "kindest/node:v1.26.4@sha256:a539833d26264444ab3b8f5e56e23fa3361436445fa23c864e6dec622458858f"
25
28
  - kubernetes_version: "1.24.13"
data/1.0-Upgrade.md CHANGED
@@ -7,7 +7,7 @@
7
7
  * There are breaking changes in the public API (such as the renaming of the `KubernetesDeploy` namespace to `Krane`, and the change in default values for different arguments of the public interface).
8
8
  * StatsD metrics will now be generated with the `krane` prefix.
9
9
  * `krane deploy` now considers all namespaced resources eligible for pruning, including
10
- custom resources. See [blacklist](https://github.com/Shopify/krane/blob/master/lib/krane/cluster_resource_discovery.rb#L20) for exceptions.
10
+ custom resources. See [blacklist](https://github.com/Shopify/krane/blob/main/lib/krane/cluster_resource_discovery.rb#L20) for exceptions.
11
11
  * `kubernetes-deploy` (now `krane deploy`) / `DeployTask` can no longer deploy global (non-namespaced) resources. A new command called `krane global-deploy` and a related class called `GlobalDeployTask` were added to replace that feature.
12
12
  * `krane deploy` will not render erb templates. Use `krane render | krane deploy --stdin` to reproduce this functionality.
13
13
  * If you attempt to install two gems that have conflicting executables, `gem install` will warn you but the most recently installed one will win.
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  ## next
2
2
 
3
+ # 3.4.0
4
+
5
+ - Use `prune-allowlist` instead of `prune-whitelist` for 1.26+ clusters. Clusters running 1.25 or less will continue to use `--prune-whitelist`. [#940](https://github.com/Shopify/krane/pull/940)
6
+
3
7
  ## 3.3.0
4
8
 
5
9
  *Enhancements*
@@ -288,7 +292,7 @@ It seems an issue when too many pods are referencing the same secret/configmap h
288
292
  # 1.0.0
289
293
 
290
294
  We've renamed the gem and cli to Krane.
291
- See our [migration guide](https://github.com/Shopify/krane/blob/master/1.0-Upgrade.md) to help navigate the breaking changes.
295
+ See our [migration guide](https://github.com/Shopify/krane/blob/main/1.0-Upgrade.md) to help navigate the breaking changes.
292
296
 
293
297
  ## 1.0.0.pre.2
294
298
 
data/CONTRIBUTING.md CHANGED
@@ -22,7 +22,7 @@ The following is a set of guidelines for contributing to krane. Please take a mo
22
22
  * [CI (External contributors)](#ci-external-contributors)
23
23
  ## Code of Conduct
24
24
 
25
- This project and everyone participating in it are governed by the [Code of Conduct](https://github.com/Shopify/krane/blob/master/CODE_OF_CONDUCT.md).
25
+ This project and everyone participating in it are governed by the [Code of Conduct](https://github.com/Shopify/krane/blob/main/CODE_OF_CONDUCT.md).
26
26
  By participating, you are expected to uphold this code. Please report unacceptable
27
27
  behavior to [krane@shopify.com](mailto:krane@shopify.com).
28
28
 
@@ -95,9 +95,9 @@ This gem uses subclasses of `KubernetesResource` to implement custom success/fai
95
95
  * `deploy_failed?`
96
96
  3. Adjust the `TIMEOUT` constant to an appropriate value for this type.
97
97
  4. Add the new class to list of resources in
98
- [`deploy_task.rb`](https://github.com/Shopify/krane/blob/master/lib/krane/deploy_task.rb#L8)
99
- 5. Add the new resource to the [prune whitelist](https://github.com/Shopify/krane/blob/master/lib/krane/deploy_task.rb#L81)
100
- 6. Add a basic example of the type to the hello-cloud [fixture set](https://github.com/Shopify/krane/tree/master/test/fixtures/hello-cloud) and appropriate assertions to `#assert_all_up` in [`hello_cloud.rb`](https://github.com/Shopify/krane/blob/master/test/helpers/fixture_sets/hello_cloud.rb). This will get you coverage in several existing tests, such as `test_full_hello_cloud_set_deploy_succeeds`.
98
+ [`deploy_task.rb`](https://github.com/Shopify/krane/blob/main/lib/krane/deploy_task.rb#L8)
99
+ 5. Add the new resource to the [prune whitelist](https://github.com/Shopify/krane/blob/main/lib/krane/deploy_task.rb#L81)
100
+ 6. Add a basic example of the type to the hello-cloud [fixture set](https://github.com/Shopify/krane/tree/main/test/fixtures/hello-cloud) and appropriate assertions to `#assert_all_up` in [`hello_cloud.rb`](https://github.com/Shopify/krane/blob/main/test/helpers/fixture_sets/hello_cloud.rb). This will get you coverage in several existing tests, such as `test_full_hello_cloud_set_deploy_succeeds`.
101
101
  7. Add tests for any edge cases you foresee.
102
102
 
103
103
  ### Contributor License Agreement
data/README.md CHANGED
@@ -1,6 +1,6 @@
1
- # krane [![Build status](https://badge.buildkite.com/35c56e797c3bbd6ba50053aefdded0715898cd8e8c86f7e462.svg?branch=master)](https://buildkite.com/shopify/krane)
1
+ # krane [![Build status](https://badge.buildkite.com/35c56e797c3bbd6ba50053aefdded0715898cd8e8c86f7e462.svg?branch=main)](https://buildkite.com/shopify/krane)
2
2
 
3
- > This project used to be called `kubernetes-deploy`. Check out our [migration guide](https://github.com/Shopify/krane/blob/master/1.0-Upgrade.md) for more information including details about breaking changes.
3
+ > This project used to be called `kubernetes-deploy`. Check out our [migration guide](https://github.com/Shopify/krane/blob/main/1.0-Upgrade.md) for more information including details about breaking changes.
4
4
 
5
5
 
6
6
  `krane` is a command line tool that helps you ship changes to a Kubernetes namespace and understand the result. At Shopify, we use it within our much-beloved, open-source [Shipit](https://github.com/Shopify/shipit-engine#kubernetes) deployment app.
@@ -93,6 +93,7 @@ Krane provides support for official upstream supported versions [Kubernetes](htt
93
93
  | 1.24 | Yes | -- |
94
94
  | 1.25 | No | -- |
95
95
  | 1.26 | Yes | -- |
96
+ | 1.27 | Yes | -- |
96
97
 
97
98
  ## Installation
98
99
 
@@ -336,7 +337,7 @@ status:
336
337
 
337
338
  ### Deploy walkthrough
338
339
 
339
- Let's walk through what happens when you run the `deploy` task with [this directory of templates](https://github.com/Shopify/krane/tree/master/test/fixtures/hello-cloud). This particular example uses ERB templates as well, so we'll use the [krane render](#krane-render) task to achieve that.
340
+ Let's walk through what happens when you run the `deploy` task with [this directory of templates](https://github.com/Shopify/krane/tree/main/test/fixtures/hello-cloud). This particular example uses ERB templates as well, so we'll use the [krane render](#krane-render) task to achieve that.
340
341
 
341
342
  You can test this out for yourself by running the following command:
342
343
 
@@ -403,7 +404,7 @@ In this phase, we:
403
404
 
404
405
  Just like in the previous phase, we essentially run `kubectl apply` on those templates and periodically check the cluster for the current status of each resource so we can display error or success information.
405
406
 
406
- If pruning is enabled (which, again, is the default), any [kind not listed in the blacklist](https://github.com/Shopify/krane/blob/master/lib/krane/cluster_resource_discovery.rb#L20) that we can find in the namespace but not in the templates will be removed. A particular message about pruning will be printed in the next phase if any resource matches this criteria.
407
+ If pruning is enabled (which, again, is the default), any [kind not listed in the blacklist](https://github.com/Shopify/krane/blob/main/lib/krane/cluster_resource_discovery.rb#L20) that we can find in the namespace but not in the templates will be removed. A particular message about pruning will be printed in the next phase if any resource matches this criteria.
407
408
 
408
409
  #### Result
409
410
 
@@ -653,13 +654,13 @@ This is a limitation of the current implementation.
653
654
  # Contributing
654
655
 
655
656
  We :heart: contributors! To make it easier for you and us we've written a
656
- [Contributing Guide](https://github.com/Shopify/krane/blob/master/CONTRIBUTING.md)
657
+ [Contributing Guide](https://github.com/Shopify/krane/blob/main/CONTRIBUTING.md)
657
658
 
658
659
 
659
660
  You can also reach out to us on our slack channel, #krane, at https://kubernetes.slack.com. All are welcome!
660
661
 
661
662
  ## Code of Conduct
662
- Everyone is expected to follow our [Code of Conduct](https://github.com/Shopify/krane/blob/master/CODE_OF_CONDUCT.md).
663
+ Everyone is expected to follow our [Code of Conduct](https://github.com/Shopify/krane/blob/main/CODE_OF_CONDUCT.md).
663
664
 
664
665
 
665
666
  # License
@@ -77,7 +77,7 @@ module Krane
77
77
  Hash[before_crs + crs + after_crs]
78
78
  end
79
79
 
80
- def prune_whitelist
80
+ def prune_allowlist
81
81
  cluster_resource_discoverer.prunable_resources(namespaced: true)
82
82
  end
83
83
 
@@ -192,7 +192,7 @@ module Krane
192
192
 
193
193
  def resource_deployer
194
194
  @resource_deployer ||= Krane::ResourceDeployer.new(task_config: @task_config,
195
- prune_whitelist: prune_whitelist, global_timeout: @global_timeout,
195
+ prune_allowlist: prune_allowlist, global_timeout: @global_timeout,
196
196
  selector: @selector, statsd_tags: statsd_tags, current_sha: @current_sha)
197
197
  end
198
198
 
@@ -108,7 +108,7 @@ module Krane
108
108
 
109
109
  def deploy!(resources, verify_result, prune)
110
110
  resource_deployer = ResourceDeployer.new(task_config: @task_config,
111
- prune_whitelist: prune_whitelist, global_timeout: @global_timeout,
111
+ prune_allowlist: prune_allowlist, global_timeout: @global_timeout,
112
112
  selector: @selector, statsd_tags: statsd_tags)
113
113
  resource_deployer.deploy!(resources, verify_result, prune)
114
114
  end
@@ -194,7 +194,7 @@ module Krane
194
194
  @kubectl ||= Kubectl.new(task_config: @task_config, log_failure_by_default: true)
195
195
  end
196
196
 
197
- def prune_whitelist
197
+ def prune_allowlist
198
198
  cluster_resource_discoverer.prunable_resources(namespaced: false)
199
199
  end
200
200
 
data/lib/krane/kubectl.rb CHANGED
@@ -12,6 +12,7 @@ module Krane
12
12
  DEFAULT_TIMEOUT = 15
13
13
  MAX_RETRY_DELAY = 16
14
14
  SERVER_DRY_RUN_MIN_VERSION = "1.13"
15
+ ALLOW_LIST_MIN_VERSION = "1.26"
15
16
 
16
17
  class ResourceNotFoundError < StandardError; end
17
18
 
@@ -112,6 +113,14 @@ module Krane
112
113
  "--dry-run=server"
113
114
  end
114
115
 
116
+ def allowlist_flag
117
+ if client_version >= Gem::Version.new(ALLOW_LIST_MIN_VERSION)
118
+ "--prune-allowlist"
119
+ else
120
+ "--prune-whitelist"
121
+ end
122
+ end
123
+
115
124
  private
116
125
 
117
126
  def build_command_from_options(args, use_namespace, use_context, output)
@@ -11,9 +11,9 @@ module Krane
11
11
  delegate :logger, to: :@task_config
12
12
  attr_reader :statsd_tags
13
13
 
14
- def initialize(task_config:, prune_whitelist:, global_timeout:, current_sha: nil, selector:, statsd_tags:)
14
+ def initialize(task_config:, prune_allowlist:, global_timeout:, current_sha: nil, selector:, statsd_tags:)
15
15
  @task_config = task_config
16
- @prune_whitelist = prune_whitelist
16
+ @prune_allowlist = prune_allowlist
17
17
  @global_timeout = global_timeout
18
18
  @current_sha = current_sha
19
19
  @selector = selector
@@ -102,7 +102,7 @@ module Krane
102
102
  # Apply can be done in one large batch, the rest have to be done individually
103
103
  applyables, individuals = resources.partition { |r| r.deploy_method == :apply }
104
104
  # Prunable resources should also applied so that they can be pruned
105
- pruneable_types = @prune_whitelist.map { |t| t.split("/").last }
105
+ pruneable_types = @prune_allowlist.map { |t| t.split("/").last }
106
106
  applyables += individuals.select { |r| pruneable_types.include?(r.type) && !r.deploy_method_override }
107
107
 
108
108
  individuals.each do |individual_resource|
@@ -147,14 +147,15 @@ module Krane
147
147
  r.deploy_started_at = Time.now.utc unless dry_run
148
148
  end
149
149
  command.push("-f", tmp_dir)
150
- if prune && @prune_whitelist.present?
150
+ if prune && @prune_allowlist.present?
151
151
  command.push("--prune")
152
152
  if @selector
153
153
  command.push("--selector", @selector.to_s)
154
154
  else
155
155
  command.push("--all")
156
156
  end
157
- @prune_whitelist.each { |type| command.push("--prune-whitelist=#{type}") }
157
+ allow_list_flag = kubectl.allowlist_flag
158
+ @prune_allowlist.each { |type| command.push("#{allow_list_flag}=#{type}") }
158
159
  end
159
160
 
160
161
  command.push(kubectl.dry_run_flag) if dry_run
data/lib/krane/version.rb CHANGED
@@ -1,4 +1,4 @@
1
1
  # frozen_string_literal: true
2
2
  module Krane
3
- VERSION = "3.3.0"
3
+ VERSION = "3.4.0"
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: 3.3.0
4
+ version: 3.4.0
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: 2023-08-08 00:00:00.000000000 Z
13
+ date: 2023-12-13 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: activesupport
@@ -414,6 +414,7 @@ files:
414
414
  - ".github/CODEOWNERS"
415
415
  - ".github/ISSUE_TEMPLATE.md"
416
416
  - ".github/pull_request_template.md"
417
+ - ".github/workflows/add-to-project.yml"
417
418
  - ".github/workflows/ci.yml"
418
419
  - ".github/workflows/cla.yml"
419
420
  - ".gitignore"
@@ -524,7 +525,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
524
525
  - !ruby/object:Gem::Version
525
526
  version: '0'
526
527
  requirements: []
527
- rubygems_version: 3.4.17
528
+ rubygems_version: 3.4.22
528
529
  signing_key:
529
530
  specification_version: 4
530
531
  summary: A command line tool that helps you ship changes to a Kubernetes namespace