kubeclient 4.9.3 → 4.10.1

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
  SHA256:
3
- metadata.gz: 3f402a08fef66f160df49d507487769073b248828869a2c874d78e947b1d6686
4
- data.tar.gz: 5d371f47861538f1e3e9deced8d1c41be1e0ca857ab8ed0607a75417948bb6f6
3
+ metadata.gz: 287033950a2bdc37a0d5829270cffa4c6db6802e315cd54db01d91a98961964b
4
+ data.tar.gz: c469d2d8a274bafb576f876d9f62a6e8384ef20943a0aa1b93f4f05dbeb721e2
5
5
  SHA512:
6
- metadata.gz: f06a16d02e150194d06a4aa2c37a23bd1b7bbef4daca379ed7f60dd9581310b98cd3026d86e90b1b23d861fe6186d05e003d41380cb1edeaf7a2e52ccc594520
7
- data.tar.gz: 7fbceb84c48af3bf4f28eadb05a2807a61196a26a66d72eb836ee5faa23d9a22fb1bd8e76fd16febd794007f1f0fd487000db40f543143789d33225c2350ccd0
6
+ metadata.gz: ccb85f7481dc3b20db30c919a94182e92fdab97e70e5f14f621449006d40a7626ff87351fbcb97e5affa5a1fab9207c7b6401c37d6c5b1cb1c4f68dc12ed25ce
7
+ data.tar.gz: 04fe6ad1089bc48590923fcae56274733c1063d5ece677bca85d97c1602c252c86bed15d067099ef1a618e475f95a387fcf58a75f58f70fe1152b4181bf43127
@@ -16,7 +16,9 @@ jobs:
16
16
  matrix:
17
17
  ruby: [ '2.5', '2.6', '2.7', '3.0', '3.1', 'ruby-head', 'truffleruby-head' ]
18
18
  os_and_command:
19
- - os: 'macos-latest'
19
+ - os: macos-latest
20
+ command: 'env TESTOPTS="--verbose" bundle exec rake test'
21
+ - os: windows-latest
20
22
  command: 'env TESTOPTS="--verbose" bundle exec rake test'
21
23
  - os: ubuntu-latest
22
24
  # Sometimes minitest starts and then just hangs printing nothing.
@@ -35,7 +37,6 @@ jobs:
35
37
  with:
36
38
  ruby-version: ${{ matrix.ruby }}
37
39
  bundler-cache: false # disable running 'bundle install' and caching installed gems see https://github.com/httprb/http/issues/572
38
- - run: gem install rake bundler
39
40
  - run: bundle install
40
41
  - run: ${{ matrix.os_and_command.command }}
41
42
  timeout-minutes: 10
data/CHANGELOG.md CHANGED
@@ -4,7 +4,27 @@ Notable changes to this project will be documented in this file.
4
4
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/).
5
5
  Kubeclient release versioning follows [SemVer](https://semver.org/).
6
6
 
7
- ## 4.9.3 2021-03-23
7
+ ## 4.10.1 2022-10-01
8
+
9
+ ### Removed
10
+
11
+ - Dropped debug logging about bearer token options that was added in 4.10.0. (#577)
12
+
13
+ ## 4.10.0 — 2022-08-29
14
+
15
+ ### Added
16
+
17
+ - When using `:bearer_token_file`, re-read the file on every request. (#566 closed #561)
18
+
19
+ Kubernetes version 1.21 graduated [BoundServiceAccountTokenVolume feature][] to beta
20
+ and enabled it by default, so standard in-cluster auth now uses short-lived tokens.
21
+
22
+ This changes allows a long-lived `Client` object to keep working when the token file gets
23
+ rotated. It's not optimized at all, if you feel the performance overhead, please report!
24
+
25
+ [BoundServiceAccountTokenVolume feature]: https://github.com/kubernetes/enhancements/issues/542
26
+
27
+ ## 4.9.3 — 2022-03-23
8
28
 
9
29
  ### Fixed
10
30
 
@@ -23,12 +43,16 @@ Kubeclient release versioning follows [SemVer](https://semver.org/).
23
43
  This was broken IN ALL RELEASES MADE BEFORE 2022, ever since
24
44
  [`Kubeclient::Config` was created](https://github.com/ManageIQ/kubeclient/pull/127/files#diff-32e70f2f6781a9e9c7b83ae5e7eaf5ffd068a05649077fa38f6789e72f3de837R41-R48).
25
45
 
46
+ [#554](https://github.com/ManageIQ/kubeclient/issues/554).
47
+
26
48
  - Bug fix: kubeconfig `insecure-skip-tls-verify` field was ignored.
27
49
  When kubeconfig did define custom CA, `Config` was returning hard-coded `VERIFY_PEER`.
28
50
 
29
51
  Now we honor it, return `VERIFY_NONE` iff kubeconfig has explicit
30
52
  `insecure-skip-tls-verify: true`, otherwise `VERIFY_PEER`.
31
53
 
54
+ [#555](https://github.com/ManageIQ/kubeclient/issues/555).
55
+
32
56
  - `Config`: fixed parsing of `certificate-authority` file containing concatenation of
33
57
  several certificates. Previously, server's cert was checked against only first CA cert,
34
58
  resulting in possible "certificate verify failed" errors.
data/README.md CHANGED
@@ -13,8 +13,7 @@ To learn more about groups and versions in kubernetes refer to [k8s docs](https:
13
13
 
14
14
  If you use `Kubeclient::Config`, all gem versions released before 2022 could return incorrect `ssl_options[:verify_ssl]`,
15
15
  endangering your connection and cluster credentials.
16
- See [latest CHANGELOG.md](https://github.com/ManageIQ/kubeclient/blob/master/CHANGELOG.md) for details and which versions got a fix.
17
- Open an issue if you want a backport to another version.
16
+ See https://github.com/ManageIQ/kubeclient/issues/554 for details and which versions got a fix.
18
17
 
19
18
  ## Installation
20
19
 
@@ -105,8 +104,8 @@ client = Kubeclient::Client.new(
105
104
  ### Authentication
106
105
 
107
106
  If you are using basic authentication or bearer tokens as described
108
- [here](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/authentication.md) then you can specify one
109
- of the following:
107
+ [here](https://github.com/GoogleCloudPlatform/kubernetes/blob/master/docs/authentication.md)
108
+ then you can specify one of the following:
110
109
 
111
110
  ```ruby
112
111
  auth_options = {
@@ -118,7 +117,7 @@ client = Kubeclient::Client.new(
118
117
  )
119
118
  ```
120
119
 
121
- or
120
+ or (fixed token, if it expires it's up to you to create a new `Client` object):
122
121
 
123
122
  ```ruby
124
123
  auth_options = {
@@ -129,7 +128,7 @@ client = Kubeclient::Client.new(
129
128
  )
130
129
  ```
131
130
 
132
- or
131
+ or (will automatically re-read the token if file is updated):
133
132
 
134
133
  ```ruby
135
134
  auth_options = {
data/RELEASING.md CHANGED
@@ -4,10 +4,6 @@
4
4
  Kubeclient release versioning follows [SemVer](https://semver.org/).
5
5
  At some point in time it is decided to release version x.y.z.
6
6
 
7
- ```bash
8
- RELEASE_BRANCH="master"
9
- ```
10
-
11
7
  ## 0. (once) Install gem-release, needed for several commands here:
12
8
 
13
9
  ```bash
@@ -16,13 +12,17 @@ gem install gem-release
16
12
 
17
13
  ## 1. PR(s) for changelog & bump
18
14
 
19
- Edit `CHANGELOG.md` as necessary. Even if all included changes remembered to update it, you should replace "Unreleased" section header with appropriate "x.y.z — 20yy-mm-dd" header.
20
-
21
- Bump `lib/kubeclient/version.rb` manually, or by using:
22
15
  ```bash
16
+ RELEASE_BRANCH="master"
23
17
  RELEASE_VERSION=x.y.z
24
18
 
25
19
  git checkout -b "release-$RELEASE_VERSION" $RELEASE_BRANCH
20
+ ```
21
+
22
+ Edit `CHANGELOG.md` as necessary. Even if all included changes remembered to update it, you should replace "Unreleased" section header with appropriate "x.y.z — 20yy-mm-dd" header.
23
+
24
+ Bump `lib/kubeclient/version.rb` manually, or by using:
25
+ ```bash
26
26
  # Won't work with uncommitted changes, you have to commit the changelog first.
27
27
  gem bump --version $RELEASE_VERSION
28
28
  git show # View version bump change.
@@ -46,7 +46,7 @@ Make sure we're locally after the bump PR *merge commit*:
46
46
  ```bash
47
47
  git checkout $RELEASE_BRANCH
48
48
  git status # Make sure there are no local changes
49
- git pull --ff-only https://github.com/abonas/kubeclient $RELEASE_BRANCH
49
+ git pull --ff-only https://github.com/ManageIQ/kubeclient $RELEASE_BRANCH
50
50
  git log -n1
51
51
  ```
52
52
 
data/kubeclient.gemspec CHANGED
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
 
24
24
  spec.add_development_dependency 'bundler', '>= 1.6'
25
25
  spec.add_development_dependency 'rake', '~> 12.0'
26
- spec.add_development_dependency 'minitest'
26
+ spec.add_development_dependency 'minitest', '~> 5.15.0'
27
27
  spec.add_development_dependency 'minitest-rg'
28
28
  spec.add_development_dependency 'webmock', '~> 3.0'
29
29
  spec.add_development_dependency 'vcr'
@@ -32,6 +32,8 @@ Gem::Specification.new do |spec|
32
32
  spec.add_development_dependency('mocha', '~> 1.5')
33
33
  spec.add_development_dependency 'openid_connect', '~> 1.1'
34
34
  spec.add_development_dependency 'net-smtp'
35
+ # needed on Windows, at least for openid_connect
36
+ spec.add_development_dependency 'tzinfo-data'
35
37
 
36
38
  spec.add_dependency 'jsonpath', '~> 1.0'
37
39
  spec.add_dependency 'rest-client', '~> 2.0'
@@ -78,7 +78,7 @@ module Kubeclient
78
78
  @api_version = version
79
79
  @headers = {}
80
80
  @ssl_options = ssl_options
81
- @auth_options = auth_options
81
+ @auth_options = auth_options.dup
82
82
  @socket_options = socket_options
83
83
  # Allow passing partial timeouts hash, without unspecified
84
84
  # @timeouts[:foo] == nil resulting in infinite timeout.
@@ -87,11 +87,11 @@ module Kubeclient
87
87
  @http_max_redirects = http_max_redirects
88
88
  @as = as
89
89
 
90
- if auth_options[:bearer_token]
91
- bearer_token(@auth_options[:bearer_token])
92
- elsif auth_options[:bearer_token_file]
90
+ if auth_options[:bearer_token_file]
93
91
  validate_bearer_token_file
94
92
  bearer_token(File.read(@auth_options[:bearer_token_file]))
93
+ elsif auth_options[:bearer_token]
94
+ bearer_token(@auth_options[:bearer_token])
95
95
  end
96
96
  end
97
97
 
@@ -136,6 +136,11 @@ module Kubeclient
136
136
  @discovered = true
137
137
  end
138
138
 
139
+ def get_headers
140
+ bearer_token(File.read(@auth_options[:bearer_token_file])) if @auth_options[:bearer_token_file]
141
+ @headers
142
+ end
143
+
139
144
  def self.parse_definition(kind, name)
140
145
  # Kubernetes gives us 3 inputs:
141
146
  # kind: "ComponentStatus", "NetworkPolicy", "Endpoints"
@@ -349,7 +354,7 @@ module Kubeclient
349
354
  ns_prefix = build_namespace_prefix(options[:namespace])
350
355
  response = handle_exception do
351
356
  rest_client[ns_prefix + resource_name]
352
- .get({ 'params' => params }.merge(@headers))
357
+ .get({ 'params' => params }.merge(get_headers))
353
358
  end
354
359
  format_response(options[:as] || @as, response.body, entity_type)
355
360
  end
@@ -362,7 +367,7 @@ module Kubeclient
362
367
  ns_prefix = build_namespace_prefix(namespace)
363
368
  response = handle_exception do
364
369
  rest_client[ns_prefix + resource_name + "/#{name}"]
365
- .get(@headers)
370
+ .get(get_headers)
366
371
  end
367
372
  format_response(options[:as] || @as, response.body)
368
373
  end
@@ -378,7 +383,7 @@ module Kubeclient
378
383
  rs.options.merge(
379
384
  method: :delete,
380
385
  url: rs.url,
381
- headers: { 'Content-Type' => 'application/json' }.merge(@headers),
386
+ headers: { 'Content-Type' => 'application/json' }.merge(get_headers),
382
387
  payload: payload
383
388
  )
384
389
  )
@@ -400,7 +405,7 @@ module Kubeclient
400
405
  hash[:apiVersion] = @api_group + @api_version
401
406
  response = handle_exception do
402
407
  rest_client[ns_prefix + resource_name]
403
- .post(hash.to_json, { 'Content-Type' => 'application/json' }.merge(@headers))
408
+ .post(hash.to_json, { 'Content-Type' => 'application/json' }.merge(get_headers))
404
409
  end
405
410
  format_response(@as, response.body)
406
411
  end
@@ -410,7 +415,7 @@ module Kubeclient
410
415
  ns_prefix = build_namespace_prefix(entity_config[:metadata][:namespace])
411
416
  response = handle_exception do
412
417
  rest_client[ns_prefix + resource_name + "/#{name}"]
413
- .put(entity_config.to_h.to_json, { 'Content-Type' => 'application/json' }.merge(@headers))
418
+ .put(entity_config.to_h.to_json, { 'Content-Type' => 'application/json' }.merge(get_headers))
414
419
  end
415
420
  format_response(@as, response.body)
416
421
  end
@@ -421,7 +426,7 @@ module Kubeclient
421
426
  rest_client[ns_prefix + resource_name + "/#{name}"]
422
427
  .patch(
423
428
  patch.to_json,
424
- { 'Content-Type' => "application/#{strategy}+json" }.merge(@headers)
429
+ { 'Content-Type' => "application/#{strategy}+json" }.merge(get_headers)
425
430
  )
426
431
  end
427
432
  format_response(@as, response.body)
@@ -434,7 +439,7 @@ module Kubeclient
434
439
  rest_client[ns_prefix + resource_name + "/#{name}"]
435
440
  .patch(
436
441
  resource.to_json,
437
- { 'Content-Type' => 'application/apply-patch+yaml' }.merge(@headers)
442
+ { 'Content-Type' => 'application/apply-patch+yaml' }.merge(get_headers)
438
443
  )
439
444
  end
440
445
  format_response(@as, response.body)
@@ -468,7 +473,7 @@ module Kubeclient
468
473
  ns = build_namespace_prefix(namespace)
469
474
  handle_exception do
470
475
  rest_client[ns + "pods/#{pod_name}/log"]
471
- .get({ 'params' => params }.merge(@headers))
476
+ .get({ 'params' => params }.merge(get_headers))
472
477
  end
473
478
  end
474
479
 
@@ -506,7 +511,7 @@ module Kubeclient
506
511
  ns_prefix = build_namespace_prefix(template[:metadata][:namespace])
507
512
  response = handle_exception do
508
513
  rest_client[ns_prefix + 'processedtemplates']
509
- .post(template.to_h.to_json, { 'Content-Type' => 'application/json' }.merge(@headers))
514
+ .post(template.to_h.to_json, { 'Content-Type' => 'application/json' }.merge(get_headers))
510
515
  end
511
516
  JSON.parse(response)
512
517
  end
@@ -519,7 +524,7 @@ module Kubeclient
519
524
  end
520
525
 
521
526
  def api
522
- response = handle_exception { create_rest_client.get(@headers) }
527
+ response = handle_exception { create_rest_client.get(get_headers) }
523
528
  JSON.parse(response)
524
529
  end
525
530
 
@@ -593,7 +598,7 @@ module Kubeclient
593
598
  end
594
599
 
595
600
  def fetch_entities
596
- JSON.parse(handle_exception { rest_client.get(@headers) })
601
+ JSON.parse(handle_exception { rest_client.get(get_headers) })
597
602
  end
598
603
 
599
604
  def bearer_token(bearer_token)
@@ -638,11 +643,11 @@ module Kubeclient
638
643
  options = {
639
644
  basic_auth_user: @auth_options[:username],
640
645
  basic_auth_password: @auth_options[:password],
641
- headers: @headers,
646
+ headers: get_headers,
642
647
  http_proxy_uri: @http_proxy_uri,
643
648
  http_max_redirects: http_max_redirects
644
649
  }
645
-
650
+ options[:bearer_token_file] = @auth_options[:bearer_token_file] if @auth_options[:bearer_token_file]
646
651
  if uri.scheme == 'https'
647
652
  options[:ssl] = {
648
653
  ca_file: @ssl_options[:ca_file],
@@ -1,4 +1,4 @@
1
1
  # Kubernetes REST-API Client
2
2
  module Kubeclient
3
- VERSION = '4.9.3'.freeze
3
+ VERSION = '4.10.1'.freeze
4
4
  end
@@ -79,6 +79,7 @@ module Kubeclient
79
79
  end
80
80
 
81
81
  def build_client_options
82
+ @http_options[:headers][:Authorization] = "Bearer #{File.read(@http_options[:bearer_token_file])}" if @http_options[:bearer_token_file]
82
83
  client_options = {
83
84
  headers: @http_options[:headers],
84
85
  proxy: using_proxy
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: kubeclient
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.9.3
4
+ version: 4.10.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alissa Bonas
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-03-23 00:00:00.000000000 Z
11
+ date: 2022-10-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -42,16 +42,16 @@ dependencies:
42
42
  name: minitest
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - ">="
45
+ - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '0'
47
+ version: 5.15.0
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
- - - ">="
52
+ - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '0'
54
+ version: 5.15.0
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest-rg
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -164,6 +164,20 @@ dependencies:
164
164
  - - ">="
165
165
  - !ruby/object:Gem::Version
166
166
  version: '0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: tzinfo-data
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - ">="
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ type: :development
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - ">="
179
+ - !ruby/object:Gem::Version
180
+ version: '0'
167
181
  - !ruby/object:Gem::Dependency
168
182
  name: jsonpath
169
183
  requirement: !ruby/object:Gem::Requirement