morpheus-cli 3.3.1.4 → 3.3.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/lib/morpheus/api/api_client.rb +28 -0
  3. data/lib/morpheus/api/instance_types_interface.rb +12 -10
  4. data/lib/morpheus/api/instances_interface.rb +4 -0
  5. data/lib/morpheus/api/library_container_scripts_interface.rb +49 -0
  6. data/lib/morpheus/api/library_container_templates_interface.rb +49 -0
  7. data/lib/morpheus/api/library_container_types_interface.rb +65 -0
  8. data/lib/morpheus/api/library_container_upgrades_interface.rb +66 -0
  9. data/lib/morpheus/api/library_instance_types_interface.rb +59 -0
  10. data/lib/morpheus/api/library_layouts_interface.rb +65 -0
  11. data/lib/morpheus/api/servers_interface.rb +4 -0
  12. data/lib/morpheus/api/user_sources_interface.rb +120 -0
  13. data/lib/morpheus/api/virtual_images_interface.rb +7 -0
  14. data/lib/morpheus/cli.rb +12 -1
  15. data/lib/morpheus/cli/accounts.rb +35 -9
  16. data/lib/morpheus/cli/cli_command.rb +82 -2
  17. data/lib/morpheus/cli/curl_command.rb +1 -1
  18. data/lib/morpheus/cli/echo_command.rb +1 -1
  19. data/lib/morpheus/cli/hosts.rb +40 -14
  20. data/lib/morpheus/cli/instance_types.rb +106 -64
  21. data/lib/morpheus/cli/instances.rb +39 -15
  22. data/lib/morpheus/cli/library.rb +1 -1184
  23. data/lib/morpheus/cli/library_container_scripts_command.rb +437 -0
  24. data/lib/morpheus/cli/library_container_templates_command.rb +397 -0
  25. data/lib/morpheus/cli/library_container_types_command.rb +653 -0
  26. data/lib/morpheus/cli/library_instance_types_command.rb +491 -0
  27. data/lib/morpheus/cli/library_layouts_command.rb +650 -0
  28. data/lib/morpheus/cli/library_option_lists_command.rb +476 -0
  29. data/lib/morpheus/cli/library_option_types_command.rb +549 -0
  30. data/lib/morpheus/cli/library_upgrades_command.rb +604 -0
  31. data/lib/morpheus/cli/mixins/library_helper.rb +123 -0
  32. data/lib/morpheus/cli/mixins/print_helper.rb +21 -22
  33. data/lib/morpheus/cli/mixins/provisioning_helper.rb +56 -11
  34. data/lib/morpheus/cli/network_services_command.rb +1 -1
  35. data/lib/morpheus/cli/option_types.rb +12 -2
  36. data/lib/morpheus/cli/power_scheduling_command.rb +1 -1
  37. data/lib/morpheus/cli/shell.rb +120 -22
  38. data/lib/morpheus/cli/sleep_command.rb +45 -0
  39. data/lib/morpheus/cli/user_sources_command.rb +963 -0
  40. data/lib/morpheus/cli/users.rb +33 -2
  41. data/lib/morpheus/cli/version.rb +1 -1
  42. data/lib/morpheus/cli/version_command.rb +1 -1
  43. data/lib/morpheus/cli/virtual_images.rb +93 -39
  44. data/lib/morpheus/formatters.rb +37 -27
  45. data/lib/morpheus/terminal.rb +1 -1
  46. metadata +20 -2
@@ -10,7 +10,7 @@ require 'json'
10
10
  class Morpheus::Cli::Users
11
11
  include Morpheus::Cli::CliCommand
12
12
  include Morpheus::Cli::AccountsHelper
13
- register_subcommands :list, :get, :add, :update, :remove
13
+ register_subcommands :list, :count, :get, :add, :update, :remove
14
14
  register_subcommands :'passwd' => :change_password
15
15
  alias_subcommand :details, :get
16
16
  set_default_subcommand :list
@@ -35,7 +35,7 @@ class Morpheus::Cli::Users
35
35
  options = {}
36
36
  optparse = Morpheus::Cli::OptionParser.new do |opts|
37
37
  opts.banner = subcommand_usage()
38
- build_common_options(opts, options, [:account, :list, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
38
+ build_common_options(opts, options, [:account, :list, :query, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
39
39
  opts.footer = "List users."
40
40
  end
41
41
  optparse.parse!(args)
@@ -91,6 +91,37 @@ class Morpheus::Cli::Users
91
91
  end
92
92
  end
93
93
 
94
+ def count(args)
95
+ options = {}
96
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
97
+ opts.banner = subcommand_usage("[options]")
98
+ build_common_options(opts, options, [:account, :query, :remote, :dry_run])
99
+ opts.footer = "Get the number of users."
100
+ end
101
+ optparse.parse!(args)
102
+ connect(options)
103
+ begin
104
+ account = find_account_from_options(options)
105
+ account_id = account ? account['id'] : nil
106
+ params = {}
107
+ params.merge!(parse_list_options(options))
108
+ if options[:dry_run]
109
+ print_dry_run @users_interface.dry.list(account_id, params)
110
+ return
111
+ end
112
+ json_response = @users_interface.list(account_id, params)
113
+ # print number only
114
+ if json_response['meta'] && json_response['meta']['total']
115
+ print cyan, json_response['meta']['total'], reset, "\n"
116
+ else
117
+ print yellow, "unknown", reset, "\n"
118
+ end
119
+ rescue RestClient::Exception => e
120
+ print_rest_exception(e, options)
121
+ exit 1
122
+ end
123
+ end
124
+
94
125
  def get(args)
95
126
  options = {}
96
127
  optparse = Morpheus::Cli::OptionParser.new do |opts|
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "3.3.1.4"
4
+ VERSION = "3.3.2"
5
5
  end
6
6
  end
@@ -37,7 +37,7 @@ class Morpheus::Cli::VersionCommand
37
37
  puts(banner)
38
38
  puts(" Client Version: #{client_version}")
39
39
  puts("****************************************")
40
- print reset,"\n"
40
+ print reset
41
41
  end
42
42
  end
43
43
  end
@@ -123,7 +123,7 @@ class Morpheus::Cli::VirtualImages
123
123
  return
124
124
  end
125
125
  image = find_virtual_image_by_name_or_id(image_name)
126
- exit 1 if image.nil?
126
+ return 1 if image.nil?
127
127
  # refetch
128
128
  json_response = @virtual_images_interface.get(image['id'])
129
129
  image = json_response['virtualImage']
@@ -179,7 +179,7 @@ class Morpheus::Cli::VirtualImages
179
179
  begin
180
180
 
181
181
  image = find_virtual_image_by_name_or_id(image_name)
182
- exit 1 if image.nil?
182
+ return 1 if image.nil?
183
183
 
184
184
  params = options[:options] || {}
185
185
 
@@ -253,12 +253,16 @@ class Morpheus::Cli::VirtualImages
253
253
 
254
254
  def add(args)
255
255
  image_type_name = nil
256
+ file_url = nil
256
257
  options = {}
257
258
  optparse = OptionParser.new do|opts|
258
259
  opts.banner = subcommand_usage("[name] -t TYPE")
259
260
  opts.on( '-t', '--type TYPE', "Virtual Image Type" ) do |val|
260
261
  image_type_name = val
261
262
  end
263
+ opts.on( '-U', '--url URL', "Image File URL. This can be used instead of uploading local files." ) do |val|
264
+ file_url = val
265
+ end
262
266
  build_common_options(opts, options, [:options, :json, :dry_run, :remote])
263
267
  end
264
268
  optparse.parse!(args)
@@ -291,8 +295,15 @@ class Morpheus::Cli::VirtualImages
291
295
  end
292
296
 
293
297
  begin
294
- my_option_types = add_virtual_image_option_types(image_type)
295
- params = Morpheus::Cli::OptionTypes.prompt(add_virtual_image_option_types(image_type), options[:options], @api_client, options[:params])
298
+ my_option_types = add_virtual_image_option_types(image_type, !file_url)
299
+ # if options[:no_prompt]
300
+ # my_option_types.each do |it|
301
+ # if it['fieldContext'] == 'virtualImageFiles'
302
+ # opt['required'] = false
303
+ # end
304
+ # end
305
+ # end
306
+ params = Morpheus::Cli::OptionTypes.prompt(my_option_types, options[:options], @api_client, options[:params])
296
307
  virtual_image_payload = {}.merge(params)
297
308
  virtual_image_files = virtual_image_payload.delete('virtualImageFiles')
298
309
  virtual_image_payload['imageType'] = image_type['code']
@@ -304,7 +315,9 @@ class Morpheus::Cli::VirtualImages
304
315
 
305
316
  if options[:dry_run]
306
317
  print_dry_run @virtual_images_interface.dry.create(payload)
307
- if !virtual_image_files.empty?
318
+ if file_url
319
+ print_dry_run @virtual_images_interface.dry.upload_by_url(":id", file_url)
320
+ elsif virtual_image_files && !virtual_image_files.empty?
308
321
  virtual_image_files.each do |key, filename|
309
322
  print_dry_run @virtual_images_interface.dry.upload(":id", "(Contents of file #{filename})")
310
323
  end
@@ -322,7 +335,15 @@ class Morpheus::Cli::VirtualImages
322
335
  end
323
336
 
324
337
  # now upload the file, do this in the background maybe?
325
- if !virtual_image_files.empty?
338
+ if file_url
339
+ unless options[:quiet]
340
+ print cyan, "Uploading file by url #{file_url} ...", reset, "\n"
341
+ end
342
+ upload_json_response = @virtual_images_interface.upload_by_url(virtual_image['id'], file_url)
343
+ if options[:json]
344
+ print JSON.pretty_generate(upload_json_response)
345
+ end
346
+ elsif virtual_image_files && !virtual_image_files.empty?
326
347
  virtual_image_files.each do |key, filename|
327
348
  unless options[:quiet]
328
349
  print cyan, "Uploading file (#{key}) #{filename} ...", reset, "\n"
@@ -349,41 +370,67 @@ class Morpheus::Cli::VirtualImages
349
370
 
350
371
  def add_file(args)
351
372
  image_type_name = nil
373
+ file_url = nil
352
374
  options = {}
353
375
  optparse = OptionParser.new do|opts|
354
376
  opts.banner = subcommand_usage("[name] [filepath]")
355
- build_common_options(opts, options, [:json, :dry_run, :remote])
377
+ opts.on( '-U', '--url URL', "Image File URL. This can be used instead of [filepath]" ) do |val|
378
+ file_url = val
379
+ end
380
+ build_common_options(opts, options, [:json, :dry_run, :quiet, :remote])
356
381
  end
357
382
  optparse.parse!(args)
358
- if args.count < 2
359
- puts optparse
360
- exit 1
361
- end
362
383
  image_name = args[0]
363
- filename = args[1]
364
-
365
- connect(options)
366
-
367
- begin
368
- image = find_virtual_image_by_name_or_id(image_name)
369
- image_file = File.new(filename, 'rb')
370
-
371
- if options[:dry_run]
372
- print_dry_run @virtual_images_interface.dry.upload(image['id'], image_file)
373
- return
384
+ filename = nil
385
+ if file_url
386
+ if args.count < 1
387
+ puts optparse
388
+ exit 1
374
389
  end
375
-
376
- unless options[:quiet]
377
- print cyan, "Uploading file #{filename} ...", reset, "\n"
390
+ else
391
+ if args.count < 2
392
+ puts optparse
393
+ exit 1
378
394
  end
395
+ filename = args[1]
396
+ end
379
397
 
380
- json_response = @virtual_images_interface.upload(image['id'], image_file)
398
+ connect(options)
381
399
 
382
- if options[:json]
383
- print JSON.pretty_generate(json_response)
384
- elsif !options[:quiet]
385
- print "\n", cyan, "Virtual Image #{image['name']} successfully updated.", reset, "\n\n"
386
- get([image['id']])
400
+ begin
401
+ image = find_virtual_image_by_name_or_id(image_name)
402
+ return 1 if image.nil?
403
+ if file_url
404
+ if options[:dry_run]
405
+ print_dry_run @virtual_images_interface.dry.upload_by_url(image['id'], file_url)
406
+ return
407
+ end
408
+ unless options[:quiet]
409
+ print cyan, "Uploading file by url #{file_url} ...", reset, "\n"
410
+ end
411
+ json_response = @virtual_images_interface.upload_by_url(image['id'], file_url)
412
+ if options[:json]
413
+ print JSON.pretty_generate(json_response)
414
+ elsif !options[:quiet]
415
+ print "\n", cyan, "Virtual Image #{image['name']} successfully updated.", reset, "\n\n"
416
+ get([image['id']])
417
+ end
418
+ else
419
+ image_file = File.new(filename, 'rb')
420
+ if options[:dry_run]
421
+ print_dry_run @virtual_images_interface.dry.upload(image['id'], image_file)
422
+ return
423
+ end
424
+ unless options[:quiet]
425
+ print cyan, "Uploading file #{filename} ...", reset, "\n"
426
+ end
427
+ json_response = @virtual_images_interface.upload(image['id'], image_file)
428
+ if options[:json]
429
+ print JSON.pretty_generate(json_response)
430
+ elsif !options[:quiet]
431
+ print "\n", cyan, "Virtual Image #{image['name']} successfully updated.", reset, "\n\n"
432
+ get([image['id']])
433
+ end
387
434
  end
388
435
 
389
436
  rescue RestClient::Exception => e
@@ -408,7 +455,7 @@ class Morpheus::Cli::VirtualImages
408
455
  connect(options)
409
456
  begin
410
457
  image = find_virtual_image_by_name_or_id(image_name)
411
- exit 1 if image.nil?
458
+ return 1 if image.nil?
412
459
  unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the virtual image filename #{filename}?")
413
460
  exit
414
461
  end
@@ -443,7 +490,7 @@ class Morpheus::Cli::VirtualImages
443
490
  connect(options)
444
491
  begin
445
492
  image = find_virtual_image_by_name_or_id(image_name)
446
- exit 1 if image.nil?
493
+ return 1 if image.nil?
447
494
  unless options[:yes] || Morpheus::Cli::OptionTypes.confirm("Are you sure you want to delete the virtual image #{image['name']}?")
448
495
  exit
449
496
  end
@@ -480,6 +527,7 @@ class Morpheus::Cli::VirtualImages
480
527
  rescue RestClient::Exception => e
481
528
  if e.response && e.response.code == 404
482
529
  print_red_alert "Virtual Image not found by id #{id}"
530
+ return nil
483
531
  else
484
532
  raise e
485
533
  end
@@ -490,7 +538,7 @@ class Morpheus::Cli::VirtualImages
490
538
  json_results = @virtual_images_interface.get({name: name.to_s})
491
539
  if json_results['virtualImages'].empty?
492
540
  print_red_alert "Virtual Image not found by name #{name}"
493
- exit 1
541
+ return nil
494
542
  end
495
543
  virtual_image = json_results['virtualImages'][0]
496
544
  return virtual_image
@@ -507,7 +555,7 @@ class Morpheus::Cli::VirtualImages
507
555
  return get_available_virtual_image_types().find { |z| z['name'].downcase == name.downcase || z['code'].downcase == name.downcase}
508
556
  end
509
557
 
510
- def add_virtual_image_option_types(image_type)
558
+ def add_virtual_image_option_types(image_type, include_file_selection=true)
511
559
  image_type_code = image_type['code']
512
560
  # todo: make api provide virtualImageType and its optionTypes.
513
561
  tmp_option_types = [
@@ -527,16 +575,22 @@ class Morpheus::Cli::VirtualImages
527
575
 
528
576
  if image_type_code == 'ami'
529
577
  tmp_option_types << {'fieldName' => 'externalId', 'fieldLabel' => 'AMI id', 'type' => 'text', 'required' => false, 'displayOrder' => 10}
530
- tmp_option_types << {'fieldName' => 'imageFile', 'fieldLabel' => 'Image File', 'type' => 'file', 'required' => true, 'displayOrder' => 10}
578
+ if include_file_selection
579
+ tmp_option_types << {'fieldName' => 'imageFile', 'fieldLabel' => 'Image File', 'type' => 'file', 'required' => false, 'displayOrder' => 10}
580
+ end
531
581
  elsif image_type_code == 'vmware' || image_type_code == 'vmdk'
532
- tmp_option_types << {'fieldContext' => 'virtualImageFiles', 'fieldName' => 'imageFile', 'fieldLabel' => 'OVF File', 'type' => 'file', 'required' => true, 'displayOrder' => 10}
533
- tmp_option_types << {'fieldContext' => 'virtualImageFiles', 'fieldName' => 'imageDescriptorFile', 'fieldLabel' => 'VMDK File', 'type' => 'file', 'required' => false, 'displayOrder' => 10}
582
+ if include_file_selection
583
+ tmp_option_types << {'fieldContext' => 'virtualImageFiles', 'fieldName' => 'imageFile', 'fieldLabel' => 'OVF File', 'type' => 'file', 'required' => false, 'displayOrder' => 10}
584
+ tmp_option_types << {'fieldContext' => 'virtualImageFiles', 'fieldName' => 'imageDescriptorFile', 'fieldLabel' => 'VMDK File', 'type' => 'file', 'required' => false, 'displayOrder' => 10}
585
+ end
534
586
  elsif image_type_code == 'pxe'
535
587
  tmp_option_types << {'fieldName' => 'config.menu', 'fieldLabel' => 'Menu', 'type' => 'text', 'required' => false, 'displayOrder' => 10}
536
588
  tmp_option_types << {'fieldName' => 'imagePath', 'fieldLabel' => 'Image Path', 'type' => 'text', 'required' => true, 'displayOrder' => 10}
537
589
  tmp_option_types.reject! {|opt| ['isCloudInit', 'installAgent', 'sshUsername', 'sshPassword'].include?(opt['fieldName'])}
538
590
  else
539
- tmp_option_types << {'fieldContext' => 'virtualImageFiles', 'fieldName' => 'imageFile', 'fieldLabel' => 'Image File', 'type' => 'file', 'required' => true, 'description' => 'Choose an image file to upload', 'displayOrder' => 10}
591
+ if include_file_selection
592
+ tmp_option_types << {'fieldContext' => 'virtualImageFiles', 'fieldName' => 'imageFile', 'fieldLabel' => 'Image File', 'type' => 'file', 'required' => false, 'description' => 'Choose an image file to upload', 'displayOrder' => 10}
593
+ end
540
594
  end
541
595
 
542
596
  return tmp_option_types
@@ -198,39 +198,49 @@ def filter_data(data, include_fields=nil, exclude_fields=nil)
198
198
  if field.empty?
199
199
  next
200
200
  end
201
+
202
+ # supports "field as Label"
203
+ field_key = field.strip
204
+ field_label = field_key
205
+
206
+ if field.index(/\s+as\s+/)
207
+ field_key, field_label = field.split(/\s+as\s+/)
208
+ if !field_label
209
+ field_label = field_key
210
+ end
211
+ end
212
+
201
213
  if field.include?(".")
202
- # could do this instead...
203
- # namespaces = field.split(".")
204
- # cur_data = data
205
- # namespaces.each
206
- # if index != namespaces.length - 1
207
- # cur_data[ns] ||= {}
208
- # else
209
- # cur_data[ns] = get_object_value(new_data, field)
210
- # end
211
- # end
212
- namespaces = field.split(".")
213
- cur_data = data
214
- cur_filtered_data = my_data
215
- namespaces.each_with_index do |ns, index|
216
- if index != namespaces.length - 1
217
- if cur_data
218
- cur_data = cur_data[ns] || cur_data[ns.to_sym]
219
- else
220
- cur_data = nil
221
- end
222
- cur_filtered_data[ns] ||= {}
223
- cur_filtered_data = cur_filtered_data[ns]
224
- else
225
- if cur_data.respond_to?("[]")
226
- cur_filtered_data[ns] = cur_data[ns] || cur_data[ns.to_sym]
214
+ #if field.index(/\s+as\s+/)
215
+ if field_label != field_key
216
+ # collapse to a value
217
+ my_data[field_label] = get_object_value(data, field_key)
218
+ else
219
+ # keep the full object structure
220
+ namespaces = field.split(".")
221
+ cur_data = data
222
+ cur_filtered_data = my_data
223
+ namespaces.each_with_index do |ns, index|
224
+ if index != namespaces.length - 1
225
+ if cur_data
226
+ cur_data = cur_data[ns] || cur_data[ns.to_sym]
227
+ else
228
+ cur_data = nil
229
+ end
230
+ cur_filtered_data[ns] ||= {}
231
+ cur_filtered_data = cur_filtered_data[ns]
227
232
  else
228
- cur_filtered_data[ns] = nil
233
+ if cur_data.respond_to?("[]")
234
+ cur_filtered_data[ns] = cur_data[ns] || cur_data[ns.to_sym]
235
+ else
236
+ cur_filtered_data[ns] = nil
237
+ end
229
238
  end
230
239
  end
231
240
  end
232
241
  else
233
- my_data[field] = data[field] || data[field.to_sym]
242
+ #my_data[field] = data[field] || data[field.to_sym]
243
+ my_data[field_label] = data[field_key] || data[field_key.to_sym]
234
244
  end
235
245
  end
236
246
  return my_data
@@ -208,7 +208,7 @@ module Morpheus
208
208
  @coloring = false
209
209
  Term::ANSIColor::coloring = false
210
210
  end
211
- opts.on('-V','--debug', "Print extra output for debugging. ") do |json|
211
+ opts.on('-V','--debug', "Print extra output for debugging.") do |json|
212
212
  @terminal_log_level = Morpheus::Logging::Logger::DEBUG
213
213
  Morpheus::Logging.set_log_level(Morpheus::Logging::Logger::DEBUG)
214
214
  ::RestClient.log = Morpheus::Logging.debug? ? Morpheus::Logging::DarkPrinter.instance : nil
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpheus-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.1.4
4
+ version: 3.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2018-04-06 00:00:00.000000000 Z
14
+ date: 2018-05-23 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -165,6 +165,12 @@ files:
165
165
  - lib/morpheus/api/instance_types_interface.rb
166
166
  - lib/morpheus/api/instances_interface.rb
167
167
  - lib/morpheus/api/key_pairs_interface.rb
168
+ - lib/morpheus/api/library_container_scripts_interface.rb
169
+ - lib/morpheus/api/library_container_templates_interface.rb
170
+ - lib/morpheus/api/library_container_types_interface.rb
171
+ - lib/morpheus/api/library_container_upgrades_interface.rb
172
+ - lib/morpheus/api/library_instance_types_interface.rb
173
+ - lib/morpheus/api/library_layouts_interface.rb
168
174
  - lib/morpheus/api/license_interface.rb
169
175
  - lib/morpheus/api/load_balancers_interface.rb
170
176
  - lib/morpheus/api/logs_interface.rb
@@ -196,6 +202,7 @@ files:
196
202
  - lib/morpheus/api/task_sets_interface.rb
197
203
  - lib/morpheus/api/tasks_interface.rb
198
204
  - lib/morpheus/api/user_groups_interface.rb
205
+ - lib/morpheus/api/user_sources_interface.rb
199
206
  - lib/morpheus/api/users_interface.rb
200
207
  - lib/morpheus/api/virtual_images_interface.rb
201
208
  - lib/morpheus/api/whoami_interface.rb
@@ -227,6 +234,14 @@ files:
227
234
  - lib/morpheus/cli/instances.rb
228
235
  - lib/morpheus/cli/key_pairs.rb
229
236
  - lib/morpheus/cli/library.rb
237
+ - lib/morpheus/cli/library_container_scripts_command.rb
238
+ - lib/morpheus/cli/library_container_templates_command.rb
239
+ - lib/morpheus/cli/library_container_types_command.rb
240
+ - lib/morpheus/cli/library_instance_types_command.rb
241
+ - lib/morpheus/cli/library_layouts_command.rb
242
+ - lib/morpheus/cli/library_option_lists_command.rb
243
+ - lib/morpheus/cli/library_option_types_command.rb
244
+ - lib/morpheus/cli/library_upgrades_command.rb
230
245
  - lib/morpheus/cli/license.rb
231
246
  - lib/morpheus/cli/load_balancers.rb
232
247
  - lib/morpheus/cli/log_level_command.rb
@@ -235,6 +250,7 @@ files:
235
250
  - lib/morpheus/cli/man_command.rb
236
251
  - lib/morpheus/cli/mixins/accounts_helper.rb
237
252
  - lib/morpheus/cli/mixins/infrastructure_helper.rb
253
+ - lib/morpheus/cli/mixins/library_helper.rb
238
254
  - lib/morpheus/cli/mixins/monitoring_helper.rb
239
255
  - lib/morpheus/cli/mixins/print_helper.rb
240
256
  - lib/morpheus/cli/mixins/provisioning_helper.rb
@@ -263,11 +279,13 @@ files:
263
279
  - lib/morpheus/cli/security_groups.rb
264
280
  - lib/morpheus/cli/set_prompt_command.rb
265
281
  - lib/morpheus/cli/shell.rb
282
+ - lib/morpheus/cli/sleep_command.rb
266
283
  - lib/morpheus/cli/source_command.rb
267
284
  - lib/morpheus/cli/ssl_verification_command.rb
268
285
  - lib/morpheus/cli/storage_providers_command.rb
269
286
  - lib/morpheus/cli/tasks.rb
270
287
  - lib/morpheus/cli/user_groups_command.rb
288
+ - lib/morpheus/cli/user_sources_command.rb
271
289
  - lib/morpheus/cli/users.rb
272
290
  - lib/morpheus/cli/version.rb
273
291
  - lib/morpheus/cli/version_command.rb