wavefront-cli 4.2.1 → 4.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -0
- data/.rubocop.yml +1 -14
- data/.travis.yml +4 -4
- data/Gemfile +2 -0
- data/HISTORY.md +82 -60
- data/Rakefile +2 -0
- data/bin/wf +1 -0
- data/lib/wavefront-cli/alert.rb +13 -5
- data/lib/wavefront-cli/apitoken.rb +2 -0
- data/lib/wavefront-cli/base.rb +95 -47
- data/lib/wavefront-cli/cloudintegration.rb +6 -0
- data/lib/wavefront-cli/command_mixins/acl.rb +6 -1
- data/lib/wavefront-cli/command_mixins/tag.rb +2 -0
- data/lib/wavefront-cli/commands/.rubocop.yml +3 -4
- data/lib/wavefront-cli/commands/alert.rb +2 -1
- data/lib/wavefront-cli/commands/apitoken.rb +6 -0
- data/lib/wavefront-cli/commands/base.rb +30 -21
- data/lib/wavefront-cli/commands/cloudintegration.rb +2 -0
- data/lib/wavefront-cli/commands/config.rb +2 -0
- data/lib/wavefront-cli/commands/dashboard.rb +2 -0
- data/lib/wavefront-cli/commands/derivedmetric.rb +2 -0
- data/lib/wavefront-cli/commands/event.rb +3 -1
- data/lib/wavefront-cli/commands/integration.rb +2 -1
- data/lib/wavefront-cli/commands/link.rb +2 -0
- data/lib/wavefront-cli/commands/message.rb +2 -0
- data/lib/wavefront-cli/commands/metric.rb +2 -0
- data/lib/wavefront-cli/commands/notificant.rb +2 -0
- data/lib/wavefront-cli/commands/proxy.rb +2 -0
- data/lib/wavefront-cli/commands/query.rb +2 -0
- data/lib/wavefront-cli/commands/savedsearch.rb +2 -0
- data/lib/wavefront-cli/commands/serviceaccount.rb +58 -0
- data/lib/wavefront-cli/commands/settings.rb +2 -0
- data/lib/wavefront-cli/commands/source.rb +3 -1
- data/lib/wavefront-cli/commands/user.rb +4 -1
- data/lib/wavefront-cli/commands/usergroup.rb +3 -0
- data/lib/wavefront-cli/commands/webhook.rb +2 -0
- data/lib/wavefront-cli/commands/window.rb +2 -0
- data/lib/wavefront-cli/commands/write.rb +2 -0
- data/lib/wavefront-cli/config.rb +23 -12
- data/lib/wavefront-cli/constants.rb +10 -4
- data/lib/wavefront-cli/controller.rb +53 -22
- data/lib/wavefront-cli/dashboard.rb +3 -0
- data/lib/wavefront-cli/derivedmetric.rb +12 -11
- data/lib/wavefront-cli/display/alert.rb +7 -4
- data/lib/wavefront-cli/display/apitoken.rb +2 -0
- data/lib/wavefront-cli/display/base.rb +34 -8
- data/lib/wavefront-cli/display/cloudintegration.rb +4 -2
- data/lib/wavefront-cli/display/dashboard.rb +2 -0
- data/lib/wavefront-cli/display/derivedmetric.rb +2 -0
- data/lib/wavefront-cli/display/distribution.rb +2 -0
- data/lib/wavefront-cli/display/event.rb +2 -0
- data/lib/wavefront-cli/display/externallink.rb +2 -0
- data/lib/wavefront-cli/display/integration.rb +2 -0
- data/lib/wavefront-cli/display/maintenancewindow.rb +2 -0
- data/lib/wavefront-cli/display/message.rb +7 -3
- data/lib/wavefront-cli/display/metric.rb +3 -1
- data/lib/wavefront-cli/display/notificant.rb +3 -1
- data/lib/wavefront-cli/display/printer/long.rb +36 -11
- data/lib/wavefront-cli/display/printer/sparkline.rb +3 -0
- data/lib/wavefront-cli/display/printer/terse.rb +6 -1
- data/lib/wavefront-cli/display/proxy.rb +2 -0
- data/lib/wavefront-cli/display/query.rb +35 -24
- data/lib/wavefront-cli/display/savedsearch.rb +2 -0
- data/lib/wavefront-cli/display/serviceaccount.rb +60 -0
- data/lib/wavefront-cli/display/settings.rb +2 -0
- data/lib/wavefront-cli/display/source.rb +18 -4
- data/lib/wavefront-cli/display/user.rb +56 -10
- data/lib/wavefront-cli/display/usergroup.rb +25 -19
- data/lib/wavefront-cli/display/webhook.rb +2 -0
- data/lib/wavefront-cli/display/write.rb +6 -2
- data/lib/wavefront-cli/event.rb +83 -62
- data/lib/wavefront-cli/exception.rb +3 -0
- data/lib/wavefront-cli/externallink.rb +6 -4
- data/lib/wavefront-cli/integration.rb +2 -0
- data/lib/wavefront-cli/maintenancewindow.rb +28 -17
- data/lib/wavefront-cli/message.rb +4 -0
- data/lib/wavefront-cli/metric.rb +4 -1
- data/lib/wavefront-cli/notificant.rb +2 -0
- data/lib/wavefront-cli/opt_handler.rb +2 -0
- data/lib/wavefront-cli/output/base.rb +8 -3
- data/lib/wavefront-cli/output/csv.rb +2 -0
- data/lib/wavefront-cli/output/csv/base.rb +2 -0
- data/lib/wavefront-cli/output/csv/query.rb +14 -7
- data/lib/wavefront-cli/output/hcl.rb +2 -0
- data/lib/wavefront-cli/output/hcl/alert.rb +2 -0
- data/lib/wavefront-cli/output/hcl/base.rb +10 -4
- data/lib/wavefront-cli/output/hcl/dashboard.rb +17 -8
- data/lib/wavefront-cli/output/hcl/notificant.rb +2 -0
- data/lib/wavefront-cli/output/hcl/stdlib/array.rb +2 -0
- data/lib/wavefront-cli/output/hcl/stdlib/string.rb +2 -0
- data/lib/wavefront-cli/output/json.rb +2 -0
- data/lib/wavefront-cli/output/ruby.rb +2 -0
- data/lib/wavefront-cli/output/wavefront.rb +2 -0
- data/lib/wavefront-cli/output/wavefront/query.rb +7 -4
- data/lib/wavefront-cli/output/yaml.rb +2 -0
- data/lib/wavefront-cli/proxy.rb +15 -3
- data/lib/wavefront-cli/query.rb +14 -12
- data/lib/wavefront-cli/savedsearch.rb +2 -0
- data/lib/wavefront-cli/serviceaccount.rb +179 -0
- data/lib/wavefront-cli/settings.rb +2 -0
- data/lib/wavefront-cli/source.rb +2 -0
- data/lib/wavefront-cli/stdlib/array.rb +3 -0
- data/lib/wavefront-cli/stdlib/string.rb +17 -11
- data/lib/wavefront-cli/user.rb +10 -4
- data/lib/wavefront-cli/usergroup.rb +4 -2
- data/lib/wavefront-cli/version.rb +3 -1
- data/lib/wavefront-cli/webhook.rb +2 -0
- data/lib/wavefront-cli/write.rb +80 -46
- data/spec/.rubocop.yml +3 -16
- data/spec/constants.rb +21 -0
- data/spec/spec_helper.rb +8 -422
- data/spec/support/command_base.rb +82 -0
- data/spec/support/minitest_assertions.rb +262 -0
- data/spec/support/output_tester.rb +32 -0
- data/spec/support/supported_commands.rb +19 -0
- data/spec/test_mixins/acl.rb +169 -0
- data/spec/test_mixins/delete.rb +25 -0
- data/spec/test_mixins/deleteundelete.rb +106 -0
- data/spec/test_mixins/describe.rb +24 -0
- data/spec/test_mixins/dump.rb +43 -0
- data/spec/test_mixins/general.rb +11 -0
- data/spec/test_mixins/history.rb +35 -0
- data/spec/test_mixins/import.rb +65 -0
- data/spec/test_mixins/list.rb +29 -0
- data/spec/test_mixins/search.rb +98 -0
- data/spec/test_mixins/set.rb +47 -0
- data/spec/test_mixins/tag.rb +99 -0
- data/spec/wavefront-cli/alert_spec.rb +288 -111
- data/spec/wavefront-cli/apitoken_spec.rb +53 -24
- data/spec/wavefront-cli/base_spec.rb +9 -27
- data/spec/wavefront-cli/cloudintegration_spec.rb +65 -29
- data/spec/wavefront-cli/commands/alert_spec.rb +1 -0
- data/spec/wavefront-cli/commands/base_spec.rb +15 -13
- data/spec/wavefront-cli/commands/cloudintegration_spec.rb +1 -0
- data/spec/wavefront-cli/commands/config_spec.rb +3 -0
- data/spec/wavefront-cli/commands/dashboard_spec.rb +1 -0
- data/spec/wavefront-cli/commands/derivedmetric_spec.rb +1 -0
- data/spec/wavefront-cli/commands/event_spec.rb +1 -0
- data/spec/wavefront-cli/commands/link_spec.rb +1 -0
- data/spec/wavefront-cli/commands/message_spec.rb +1 -0
- data/spec/wavefront-cli/commands/metric_spec.rb +1 -0
- data/spec/wavefront-cli/commands/proxy_spec.rb +1 -0
- data/spec/wavefront-cli/commands/query_spec.rb +1 -0
- data/spec/wavefront-cli/commands/webhook_spec.rb +1 -0
- data/spec/wavefront-cli/commands/window_spec.rb +1 -0
- data/spec/wavefront-cli/commands/write_spec.rb +1 -0
- data/spec/wavefront-cli/config_spec.rb +25 -14
- data/spec/wavefront-cli/controller_spec.rb +13 -3
- data/spec/wavefront-cli/dashboard_spec.rb +125 -76
- data/spec/wavefront-cli/derivedmetric_spec.rb +83 -67
- data/spec/wavefront-cli/display/base_spec.rb +5 -7
- data/spec/wavefront-cli/display/printer/long_spec.rb +20 -16
- data/spec/wavefront-cli/display/printer/terse_spec.rb +5 -4
- data/spec/wavefront-cli/event_spec.rb +360 -18
- data/spec/wavefront-cli/externallink_spec.rb +92 -58
- data/spec/wavefront-cli/integration_spec.rb +129 -31
- data/spec/wavefront-cli/maintenancewindow_spec.rb +270 -32
- data/spec/wavefront-cli/message_spec.rb +73 -30
- data/spec/wavefront-cli/metric_spec.rb +60 -22
- data/spec/wavefront-cli/notificant_spec.rb +45 -32
- data/spec/wavefront-cli/opt_handler_spec.rb +4 -1
- data/spec/wavefront-cli/output/csv/query_spec.rb +21 -19
- data/spec/wavefront-cli/output/csv_spec.rb +5 -2
- data/spec/wavefront-cli/output/hcl_spec.rb +5 -2
- data/spec/wavefront-cli/output/helpers.rb +18 -0
- data/spec/wavefront-cli/output/json_spec.rb +3 -1
- data/spec/wavefront-cli/output/ruby_spec.rb +3 -1
- data/spec/wavefront-cli/output/wavefront/query_spec.rb +3 -1
- data/spec/wavefront-cli/output/wavefront_spec.rb +6 -4
- data/spec/wavefront-cli/output/yaml_spec.rb +3 -1
- data/spec/wavefront-cli/proxy_spec.rb +49 -27
- data/spec/wavefront-cli/query_spec.rb +174 -92
- data/spec/wavefront-cli/resources/responses/query.json +1 -0
- data/spec/wavefront-cli/resources/updates/alert.json +15 -0
- data/spec/wavefront-cli/resources/updates/dashboard.json +1 -0
- data/spec/wavefront-cli/savedsearch_spec.rb +35 -18
- data/spec/wavefront-cli/serviceaccount_spec.rb +399 -0
- data/spec/wavefront-cli/settings_spec.rb +42 -11
- data/spec/wavefront-cli/source_spec.rb +120 -23
- data/spec/wavefront-cli/stdlib/array_spec.rb +2 -1
- data/spec/wavefront-cli/stdlib/string_spec.rb +9 -6
- data/spec/wavefront-cli/user_spec.rb +278 -108
- data/spec/wavefront-cli/usergroup_spec.rb +152 -102
- data/spec/wavefront-cli/webhook_spec.rb +30 -15
- data/spec/wavefront-cli/write_spec.rb +25 -1
- data/wavefront-cli.gemspec +5 -3
- metadata +65 -21
- data/spec/wavefront-cli/commands/spec_helper.rb +0 -3
- data/spec/wavefront-cli/display/spec_helper.rb +0 -3
data/lib/wavefront-cli/base.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'yaml'
|
2
4
|
require 'json'
|
3
5
|
require 'wavefront-sdk/validators'
|
@@ -91,7 +93,7 @@ module WavefrontCli
|
|
91
93
|
def validate_input
|
92
94
|
validate_id if options[:'<id>']
|
93
95
|
validate_tags if options[:'<tag>']
|
94
|
-
|
96
|
+
extra_validation if respond_to?(:extra_validation)
|
95
97
|
end
|
96
98
|
|
97
99
|
def validate_tags(key = :'<tag>')
|
@@ -112,7 +114,9 @@ module WavefrontCli
|
|
112
114
|
end
|
113
115
|
|
114
116
|
def failed_validation_message(input)
|
115
|
-
format("'
|
117
|
+
format("'%<value>s' is not a valid %<thing>s ID.",
|
118
|
+
value: input,
|
119
|
+
thing: klass_word)
|
116
120
|
end
|
117
121
|
|
118
122
|
# Make a wavefront-sdk credentials object from standard
|
@@ -121,9 +125,9 @@ module WavefrontCli
|
|
121
125
|
# @return [Hash] containing `token` and `endpoint`.
|
122
126
|
#
|
123
127
|
def mk_creds
|
124
|
-
{ token:
|
128
|
+
{ token: options[:token],
|
125
129
|
endpoint: options[:endpoint],
|
126
|
-
agent:
|
130
|
+
agent: "wavefront-cli-#{WF_CLI_VERSION}" }
|
127
131
|
end
|
128
132
|
|
129
133
|
# Make a common wavefront-sdk options object from standard CLI
|
@@ -133,8 +137,8 @@ module WavefrontCli
|
|
133
137
|
# @return [Hash] containing `debug`, `verbose`, and `noop`.
|
134
138
|
#
|
135
139
|
def mk_opts
|
136
|
-
ret = { debug:
|
137
|
-
noop:
|
140
|
+
ret = { debug: options[:debug],
|
141
|
+
noop: options[:noop] }
|
138
142
|
|
139
143
|
ret[:verbose] = options[:noop] ? true : options[:verbose]
|
140
144
|
|
@@ -219,12 +223,14 @@ module WavefrontCli
|
|
219
223
|
exit if options[:noop]
|
220
224
|
|
221
225
|
check_response_blocks(data)
|
226
|
+
warning_message(data.status)
|
222
227
|
status_error_handler(data, method)
|
223
228
|
handle_response(data.response, format_var, method)
|
224
229
|
end
|
225
230
|
|
226
231
|
def status_error_handler(data, method)
|
227
232
|
return if check_status(data.status)
|
233
|
+
|
228
234
|
handle_error(method, data.status.code) if format_var == :human
|
229
235
|
display_api_error(data.status)
|
230
236
|
end
|
@@ -242,7 +248,7 @@ module WavefrontCli
|
|
242
248
|
# @return System exit
|
243
249
|
#
|
244
250
|
def display_api_error(status)
|
245
|
-
method = format('handle_errcode_
|
251
|
+
method = format('handle_errcode_%<code>s', code: status.code).to_sym
|
246
252
|
|
247
253
|
msg = if respond_to?(method)
|
248
254
|
send(method, status)
|
@@ -250,8 +256,15 @@ module WavefrontCli
|
|
250
256
|
status.message || 'No further information'
|
251
257
|
end
|
252
258
|
|
253
|
-
abort format('ERROR: API code
|
254
|
-
|
259
|
+
abort format('ERROR: API code %<code>s. %<message>s.',
|
260
|
+
code: status.code,
|
261
|
+
message: msg.chomp('.')).fold(TW, 7)
|
262
|
+
end
|
263
|
+
|
264
|
+
def warning_message(status)
|
265
|
+
return unless status.status.between?(201, 299)
|
266
|
+
|
267
|
+
puts format("API WARNING: '%<message>s'.", message: status.message)
|
255
268
|
end
|
256
269
|
|
257
270
|
def display_no_api_response(data, method)
|
@@ -279,20 +292,25 @@ module WavefrontCli
|
|
279
292
|
end
|
280
293
|
end
|
281
294
|
|
282
|
-
|
283
|
-
def parseable_output(format, resp)
|
295
|
+
def parseable_output(output_format, resp)
|
284
296
|
options[:class] = klass_word
|
285
297
|
options[:hcl_fields] = hcl_fields
|
286
|
-
|
287
|
-
oclass = Object.const_get(format('WavefrontOutput::%s',
|
288
|
-
format.to_s.capitalize))
|
289
|
-
oclass.new(resp, options).run
|
298
|
+
cli_output_class(output_format).new(resp, options).run
|
290
299
|
rescue LoadError
|
291
300
|
raise(WavefrontCli::Exception::UnsupportedOutput,
|
292
|
-
|
293
|
-
|
301
|
+
unsupported_format_message(output_format))
|
302
|
+
end
|
303
|
+
|
304
|
+
def cli_output_class(output_format)
|
305
|
+
require_relative File.join('output', output_format.to_s)
|
306
|
+
Object.const_get(format('WavefrontOutput::%<class>s',
|
307
|
+
class: output_format.to_s.capitalize))
|
308
|
+
end
|
309
|
+
|
310
|
+
def unsupported_format_message(output_format)
|
311
|
+
format("The '%<command>s' command does not support '%<format>s' output.",
|
312
|
+
command: options[:class], format: output_format)
|
294
313
|
end
|
295
|
-
# rubocop:enable Metrics/AbcSize
|
296
314
|
|
297
315
|
def hcl_fields
|
298
316
|
[]
|
@@ -311,13 +329,12 @@ module WavefrontCli
|
|
311
329
|
#
|
312
330
|
def validate_opts
|
313
331
|
unless options[:token]
|
314
|
-
raise(WavefrontCli::Exception::CredentialError,
|
315
|
-
'Missing API token.')
|
332
|
+
raise(WavefrontCli::Exception::CredentialError, 'Missing API token.')
|
316
333
|
end
|
317
334
|
|
318
335
|
return true if options[:endpoint]
|
319
|
-
|
320
|
-
|
336
|
+
|
337
|
+
raise(WavefrontCli::Exception::CredentialError, 'Missing API endpoint.')
|
321
338
|
end
|
322
339
|
|
323
340
|
# Give it a path to a file (as a string) and it will return the
|
@@ -335,18 +352,22 @@ module WavefrontCli
|
|
335
352
|
return load_from_stdin if path == '-'
|
336
353
|
|
337
354
|
file = Pathname.new(path)
|
355
|
+
extname = file.extname.downcase
|
338
356
|
|
339
357
|
raise WavefrontCli::Exception::FileNotFound unless file.exist?
|
340
358
|
|
341
|
-
extname
|
359
|
+
return load_json(file) if extname == '.json'
|
360
|
+
return load_yaml(file) if %w[.yaml .yml].include?(extname)
|
342
361
|
|
343
|
-
|
344
|
-
|
345
|
-
|
346
|
-
|
347
|
-
|
348
|
-
|
349
|
-
|
362
|
+
raise WavefrontCli::Exception::UnsupportedFileFormat
|
363
|
+
end
|
364
|
+
|
365
|
+
def load_json(file)
|
366
|
+
JSON.parse(IO.read(file), symbolize_names: true)
|
367
|
+
end
|
368
|
+
|
369
|
+
def load_yaml(file)
|
370
|
+
YAML.safe_load(IO.read(file), symbolize_names: true)
|
350
371
|
end
|
351
372
|
|
352
373
|
# Read STDIN and return a Ruby object, assuming that STDIN is
|
@@ -389,20 +410,33 @@ module WavefrontCli
|
|
389
410
|
wf.describe(options[:'<id>'])
|
390
411
|
end
|
391
412
|
|
392
|
-
# rubocop:disable Metrics/AbcSize
|
393
413
|
def do_dump
|
394
|
-
|
414
|
+
cannot_noop!
|
395
415
|
|
396
416
|
if options[:format] == 'yaml'
|
397
|
-
ok_exit
|
417
|
+
ok_exit dump_yaml
|
398
418
|
elsif options[:format] == 'json'
|
399
|
-
ok_exit
|
419
|
+
ok_exit dump_json
|
400
420
|
else
|
401
|
-
abort format("Dump format must be 'json' or 'yaml'.
|
402
|
-
|
421
|
+
abort format("Dump format must be 'json' or 'yaml'. " \
|
422
|
+
"(Tried '%<format>s')", options)
|
403
423
|
end
|
404
424
|
end
|
405
|
-
|
425
|
+
|
426
|
+
def dump_yaml
|
427
|
+
JSON.parse(item_dump_call.to_json).to_yaml
|
428
|
+
end
|
429
|
+
|
430
|
+
def dump_json
|
431
|
+
item_dump_call.to_json
|
432
|
+
end
|
433
|
+
|
434
|
+
# Broken out into its own method because 'users' does not use
|
435
|
+
# pagination
|
436
|
+
#
|
437
|
+
def item_dump_call
|
438
|
+
wf.list(ALL_PAGE_SIZE, :all).response.items
|
439
|
+
end
|
406
440
|
|
407
441
|
def do_import
|
408
442
|
raw = load_file(options[:'<file>'])
|
@@ -411,6 +445,7 @@ module WavefrontCli
|
|
411
445
|
[raw].flatten.each do |obj|
|
412
446
|
resp = import_object(obj)
|
413
447
|
next if options[:noop]
|
448
|
+
|
414
449
|
errs += 1 unless resp.ok?
|
415
450
|
puts import_message(obj, resp)
|
416
451
|
end
|
@@ -419,10 +454,10 @@ module WavefrontCli
|
|
419
454
|
end
|
420
455
|
|
421
456
|
def import_message(obj, resp)
|
422
|
-
format('%-
|
423
|
-
obj[:id] || obj[:url],
|
424
|
-
resp.ok? ? 'IMPORTED' : 'FAILED',
|
425
|
-
resp.status.message)
|
457
|
+
format('%-15<id>s %-10<status>s %<message>s',
|
458
|
+
id: obj[:id] || obj[:url],
|
459
|
+
status: resp.ok? ? 'IMPORTED' : 'FAILED',
|
460
|
+
message: resp.status.message)
|
426
461
|
end
|
427
462
|
|
428
463
|
def import_object(raw)
|
@@ -456,7 +491,10 @@ module WavefrontCli
|
|
456
491
|
def smart_delete_message(object_type)
|
457
492
|
desc = wf.describe(options[:'<id>'])
|
458
493
|
word = desc.ok? ? 'Soft' : 'Permanently'
|
459
|
-
format("
|
494
|
+
format("%<soft_or_hard>s deleting %<object>s '%<id>s'",
|
495
|
+
soft_or_hard: word,
|
496
|
+
object: object_type,
|
497
|
+
id: options[:'<id>'])
|
460
498
|
end
|
461
499
|
|
462
500
|
def do_undelete
|
@@ -479,17 +517,25 @@ module WavefrontCli
|
|
479
517
|
# If the user has specified --all, override any limit and offset
|
480
518
|
# values
|
481
519
|
#
|
520
|
+
# rubocop:disable Metrics/MethodLength
|
482
521
|
def range_hash
|
522
|
+
offset_key = :offset
|
523
|
+
|
483
524
|
if options[:all]
|
484
525
|
limit = :all
|
485
526
|
offset = ALL_PAGE_SIZE
|
527
|
+
elsif options[:cursor]
|
528
|
+
offset_key = :cursor
|
529
|
+
limit = options[:limit]
|
530
|
+
offset = options[:cursor]
|
486
531
|
else
|
487
532
|
limit = options[:limit]
|
488
|
-
offset = options[:offset]
|
533
|
+
offset = options[:offset]
|
489
534
|
end
|
490
535
|
|
491
|
-
{ limit: limit,
|
536
|
+
{ limit: limit, offset_key => offset }
|
492
537
|
end
|
538
|
+
# rubocop:enable Metrics/MethodLength
|
493
539
|
|
494
540
|
# The search URI pattern doesn't always match the command name,
|
495
541
|
# or class name. Override this method if this is the case.
|
@@ -510,11 +556,11 @@ module WavefrontCli
|
|
510
556
|
end
|
511
557
|
end
|
512
558
|
|
513
|
-
# rubocop:disable Metrics/CyclomaticComplexity
|
514
|
-
# rubocop:disable Metrics/MethodLength
|
515
559
|
# @param cond [String] a search condition, like "key=value"
|
516
560
|
# @return [Hash] of matchingMethod and negated
|
517
561
|
#
|
562
|
+
# rubocop:disable Metrics/CyclomaticComplexity
|
563
|
+
# rubocop:disable Metrics/MethodLength
|
518
564
|
def matching_method(cond)
|
519
565
|
case cond
|
520
566
|
when /^\w+~/
|
@@ -533,8 +579,8 @@ module WavefrontCli
|
|
533
579
|
raise(WavefrontCli::Exception::UnparseableSearchPattern, cond)
|
534
580
|
end
|
535
581
|
end
|
536
|
-
# rubocop:enable Metrics/CyclomaticComplexity
|
537
582
|
# rubocop:enable Metrics/MethodLength
|
583
|
+
# rubocop:enable Metrics/CyclomaticComplexity
|
538
584
|
|
539
585
|
# Most things will re-import with the POST method if you remove
|
540
586
|
# the ID.
|
@@ -579,6 +625,7 @@ module WavefrontCli
|
|
579
625
|
# @param aggr [Array] values of matched keys
|
580
626
|
# @return [Array]
|
581
627
|
#
|
628
|
+
# rubocop:disable Metrics/MethodLength
|
582
629
|
def extract_values(obj, key, aggr = [])
|
583
630
|
if obj.is_a?(Hash)
|
584
631
|
obj.each_pair do |k, v|
|
@@ -594,5 +641,6 @@ module WavefrontCli
|
|
594
641
|
|
595
642
|
aggr
|
596
643
|
end
|
644
|
+
# rubocop:enable Metrics/MethodLength
|
597
645
|
end
|
598
646
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base'
|
2
4
|
|
3
5
|
module WavefrontCli
|
@@ -9,6 +11,10 @@ module WavefrontCli
|
|
9
11
|
Wavefront::Exception::InvalidCloudIntegrationId
|
10
12
|
end
|
11
13
|
|
14
|
+
def do_delete
|
15
|
+
smart_delete('cloud integration')
|
16
|
+
end
|
17
|
+
|
12
18
|
def do_enable
|
13
19
|
wf.enable(options[:'<id>'])
|
14
20
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module WavefrontCli
|
2
4
|
module Mixin
|
3
5
|
#
|
@@ -9,6 +11,7 @@ module WavefrontCli
|
|
9
11
|
end
|
10
12
|
|
11
13
|
def do_acl_clear
|
14
|
+
cannot_noop!
|
12
15
|
wf.acl_set(options[:'<id>'], [], [everyone_id])
|
13
16
|
do_acls
|
14
17
|
end
|
@@ -66,7 +69,9 @@ module WavefrontCli
|
|
66
69
|
def _acl_action(action)
|
67
70
|
entity_type, entities = acl_entities
|
68
71
|
|
69
|
-
resp = send(format('
|
72
|
+
resp = send(format('%<action>s_%<type>s',
|
73
|
+
action: action,
|
74
|
+
type: entity_type),
|
70
75
|
options[:'<id>'],
|
71
76
|
entities)
|
72
77
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'base'
|
2
4
|
|
3
5
|
# Define the Alert command
|
@@ -12,7 +14,6 @@ class WavefrontCommandAlert < WavefrontCommandBase
|
|
12
14
|
"clone #{CMN} [-v version] <id>",
|
13
15
|
"undelete #{CMN} <id>",
|
14
16
|
"history #{CMN} [-o offset] [-L limit] <id>",
|
15
|
-
"clone #{CMN} [-v version] <id>",
|
16
17
|
"latest #{CMN} <id>",
|
17
18
|
"dump #{CMN}",
|
18
19
|
"import #{CMN} [-u] <file>",
|
@@ -1,7 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative '../stdlib/string'
|
2
4
|
|
3
|
-
CMN = '[-DnVM] [-c file] [-P profile] [-E endpoint] [-t token] '
|
4
|
-
'[-f format]'.freeze
|
5
|
+
CMN = '[-DnVM] [-c file] [-P profile] [-E endpoint] [-t token] [-f format]'
|
5
6
|
|
6
7
|
# A base class which all command classes extend.
|
7
8
|
#
|
@@ -100,45 +101,53 @@ class WavefrontCommandBase
|
|
100
101
|
# testing far simpler.
|
101
102
|
# @return [String] the subcommands the command offers.
|
102
103
|
#
|
103
|
-
#
|
104
104
|
def commands(term_width = TW)
|
105
|
-
|
106
|
-
|
107
|
-
|
105
|
+
text_arr = %w[Usage:]
|
106
|
+
|
107
|
+
_commands.flatten.each do |cmd|
|
108
|
+
text_arr.<< ' ' + "#{CMD} #{word} #{cmd}\n".cmd_fold(term_width)
|
109
|
+
end
|
110
|
+
|
111
|
+
text_arr.<< " #{CMD} #{word} --help"
|
112
|
+
text_arr.join("\n")
|
108
113
|
end
|
109
114
|
|
110
115
|
# @param term_width [Integer] force a terminal width. Makes
|
111
116
|
# testing far simpler.
|
112
117
|
# @return [String] the options the command understands.
|
113
118
|
#
|
114
|
-
# rubocop:disable Metrics/AbcSize
|
115
119
|
def options(term_width = TW)
|
116
120
|
width = option_column_width
|
117
|
-
|
121
|
+
text_arr = if global_options.empty?
|
122
|
+
[]
|
123
|
+
else
|
124
|
+
global_option_text(width, term_width)
|
125
|
+
end
|
118
126
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
end
|
127
|
+
text_arr.<< 'Options:'
|
128
|
+
_options.flatten.each { |o| text_arr.<< opt_row(o, width, term_width) }
|
129
|
+
text_arr.join("\n")
|
130
|
+
end
|
124
131
|
|
125
|
-
|
126
|
-
|
127
|
-
|
132
|
+
def global_option_text(width, term_width)
|
133
|
+
text_arr = ['Global options:']
|
134
|
+
global_options.each { |o| text_arr.<< opt_row(o, width, term_width) }
|
135
|
+
text_arr.<< ''
|
128
136
|
end
|
129
|
-
# rubocop:enable Metrics/AbcSize
|
130
137
|
|
131
138
|
# Formats an option string.
|
132
139
|
#
|
133
|
-
# @param
|
140
|
+
# @param opt_str [String] the option string
|
134
141
|
# @param width [Integer] the width of the short + long options
|
135
142
|
# columns. This is used to indent following lines
|
136
143
|
# @param term_width [Integer] the width of the user's terminal
|
137
144
|
#
|
138
|
-
|
139
|
-
|
140
|
-
|
145
|
+
# rubocop:disable Style/FormatStringToken
|
146
|
+
def opt_row(opt_str, width, term_width = TW)
|
147
|
+
format(" %s %-#{width}s %s",
|
148
|
+
*opt_str.split(/\s+/, 3)).opt_fold(term_width, width + 5)
|
141
149
|
end
|
150
|
+
# rubocop:enable Style/FormatStringToken
|
142
151
|
|
143
152
|
# @return [Integer] the width of the column containing short and
|
144
153
|
# long options
|