k8s-ruby 0.10.5 → 0.11.0

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: 279c695901bc2ffe4376b39eb1e7dd33df57ae64381441f601a358f052da1e0d
4
- data.tar.gz: 23a33081c4d7d75bf59af32fa4657ececb46a54a2d2ca5d22933dc31ebe15308
3
+ metadata.gz: 88dee10d641080bb5896aab32b8fd522415ce8e94a2135d68b06a3b9467ab6f8
4
+ data.tar.gz: 36d072c3d850a13419a1964afa0934494b220e3a9b82c359699ce13cf417356a
5
5
  SHA512:
6
- metadata.gz: bde359b7945227ffc1d8d81f705a411fd5a60ef119a2fabf244c20d5383eafd09e307f54f98bc86fdfa60ca40b8bbf358b33f76363756b164f09946f9a1e4ce3
7
- data.tar.gz: e4477e706fed4fae304cd4836144c5ffead93162d1bfa5f2d203d3b1d9db362717303394eefb159320257177588aa9a72304022b34f2a1288c78d0180624cb78
6
+ metadata.gz: 278cf65ef4d9795795b31352720831f82b90110a8463d6f792eddd6c8357e1549d70d859d113e042f1ef6543b2b43bd0d1aa07e178dbfbdd279bcc6d25907f51
7
+ data.tar.gz: 104f06d0534076270881b857f85b180c13cd8fe3a6b995f1335a69ae57844abc3f01f3665c58748b33791537173de0de35d9b09e7b7f3d0b4cefac61586ba2c3
data/.gitignore CHANGED
@@ -8,6 +8,7 @@
8
8
  /tmp/
9
9
  Gemfile.lock
10
10
  .ruby-version
11
+ /.byebug_history
11
12
 
12
13
  # rspec failure tracking
13
14
  .rspec_status
data/.rubocop.relaxed.yml CHANGED
@@ -152,7 +152,7 @@ Metrics/ModuleLength:
152
152
  Metrics/CyclomaticComplexity:
153
153
  Enabled: false
154
154
 
155
- Metrics/LineLength:
155
+ Layout/LineLength:
156
156
  Enabled: false
157
157
 
158
158
  Metrics/MethodLength:
@@ -167,10 +167,31 @@ Metrics/PerceivedComplexity:
167
167
  Naming/VariableName: # disabled because camelCased params are used in kube api/yamls
168
168
  Enabled: false
169
169
 
170
- Naming/UncommunicativeMethodParamName: # disabled because camelCased params are used in kube api/yamls
170
+ Naming/MethodParameterName: # disabled because camelCased params are used in kube api/yamls
171
171
  Enabled: false
172
172
 
173
173
  Naming/FileName:
174
174
  Enabled: true
175
175
  Exclude:
176
176
  - lib/k8s-ruby.rb # ignored because gem name is k8s-ruby, so 'require k8s-ruby' and gem 'k8s-ruby' in Gemfile work
177
+
178
+ Layout/SpaceAroundMethodCallOperator:
179
+ Enabled: true
180
+
181
+ Lint/RaiseException:
182
+ Enabled: true
183
+
184
+ Lint/StructNewOverride:
185
+ Enabled: true
186
+
187
+ Style/ExponentialNotation:
188
+ Enabled: true
189
+
190
+ Style/HashEachMethods:
191
+ Enabled: true
192
+
193
+ Style/HashTransformKeys:
194
+ Enabled: true
195
+
196
+ Style/HashTransformValues:
197
+ Enabled: true
data/.rubocop.yml CHANGED
@@ -49,7 +49,7 @@ Style/Alias:
49
49
  Style/BeginBlock:
50
50
  Enabled: true
51
51
 
52
- Naming/UncommunicativeMethodParamName:
52
+ Naming/MethodParameterName:
53
53
  AllowedNames:
54
54
  - cn
55
55
 
data/Dockerfile CHANGED
@@ -1,10 +1,14 @@
1
- FROM ruby:2.4.3
1
+ ARG BASE_IMAGE=ruby:2.7
2
+ FROM ${BASE_IMAGE}
2
3
 
3
4
  WORKDIR /app
4
5
 
5
6
  COPY Gemfile *.gemspec ./
6
- COPY lib/k8s/client/version.rb ./lib/k8s/client/
7
+ COPY lib/k8s/ruby/version.rb ./lib/k8s/ruby/
8
+
9
+ RUN gem install bundler:2.3.4
7
10
  RUN bundle install
11
+ RUN bundle update --bundler
8
12
 
9
13
  COPY . .
10
14
 
data/README.md CHANGED
@@ -1,6 +1,19 @@
1
1
  # K8s::Client provided by k8s-ruby
2
2
 
3
- Ruby client library for the Kubernetes (1.9+) API
3
+ Ruby client library for the Kubernetes (1.9+) API.
4
+
5
+ The `k8s-ruby` project is a fork of
6
+ [kontena/k8s-client](https://github.com/kontena/k8s-client).
7
+
8
+ Unfortunately the company
9
+ [Kontena.io went bankcrupt](https://blog.kontena.io/farewell/) at
10
+ the end of the year 2019. They had created many wonderful Ruby projects which we
11
+ are grateful.
12
+
13
+ The `k8s-ruby` library is a community effort to keep `k8s-client`
14
+ maintained without any dependencies to the former Kontena.io organization.
15
+ The library was renamed in order to publish it to Rubygems without conflicting
16
+ with `k8s-client`.
4
17
 
5
18
  ## Highlights
6
19
 
@@ -211,4 +224,4 @@ end
211
224
 
212
225
  ## Contributing
213
226
 
214
- Bug reports and pull requests are welcome on GitHub at [rdxnet/k8s-ruby](https://github.com/rdxnet/k8s-ruby).
227
+ Bug reports and pull requests are welcome on GitHub at [k8s-ruby/k8s-ruby](https://github.com/k8s-ruby/k8s-ruby).
data/docker-compose.yaml CHANGED
@@ -1,10 +1,27 @@
1
- rspec:
2
- build: .
3
- volumes:
4
- - .:/app
5
- entrypoint: bundle exec rspec
6
- k8s-ruby:
7
- build: .
8
- volumes:
9
- - .:/app
10
- entrypoint: bundle exec bin/k8s-client
1
+ services:
2
+ rspec-2.6:
3
+ build:
4
+ context: .
5
+ args:
6
+ BASE_IMAGE: ruby:2.6
7
+ volumes:
8
+ - .:/app
9
+ entrypoint: bundle exec rspec
10
+
11
+ rspec-2.7:
12
+ build:
13
+ context: .
14
+ args:
15
+ BASE_IMAGE: ruby:2.7
16
+ volumes:
17
+ - .:/app
18
+ entrypoint: bundle exec rspec
19
+ # # Fails, please fix
20
+ # rspec-3.0:
21
+ # build:
22
+ # context: .
23
+ # args:
24
+ # BASE_IMAGE: ruby:3.0
25
+ # volumes:
26
+ # - .:/app
27
+ # entrypoint: bundle exec rspec
data/k8s-ruby.gemspec CHANGED
@@ -11,7 +11,7 @@ Gem::Specification.new do |spec|
11
11
  spec.license = "Apache-2.0"
12
12
 
13
13
  spec.summary = "Kubernetes client library for Ruby"
14
- spec.homepage = "https://github.com/rdxnet/k8s-ruby"
14
+ spec.homepage = "https://github.com/k8s-ruby/k8s-ruby"
15
15
 
16
16
  # Specify which files should be added to the gem when it is released.
17
17
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
@@ -21,7 +21,7 @@ Gem::Specification.new do |spec|
21
21
  spec.bindir = "bin"
22
22
  spec.executables = []
23
23
  spec.require_paths = ["lib"]
24
- spec.required_ruby_version = '~> 2.4'
24
+ spec.required_ruby_version = '>= 2.4'
25
25
 
26
26
  spec.add_runtime_dependency "excon", "~> 0.71"
27
27
  spec.add_runtime_dependency "dry-struct", "~> 0.5.0"
@@ -33,8 +33,9 @@ Gem::Specification.new do |spec|
33
33
  spec.add_runtime_dependency "yaml-safe_load_stream", "~> 0.1"
34
34
 
35
35
  spec.add_development_dependency "bundler", ">= 1.17", "< 3.0"
36
- spec.add_development_dependency "rake", "~> 10.0"
36
+ spec.add_development_dependency "rake", ">= 12.3.3"
37
37
  spec.add_development_dependency "rspec", "~> 3.7"
38
38
  spec.add_development_dependency "webmock", "~> 3.6.2"
39
- spec.add_development_dependency "rubocop", "~> 0.59"
39
+ spec.add_development_dependency "rubocop", "~> 0.82"
40
+ spec.add_development_dependency "byebug", "~> 11.1"
40
41
  end
data/lib/k8s/client.rb CHANGED
@@ -167,7 +167,7 @@ module K8s
167
167
  @transport.gets(*api_paths, response_class: K8s::API::MetaV1::APIResourceList, skip_missing: skip_missing).each do |api_resource_list|
168
168
  api(api_resource_list.groupVersion).api_resources = api_resource_list.resources if api_resource_list
169
169
  end
170
- rescue K8s::Error::NotFound, K8s::Error::ServiceUnavailable # rubocop:disable Lint/HandleExceptions
170
+ rescue K8s::Error::NotFound, K8s::Error::ServiceUnavailable
171
171
  # kubernetes api is in unstable state
172
172
  # because this is only performance optimization, better to skip prefetch and move on
173
173
  end
@@ -3,6 +3,6 @@
3
3
  module K8s
4
4
  class Ruby
5
5
  # Updated on releases using semver.
6
- VERSION = "0.10.5"
6
+ VERSION = "0.11.0"
7
7
  end
8
8
  end
data/lib/k8s/stack.rb CHANGED
@@ -94,7 +94,7 @@ module K8s
94
94
 
95
95
  # @param client [K8s::Client]
96
96
  # @return [Array<K8s::Resource>]
97
- def apply(client, prune: true)
97
+ def apply(client, prune: true, patch: true)
98
98
  server_resources = client.get_resources(resources)
99
99
 
100
100
  resources.zip(server_resources).map do |resource, server_resource|
@@ -104,10 +104,11 @@ module K8s
104
104
  elsif server_resource.metadata.annotations&.dig(@checksum_annotation) != resource.checksum
105
105
  logger.info "Update resource #{resource.apiVersion}:#{resource.kind}/#{resource.metadata.name} in namespace #{resource.metadata.namespace} with checksum=#{resource.checksum}"
106
106
  r = prepare_resource(resource)
107
- if server_resource.can_patch?(@last_config_annotation)
107
+ if patch && server_resource.can_patch?(@last_config_annotation)
108
+ # Patch: apply changes to specific fields only
108
109
  keep_resource! client.patch_resource(server_resource, server_resource.merge_patch_ops(r.to_hash, @last_config_annotation))
109
110
  else
110
- # try to update with PUT
111
+ # Replace (PUT): replace complete object
111
112
  keep_resource! client.update_resource(server_resource.merge(prepare_resource(resource)))
112
113
  end
113
114
  else
data/lib/k8s/transport.rb CHANGED
@@ -94,12 +94,16 @@ module K8s
94
94
  # @param auth_provider [K8s::Config::UserAuthProvider]
95
95
  # @return [String]
96
96
  def self.token_from_auth_provider(auth_provider)
97
- auth_data = `#{auth_provider['cmd-path']} #{auth_provider['cmd-args']}`.strip
98
- if auth_provider['token-key']
99
- json_path = JsonPath.new(auth_provider['token-key'][1...-1])
100
- json_path.first(auth_data)
97
+ if auth_provider['id-token']
98
+ json_path = auth_provider['id-token']
101
99
  else
102
- auth_data
100
+ auth_data = `#{auth_provider['cmd-path']} #{auth_provider['cmd-args']}`.strip
101
+ if auth_provider['token-key']
102
+ json_path = JsonPath.new(auth_provider['token-key'][1...-1])
103
+ json_path.first(auth_data)
104
+ else
105
+ auth_data
106
+ end
103
107
  end
104
108
  end
105
109
 
@@ -133,8 +137,14 @@ module K8s
133
137
  port = ENV['KUBERNETES_SERVICE_PORT_HTTPS'].to_s
134
138
  raise(K8s::Error::Configuration, "in_cluster_config failed: KUBERNETES_SERVICE_PORT_HTTPS environment not set") if port.empty?
135
139
 
140
+ host_with_ipv6_brackets_if_needed = if host.include? "::"
141
+ "[#{host}]"
142
+ else
143
+ host
144
+ end
145
+
136
146
  new(
137
- "https://#{host}:#{port}",
147
+ "https://#{host_with_ipv6_brackets_if_needed}:#{port}",
138
148
  ssl_verify_peer: options.key?(:ssl_verify_peer) ? options.delete(:ssl_verify_peer) : true,
139
149
  ssl_ca_file: options.delete(:ssl_ca_file) || File.join((ENV['TELEPRESENCE_ROOT'] || '/'), 'var/run/secrets/kubernetes.io/serviceaccount/ca.crt'),
140
150
  auth_token: options.delete(:auth_token) || File.read(File.join((ENV['TELEPRESENCE_ROOT'] || '/'), 'var/run/secrets/kubernetes.io/serviceaccount/token')),
metadata CHANGED
@@ -1,15 +1,15 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: k8s-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.10.5
4
+ version: 0.11.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - rdx.net
8
8
  - Kontena, Inc.
9
- autorequire:
9
+ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2020-01-29 00:00:00.000000000 Z
12
+ date: 2022-01-12 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: excon
@@ -147,16 +147,16 @@ dependencies:
147
147
  name: rake
148
148
  requirement: !ruby/object:Gem::Requirement
149
149
  requirements:
150
- - - "~>"
150
+ - - ">="
151
151
  - !ruby/object:Gem::Version
152
- version: '10.0'
152
+ version: 12.3.3
153
153
  type: :development
154
154
  prerelease: false
155
155
  version_requirements: !ruby/object:Gem::Requirement
156
156
  requirements:
157
- - - "~>"
157
+ - - ">="
158
158
  - !ruby/object:Gem::Version
159
- version: '10.0'
159
+ version: 12.3.3
160
160
  - !ruby/object:Gem::Dependency
161
161
  name: rspec
162
162
  requirement: !ruby/object:Gem::Requirement
@@ -191,15 +191,29 @@ dependencies:
191
191
  requirements:
192
192
  - - "~>"
193
193
  - !ruby/object:Gem::Version
194
- version: '0.59'
194
+ version: '0.82'
195
+ type: :development
196
+ prerelease: false
197
+ version_requirements: !ruby/object:Gem::Requirement
198
+ requirements:
199
+ - - "~>"
200
+ - !ruby/object:Gem::Version
201
+ version: '0.82'
202
+ - !ruby/object:Gem::Dependency
203
+ name: byebug
204
+ requirement: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - "~>"
207
+ - !ruby/object:Gem::Version
208
+ version: '11.1'
195
209
  type: :development
196
210
  prerelease: false
197
211
  version_requirements: !ruby/object:Gem::Requirement
198
212
  requirements:
199
213
  - - "~>"
200
214
  - !ruby/object:Gem::Version
201
- version: '0.59'
202
- description:
215
+ version: '11.1'
216
+ description:
203
217
  email:
204
218
  - firstname.lastname@rdx.net
205
219
  executables: []
@@ -215,7 +229,6 @@ files:
215
229
  - LICENSE
216
230
  - README.md
217
231
  - Rakefile
218
- - bin/k8s-client
219
232
  - docker-compose.yaml
220
233
  - k8s-ruby.gemspec
221
234
  - lib/k8s-ruby.rb
@@ -239,17 +252,17 @@ files:
239
252
  - lib/k8s/stack.rb
240
253
  - lib/k8s/transport.rb
241
254
  - lib/k8s/util.rb
242
- homepage: https://github.com/rdxnet/k8s-ruby
255
+ homepage: https://github.com/k8s-ruby/k8s-ruby
243
256
  licenses:
244
257
  - Apache-2.0
245
258
  metadata: {}
246
- post_install_message:
259
+ post_install_message:
247
260
  rdoc_options: []
248
261
  require_paths:
249
262
  - lib
250
263
  required_ruby_version: !ruby/object:Gem::Requirement
251
264
  requirements:
252
- - - "~>"
265
+ - - ">="
253
266
  - !ruby/object:Gem::Version
254
267
  version: '2.4'
255
268
  required_rubygems_version: !ruby/object:Gem::Requirement
@@ -258,8 +271,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
258
271
  - !ruby/object:Gem::Version
259
272
  version: '0'
260
273
  requirements: []
261
- rubygems_version: 3.0.6
262
- signing_key:
274
+ rubygems_version: 3.0.9
275
+ signing_key:
263
276
  specification_version: 4
264
277
  summary: Kubernetes client library for Ruby
265
278
  test_files: []
data/bin/k8s-client DELETED
@@ -1,337 +0,0 @@
1
- #!/usr/bin/env ruby
2
- # frozen_string_literal: true
3
-
4
- require 'optparse'
5
- require 'uri'
6
- require 'k8s-ruby'
7
-
8
- Options = Struct.new(
9
- :in_cluster_config,
10
- :config,
11
- :server,
12
- :insecure_skip_tls_verify,
13
- :prefetch_resources,
14
- :list_resource_kinds,
15
- :namespace,
16
- :all_namespaces,
17
- :label_selector,
18
- :pipeline_list,
19
- :list_resources,
20
- :list_pods,
21
- :update_node,
22
- :node_unschedulable,
23
- :delete_pod,
24
- :delete_pods,
25
- :create_service,
26
- :service_type,
27
- :service_port,
28
- :resources,
29
- :create_resources,
30
- :update_resources,
31
- :delete_resources,
32
- :stack_name,
33
- :stack,
34
- :prune_stack,
35
- :delete_stack,
36
- :api,
37
- :list_api_resources,
38
- :patch_deployment,
39
- :replicas,
40
- :version
41
- )
42
-
43
- options = Options.new
44
- options.create_resources = []
45
- options.update_resources = []
46
- options.delete_resources = []
47
-
48
- logger = Logger.new(STDERR)
49
-
50
- opt_parser = OptionParser.new do |parser|
51
- parser.on('--debug-api') do
52
- K8s::Logging.debug!
53
- K8s::Transport.debug!
54
- end
55
- parser.on('--debug') do
56
- K8s::Logging.debug!
57
- K8s::Transport.verbose!
58
- end
59
- parser.on('--verbose') do
60
- K8s::Logging.verbose!
61
- K8s::Transport.quiet!
62
- end
63
- parser.on('--quiet') do
64
- K8s::Logging.quiet!
65
- K8s::Transport.quiet!
66
- end
67
- parser.on('--version') do
68
- options.version = true
69
- end
70
- parser.on('--in-cluster-config') do
71
- options.in_cluster_config = true
72
- end
73
- parser.on('--kubeconfig=PATH') do |path|
74
- options.config = K8s::Config.load_file(path)
75
- end
76
- parser.on('--server=SERVER') do |server|
77
- options.server = server
78
- end
79
- parser.on('--insecure-skip-tls-verify', TrueClass) do |bool|
80
- options.insecure_skip_tls_verify = bool
81
- end
82
- parser.on('--prefetch-resources', TrueClass) do |bool|
83
- options.prefetch_resources = bool
84
- end
85
- parser.on('--list-resource-kinds', TrueClass) do |_bool|
86
- options.list_resource_kinds = true
87
- end
88
- parser.on('-n', '--namespace=NAMESPACE') do |namespace|
89
- options.namespace = namespace
90
- end
91
- parser.on('--all-namespaces') do
92
- options.all_namespaces = true
93
- end
94
- parser.on('-l', '--label-selector=LABEL=VALUE') do |selector|
95
- options.label_selector = selector
96
- end
97
- parser.on('--pipeline-list') do
98
- options.pipeline_list = true
99
- end
100
- parser.on('--list-resources') do
101
- options.list_resources = true
102
- end
103
- parser.on('--list-pods') do
104
- options.list_pods = true
105
- end
106
- parser.on('--update-node=NODE') do |node|
107
- options.update_node = node
108
- end
109
- parser.on('--node-unschedulable=BOOL', TrueClass) do |bool|
110
- options.node_unschedulable = bool
111
- end
112
- parser.on('--delete-pod=POD') do |pod|
113
- options.delete_pod = pod
114
- end
115
- parser.on('--delete-pods') do
116
- options.delete_pods = true
117
- end
118
- parser.on('--create-service=SERVICE') do |service|
119
- options.create_service = service
120
- end
121
- parser.on('--service-type=SERVICE-TYPE') do |type|
122
- options.service_type = type
123
- end
124
- parser.on('--service-port=PORT', Integer) do |port|
125
- options.service_port = port
126
- end
127
- parser.on('--resource-file=path') do |path|
128
- options.resources = K8s::Resource.from_files(path)
129
- end
130
- parser.on('--create') do
131
- options.create_resources = options.resources
132
- end
133
- parser.on('--update') do
134
- options.update_resources = options.resources
135
- end
136
- parser.on('--delete') do
137
- options.delete_resources = options.resources
138
- end
139
- parser.on('--stack-name=NAME') do |name|
140
- options.stack_name = name
141
- end
142
- parser.on('--stack=PATH') do |path|
143
- options.stack = K8s::Stack.load(options.stack_name || File.basename(path, ".*"), path)
144
- end
145
- parser.on('--prune-stack', TrueClass) do |flag|
146
- options.prune_stack = flag
147
- end
148
- parser.on('--delete-stack') do
149
- options.delete_stack = options.stack
150
- end
151
- parser.on('--api=API') do |api|
152
- options.api = api
153
- end
154
- parser.on('--list-api-resources') do
155
- options.list_api_resources = options.api
156
- end
157
- parser.on('--patch-deployment=NAME') do |name|
158
- options.patch_deployment = name
159
- end
160
- parser.on('--replicas=COUNT', Integer) do |count|
161
- options.replicas = count
162
- end
163
- end
164
-
165
- opt_parser.parse!
166
-
167
- if options.config
168
- overrides = {}
169
- overrides[:ssl_verify_peer] = false if options.insecure_skip_tls_verify
170
-
171
- client = K8s::Client.config(options.config,
172
- server: options.server,
173
- **overrides)
174
- elsif options.in_cluster_config
175
- client = K8s::Client.in_cluster_config
176
- else
177
- client = K8s.client(options.server,
178
- ssl_verify_peer: !options.insecure_skip_tls_verify)
179
- end
180
-
181
- if options.version
182
- logger.info client.version
183
- else
184
- logger.info "Kube server version: #{client.version.gitVersion}"
185
- end
186
-
187
- if options.prefetch_resources
188
- client.apis(prefetch_resources: true)
189
- end
190
-
191
- if options.list_resource_kinds
192
- client.resources.sort_by(&:kind).each do |resource_client|
193
- next if resource_client.subresource?
194
-
195
- puts "#{resource_client.kind} => #{resource_client.api_version} #{resource_client.name}"
196
- end
197
- end
198
-
199
- namespace = if options.all_namespaces
200
- nil # all
201
- elsif options.namespace
202
- options.namespace
203
- elsif options.config && ns = options.config.context.namespace
204
- ns
205
- end
206
-
207
- if options.list_api_resources
208
- logger.info "List resource types for api=#{options.list_api_resources}..."
209
-
210
- client.api(options.list_api_resources).resources do |api_resource|
211
- logger.info "api=#{api_resource.api_version} resource=#{api_resource.resource} subresource=#{api_resource.subresource}"
212
- end
213
- end
214
-
215
- if options.pipeline_list
216
- objects = client.list_resources(namespace: namespace, labelSelector: options.label_selector)
217
- objects.each do |object|
218
- logger.info "api=#{object.apiVersion} kind=#{object.kind} namespace=#{object.metadata.namespace} name=#{object.metadata.name}"
219
- end
220
- elsif options.list_resources
221
- client.apis(prefetch_resources: true).each do |api|
222
- logger.info "api=#{api.api_version}"
223
-
224
- resources = api.resources.select(&:list?)
225
-
226
- resources.each do |resource|
227
- logger.info "api=#{api.api_version} resource=#{resource.name}"
228
-
229
- objects = resource.list(labelSelector: options.label_selector)
230
- objects.each do |object|
231
- logger.info "api=#{object.apiVersion} kind=#{object.kind} namespace=#{object.metadata.namespace} name=#{object.metadata.name}"
232
- end
233
- end
234
- end
235
- end
236
-
237
- if options.list_pods
238
- client.api('v1').resource('pods', namespace: namespace).list(labelSelector: options.label_selector).each do |pod|
239
- puts "namespace=#{pod.metadata.namespace} pod: #{pod.metadata.name} node=#{pod.spec.nodeName}"
240
- end
241
- end
242
-
243
- if options.update_node
244
- node = client.api('v1').resource('nodes').get(options.update_node)
245
-
246
- puts "Update node=#{node.metadata.name}..."
247
-
248
- if !options.node_unschedulable.nil?
249
- puts "Set node=#{node.metadata.name} unschedulable: #{node.spec.unschedulable} => #{options.node_unschedulable}"
250
-
251
- node[:spec][:unschedulable] = options.node_unschedulable
252
- end
253
-
254
- client.api('v1').resource('nodes').update_resource(node)
255
- end
256
-
257
- if options.delete_pod
258
- logger.info "Delete pod=#{options.delete_pod} in namespace=#{namespace}"
259
-
260
- pod = client.api('v1').resource('pods', namespace: namespace).delete(options.delete_pod)
261
-
262
- logger.debug { pod.metadata }
263
- end
264
-
265
- if options.delete_pods
266
- logger.info "Delete pods with labelSelector=#{options.label_selector} in namespace=#{namespace}"
267
-
268
- pods = client.api('v1').resource('pods', namespace: namespace).delete_collection(labelSelector: options.label_selector)
269
-
270
- pods.each do |pod_instance|
271
- logger.info "Deleted pod=#{pod_instance.metadata.name} in namespace=#{pod_instance.metadata.namespace} on node=#{pod_instance.spec.nodeName}"
272
- end
273
- end
274
-
275
- if options.create_service
276
- service = K8s::Resource.new(
277
- apiVersion: 'v1',
278
- kind: 'Service',
279
- metadata: {
280
- namespace: namespace,
281
- name: options.create_service
282
- },
283
- spec: {
284
- type: options.service_type,
285
- ports: [
286
- { port: options.service_port }
287
- ],
288
- selector: Hash[options.label_selector.split('=', 2)]
289
- }
290
- )
291
-
292
- logger.info "Create service=#{service.metadata.name} in namespace=#{service.metadata.namespace}"
293
-
294
- service = client.api('v1').resource('services').create_resource(service)
295
-
296
- logger.debug { service }
297
- end
298
-
299
- options.create_resources.each do |resource|
300
- resource = client.create_resource(resource)
301
-
302
- logger.info "Created #{resource.apiVersion} resource #{resource.kind} #{resource.metadata.name} in namespace #{resource.metadata.namespace}:\n#{JSON.pretty_generate(resource)}"
303
- end
304
-
305
- options.update_resources.each do |resource|
306
- resource = client.update_resource(resource)
307
-
308
- logger.info "Updated #{resource.apiVersion} resource #{resource.kind} #{resource.metadata.name} in namespace #{resource.metadata.namespace}:\n#{JSON.pretty_generate(resource)}"
309
- end
310
-
311
- options.delete_resources.each do |resource|
312
- begin
313
- resource = client.delete_resource(resource)
314
-
315
- logger.info "Deleted #{resource.apiVersion} resource #{resource.kind} #{resource.metadata.name} in namespace #{resource.metadata.namespace}:\n#{JSON.pretty_generate(resource)}"
316
- rescue K8s::Error::NotFound => e
317
- logger.info "Skip #{resource.apiVersion} resource #{resource.kind} #{resource.metadata.name} in namespace #{resource.metadata.namespace}: #{e}"
318
- end
319
- end
320
-
321
- if stack = options.delete_stack
322
- logger.info "Delete stack #{stack.name}..."
323
-
324
- stack.delete(client)
325
-
326
- elsif options.stack
327
- logger.info "Apply stack #{options.stack.name}..."
328
-
329
- options.stack.apply(client, prune: options.prune_stack)
330
- end
331
-
332
- if name = options.patch_deployment
333
- client.api('apps/v1').resource('deployments', namespace: namespace).merge_patch(
334
- name,
335
- spec: { replicas: options.replicas }
336
- )
337
- end