k8s-client 0.4.2 → 0.5.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: 98257d45d7ff1949d131973394aa84a2a64be7dfa12b92d85bf7fd5f1a3bbda2
4
- data.tar.gz: f780afbd3a9c04ef458d38118407c2e183db8ea11611147019b54814f8a58f49
3
+ metadata.gz: 2f06cad5e9cbad737bd7a94f169f56c71f6a323d06f3cfc68dd01ba1733abc95
4
+ data.tar.gz: 694b1835b27534c3c86841a5d58763b6494331f7078e89115d8c6f6bc50f6260
5
5
  SHA512:
6
- metadata.gz: f4a9de098915276f609aaf788e08a774402fdefd3bb986e46ceceb5a93be4c898d1bbe7342a631e46924c89786f2e484e3137a552b0dcdc16681d43d08895b01
7
- data.tar.gz: 8cd038b1b627e2e482f92ca8fea5968185357264ae4a0cd6c1f28fc9ad1cb15e1358230800223700024c43fd985e692590118d1f1b0a8d1d479113cfb7fefa6a
6
+ metadata.gz: d7f1cb6a943da7f7d9e1ecbf396d50f1c7bd481425ed68232b8a99340c20ec5fd7304d89a56c312c1eabf078d7989a37bd22353c7c9a88806ee8c13029d586c5
7
+ data.tar.gz: aa6b067859e0838f7b1240d282cf6bdb5d2dc1187ead8247409a45c29b0bc9fa2c827fe844323ab7e664a3910716b6646d65e862c4d3c596bd7f95ab10a548ff
data/.gitignore CHANGED
@@ -6,6 +6,10 @@
6
6
  /pkg/
7
7
  /spec/reports/
8
8
  /tmp/
9
+ Gemfile.lock
10
+ .ruby-version
9
11
 
10
12
  # rspec failure tracking
11
13
  .rspec_status
14
+ .rspec-local
15
+
@@ -0,0 +1,176 @@
1
+ # Relaxed.Ruby.Style
2
+ ## Version 2.2
3
+
4
+ Style/Alias:
5
+ Enabled: false
6
+ StyleGuide: http://relaxed.ruby.style/#stylealias
7
+
8
+ Style/AsciiComments:
9
+ Enabled: false
10
+ StyleGuide: http://relaxed.ruby.style/#styleasciicomments
11
+
12
+ Style/BeginBlock:
13
+ Enabled: false
14
+ StyleGuide: http://relaxed.ruby.style/#stylebeginblock
15
+
16
+ Style/BlockDelimiters:
17
+ Enabled: false
18
+ StyleGuide: http://relaxed.ruby.style/#styleblockdelimiters
19
+
20
+ Style/CommentAnnotation:
21
+ Enabled: false
22
+ StyleGuide: http://relaxed.ruby.style/#stylecommentannotation
23
+
24
+ Style/Documentation:
25
+ Enabled: false
26
+ StyleGuide: http://relaxed.ruby.style/#styledocumentation
27
+
28
+ Layout/DotPosition:
29
+ Enabled: false
30
+ StyleGuide: http://relaxed.ruby.style/#layoutdotposition
31
+
32
+ Style/DoubleNegation:
33
+ Enabled: false
34
+ StyleGuide: http://relaxed.ruby.style/#styledoublenegation
35
+
36
+ Style/EndBlock:
37
+ Enabled: false
38
+ StyleGuide: http://relaxed.ruby.style/#styleendblock
39
+
40
+ Style/FormatString:
41
+ Enabled: false
42
+ StyleGuide: http://relaxed.ruby.style/#styleformatstring
43
+
44
+ Style/IfUnlessModifier:
45
+ Enabled: false
46
+ StyleGuide: http://relaxed.ruby.style/#styleifunlessmodifier
47
+
48
+ Style/Lambda:
49
+ Enabled: false
50
+ StyleGuide: http://relaxed.ruby.style/#stylelambda
51
+
52
+ Style/ModuleFunction:
53
+ Enabled: false
54
+ StyleGuide: http://relaxed.ruby.style/#stylemodulefunction
55
+
56
+ Style/MultilineBlockChain:
57
+ Enabled: false
58
+ StyleGuide: http://relaxed.ruby.style/#stylemultilineblockchain
59
+
60
+ Style/NegatedIf:
61
+ Enabled: false
62
+ StyleGuide: http://relaxed.ruby.style/#stylenegatedif
63
+
64
+ Style/NegatedWhile:
65
+ Enabled: false
66
+ StyleGuide: http://relaxed.ruby.style/#stylenegatedwhile
67
+
68
+ Style/ParallelAssignment:
69
+ Enabled: false
70
+ StyleGuide: http://relaxed.ruby.style/#styleparallelassignment
71
+
72
+ Style/PercentLiteralDelimiters:
73
+ Enabled: false
74
+ StyleGuide: http://relaxed.ruby.style/#stylepercentliteraldelimiters
75
+
76
+ Style/PerlBackrefs:
77
+ Enabled: false
78
+ StyleGuide: http://relaxed.ruby.style/#styleperlbackrefs
79
+
80
+ Style/Semicolon:
81
+ Enabled: false
82
+ StyleGuide: http://relaxed.ruby.style/#stylesemicolon
83
+
84
+ Style/SignalException:
85
+ Enabled: false
86
+ StyleGuide: http://relaxed.ruby.style/#stylesignalexception
87
+
88
+ Style/SingleLineBlockParams:
89
+ Enabled: false
90
+ StyleGuide: http://relaxed.ruby.style/#stylesinglelineblockparams
91
+
92
+ Style/SingleLineMethods:
93
+ Enabled: false
94
+ StyleGuide: http://relaxed.ruby.style/#stylesinglelinemethods
95
+
96
+ Layout/SpaceBeforeBlockBraces:
97
+ Enabled: false
98
+ StyleGuide: http://relaxed.ruby.style/#layoutspacebeforeblockbraces
99
+
100
+ Layout/SpaceInsideParens:
101
+ Enabled: false
102
+ StyleGuide: http://relaxed.ruby.style/#layoutspaceinsideparens
103
+
104
+ Style/SpecialGlobalVars:
105
+ Enabled: false
106
+ StyleGuide: http://relaxed.ruby.style/#stylespecialglobalvars
107
+
108
+ Style/StringLiterals:
109
+ Enabled: false
110
+ StyleGuide: http://relaxed.ruby.style/#stylestringliterals
111
+
112
+ # Style/TrailingCommaInArguments:
113
+ # Enabled: false
114
+ # StyleGuide: http://relaxed.ruby.style/#styletrailingcommainarguments
115
+ #
116
+ # Style/TrailingCommaInArrayLiteral:
117
+ # Enabled: false
118
+ # StyleGuide: http://relaxed.ruby.style/#styletrailingcommainarrayliteral
119
+ #
120
+ # Style/TrailingCommaInHashLiteral:
121
+ # Enabled: false
122
+ # StyleGuide: http://relaxed.ruby.style/#styletrailingcommainhashliteral
123
+
124
+ Style/WhileUntilModifier:
125
+ Enabled: false
126
+ StyleGuide: http://relaxed.ruby.style/#stylewhileuntilmodifier
127
+
128
+ Style/WordArray:
129
+ Enabled: false
130
+ StyleGuide: http://relaxed.ruby.style/#stylewordarray
131
+
132
+ Lint/AmbiguousRegexpLiteral:
133
+ Enabled: false
134
+ StyleGuide: http://relaxed.ruby.style/#lintambiguousregexpliteral
135
+
136
+ Lint/AssignmentInCondition:
137
+ Enabled: false
138
+ StyleGuide: http://relaxed.ruby.style/#lintassignmentincondition
139
+
140
+ Metrics/AbcSize:
141
+ Enabled: false
142
+
143
+ Metrics/BlockNesting:
144
+ Enabled: false
145
+
146
+ Metrics/ClassLength:
147
+ Enabled: false
148
+
149
+ Metrics/ModuleLength:
150
+ Enabled: false
151
+
152
+ Metrics/CyclomaticComplexity:
153
+ Enabled: false
154
+
155
+ Metrics/LineLength:
156
+ Enabled: false
157
+
158
+ Metrics/MethodLength:
159
+ Enabled: false
160
+
161
+ Metrics/ParameterLists:
162
+ Enabled: false
163
+
164
+ Metrics/PerceivedComplexity:
165
+ Enabled: false
166
+
167
+ Naming/VariableName: # disabled because camelCased params are used in kube api/yamls
168
+ Enabled: false
169
+
170
+ Naming/UncommunicativeMethodParamName: # disabled because camelCased params are used in kube api/yamls
171
+ Enabled: false
172
+
173
+ Naming/FileName:
174
+ Enabled: true
175
+ Exclude:
176
+ - lib/k8s-client.rb # ignored because gem name is k8s-client, so 'require k8s-client' and gem 'k8s-client' in Gemfile work
data/.rubocop.yml ADDED
@@ -0,0 +1,57 @@
1
+ inherit_from: .rubocop.relaxed.yml
2
+
3
+ AllCops:
4
+ Exclude:
5
+ - spec/**/*
6
+ - Gemfile
7
+ - "*.gemspec"
8
+ - bundler/**/*
9
+ TargetRubyVersion: 2.4
10
+
11
+ Style/PercentLiteralDelimiters:
12
+ PreferredDelimiters:
13
+ default: ()
14
+ '%i': '()'
15
+ '%I': '()'
16
+ '%r': '{}'
17
+ '%w': '()'
18
+ '%W': '()'
19
+
20
+ Style/FormatString:
21
+ EnforcedStyle: percent
22
+
23
+ Style/FrozenStringLiteralComment:
24
+ EnforcedStyle: always
25
+
26
+ Style/WordArray:
27
+ Enabled: true
28
+ MinSize: 3
29
+
30
+ Style/SymbolArray:
31
+ Enabled: true
32
+ MinSize: 3
33
+
34
+ Gemspec/OrderedDependencies:
35
+ Enabled: false
36
+
37
+ Style/PerlBackrefs:
38
+ Enabled: true
39
+
40
+ Layout/SpaceInsideParens:
41
+ Enabled: true
42
+
43
+ Style/SpecialGlobalVars:
44
+ Enabled: true
45
+
46
+ Style/Alias:
47
+ Enabled: true
48
+
49
+ Style/BeginBlock:
50
+ Enabled: true
51
+
52
+ Naming/UncommunicativeMethodParamName:
53
+ AllowedNames:
54
+ - cn
55
+
56
+ Metrics/BlockLength:
57
+ Enabled: false
data/Rakefile CHANGED
@@ -1,6 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require "bundler/gem_tasks"
2
4
  require "rspec/core/rake_task"
5
+ require 'rubocop/rake_task'
3
6
 
4
7
  RSpec::Core::RakeTask.new(:spec)
5
8
 
6
- task :default => :spec
9
+ RuboCop::RakeTask.new(:rubocop).tap do |task|
10
+ task.options = %w(--fail-level A -S --format c)
11
+ if RUBY_ENGINE == 'ruby' && RbConfig::CONFIG['host_os'] !~ /mswin|msys|mingw|cygwin|bccwin|wince|emc/
12
+ task.options << '--parallel'
13
+ end
14
+ end
15
+
16
+ task default: [:spec, :rubocop]
data/bin/k8s-client CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'optparse'
4
5
  require 'uri'
@@ -35,17 +36,17 @@ Options = Struct.new(
35
36
  :api,
36
37
  :list_api_resources,
37
38
  :patch_deployment,
38
- :replicas,
39
+ :replicas
39
40
  )
40
41
 
41
- options = Options.new()
42
+ options = Options.new
42
43
  options.create_resources = []
43
44
  options.update_resources = []
44
45
  options.delete_resources = []
45
46
 
46
47
  logger = Logger.new(STDERR)
47
48
 
48
- parser = OptionParser.new do |parser|
49
+ opt_parser = OptionParser.new do |parser|
49
50
  parser.on('--debug-api') do
50
51
  K8s::Logging.debug!
51
52
  K8s::Transport.debug!
@@ -77,7 +78,7 @@ parser = OptionParser.new do |parser|
77
78
  parser.on('--prefetch-resources', TrueClass) do |bool|
78
79
  options.prefetch_resources = bool
79
80
  end
80
- parser.on('--list-resource-kinds', TrueClass) do |bool|
81
+ parser.on('--list-resource-kinds', TrueClass) do |_bool|
81
82
  options.list_resource_kinds = true
82
83
  end
83
84
  parser.on('-n', '--namespace=NAMESPACE') do |namespace|
@@ -157,22 +158,20 @@ parser = OptionParser.new do |parser|
157
158
  end
158
159
  end
159
160
 
160
- parser.parse!
161
+ opt_parser.parse!
161
162
 
162
163
  if options.config
163
164
  overrides = {}
164
165
  overrides[:ssl_verify_peer] = false if options.insecure_skip_tls_verify
165
166
 
166
167
  client = K8s::Client.config(options.config,
167
- server: options.server,
168
- **overrides
169
- )
168
+ server: options.server,
169
+ **overrides)
170
170
  elsif options.in_cluster_config
171
171
  client = K8s::Client.in_cluster_config
172
172
  else
173
173
  client = K8s.client(options.server,
174
- ssl_verify_peer: !options.insecure_skip_tls_verify,
175
- )
174
+ ssl_verify_peer: !options.insecure_skip_tls_verify)
176
175
  end
177
176
 
178
177
  logger.info "Kube server version: #{client.version.gitVersion}"
@@ -182,22 +181,20 @@ if options.prefetch_resources
182
181
  end
183
182
 
184
183
  if options.list_resource_kinds
185
- client.resources.sort_by{|r| r.kind}.each do |resource_client|
184
+ client.resources.sort_by(&:kind).each do |resource_client|
186
185
  next if resource_client.subresource?
187
186
 
188
187
  puts "#{resource_client.kind} => #{resource_client.api_version} #{resource_client.name}"
189
188
  end
190
189
  end
191
190
 
192
- if options.all_namespaces
193
- namespace = nil # all
194
- elsif options.namespace
195
- namespace = options.namespace
196
- elsif options.config && ns = options.config.context.namespace
197
- namespace = ns
198
- else
199
- namespace = nil # all
200
- end
191
+ namespace = if options.all_namespaces
192
+ nil # all
193
+ elsif options.namespace
194
+ options.namespace
195
+ elsif options.config && ns = options.config.context.namespace
196
+ ns
197
+ end
201
198
 
202
199
  if options.list_api_resources
203
200
  logger.info "List resource types for api=#{options.list_api_resources}..."
@@ -216,7 +213,7 @@ elsif options.list_resources
216
213
  client.apis(prefetch_resources: true).each do |api|
217
214
  logger.info "api=#{api.api_version}"
218
215
 
219
- resources = api.resources.select{|resource| resource.list? }
216
+ resources = api.resources.select(&:list?)
220
217
 
221
218
  resources.each do |resource|
222
219
  logger.info "api=#{api.api_version} resource=#{resource.name}"
@@ -262,8 +259,8 @@ if options.delete_pods
262
259
 
263
260
  pods = client.api('v1').resource('pods', namespace: namespace).delete_collection(labelSelector: options.label_selector)
264
261
 
265
- pods.each do |pod|
266
- logger.info "Deleted pod=#{pod.metadata.name} in namespace=#{pod.metadata.namespace} on node=#{pod.spec.nodeName}"
262
+ pods.each do |pod_instance|
263
+ logger.info "Deleted pod=#{pod_instance.metadata.name} in namespace=#{pod_instance.metadata.namespace} on node=#{pod_instance.spec.nodeName}"
267
264
  end
268
265
  end
269
266
 
@@ -273,15 +270,15 @@ if options.create_service
273
270
  kind: 'Service',
274
271
  metadata: {
275
272
  namespace: namespace,
276
- name: options.create_service,
273
+ name: options.create_service
277
274
  },
278
275
  spec: {
279
276
  type: options.service_type,
280
277
  ports: [
281
- { port: options.service_port },
278
+ { port: options.service_port }
282
279
  ],
283
- selector: Hash[options.label_selector.split('=', 2)],
284
- },
280
+ selector: Hash[options.label_selector.split('=', 2)]
281
+ }
285
282
  )
286
283
 
287
284
  logger.info "Create service=#{service.metadata.name} in namespace=#{service.metadata.namespace}"
@@ -291,19 +288,19 @@ if options.create_service
291
288
  logger.debug { service }
292
289
  end
293
290
 
294
- for resource in options.create_resources
291
+ options.create_resources.each do |resource|
295
292
  resource = client.create_resource(resource)
296
293
 
297
294
  logger.info "Created #{resource.apiVersion} resource #{resource.kind} #{resource.metadata.name} in namespace #{resource.metadata.namespace}:\n#{JSON.pretty_generate(resource)}"
298
295
  end
299
296
 
300
- for resource in options.update_resources
297
+ options.update_resources.each do |resource|
301
298
  resource = client.update_resource(resource)
302
299
 
303
300
  logger.info "Updated #{resource.apiVersion} resource #{resource.kind} #{resource.metadata.name} in namespace #{resource.metadata.namespace}:\n#{JSON.pretty_generate(resource)}"
304
301
  end
305
302
 
306
- for resource in options.delete_resources
303
+ options.delete_resources.each do |resource|
307
304
  begin
308
305
  resource = client.delete_resource(resource)
309
306
 
@@ -321,13 +318,12 @@ if stack = options.delete_stack
321
318
  elsif options.stack
322
319
  logger.info "Apply stack #{options.stack.name}..."
323
320
 
324
- options.stack.apply(client,
325
- prune: options.prune_stack,
326
- )
321
+ options.stack.apply(client, prune: options.prune_stack)
327
322
  end
328
323
 
329
324
  if name = options.patch_deployment
330
- client.api('apps/v1').resource('deployments', namespace: namespace).merge_patch(name, {
331
- spec: { replicas: options.replicas },
332
- })
325
+ client.api('apps/v1').resource('deployments', namespace: namespace).merge_patch(
326
+ name,
327
+ spec: { replicas: options.replicas }
328
+ )
333
329
  end