morpheus-cli 3.5.1.3 → 3.5.2

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: 5e9f063e72c623f8a392db49dc77b94b06415473c2c18c7bff94ccc5218a022c
4
- data.tar.gz: 6a66477f1c7c240ab9ddb4aec6179f6b25f1422005d85ceedbd5de32631097be
3
+ metadata.gz: e69dc73a61a5113eda7600546cc3930dfdd4f47a9a882cd0aa27bb9af12a5f97
4
+ data.tar.gz: 9d47bacf74b477ab1d887f110b055b5cf9d89e0f65fff187b0bf2471a92b8616
5
5
  SHA512:
6
- metadata.gz: 42f2e77de921b17cd70a69f643df6af7e8f4545aea5008a9ba0f35db4c505e3ef303cfa34c0253e4de4438a804efc3e1e78252fe1b0aae6bdac104760f9af3d3
7
- data.tar.gz: 6d8400cff18682f4274aeafac9f5ade199cc037106efe03b7a980e7151fba23fbc807e9ef3b0e1856a9528547c51949cef983bcf439b211acea8c1c490205f6c
6
+ metadata.gz: 2187ecea61941471a82f73f0f2a86d555ec739d22bfe4bc30b7aa620fca16aa9b6a3372c9cc0adf21868d4283c83b5bd545cb8fc4cc1a253d1e37accb58e01af
7
+ data.tar.gz: b39bc39b4b012dabad7c821b55690c1976d92a671abcb660fd57140506c499042b3cf77d80394d0c6e07669e59b3113856f256a5187ac7461929c8fbb4583d19
@@ -255,4 +255,11 @@ class Morpheus::InstancesInterface < Morpheus::APIClient
255
255
  execute(opts)
256
256
  end
257
257
 
258
+ def update_notes(id, payload)
259
+ url = "#{@base_url}/api/instances/#{id}/notes"
260
+ headers = {authorization: "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
261
+ opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
262
+ execute(opts)
263
+ end
264
+
258
265
  end
@@ -11,35 +11,35 @@ class Morpheus::StorageProvidersInterface < Morpheus::APIClient
11
11
 
12
12
  def get(id, params={})
13
13
  raise "#{self.class}.get() passed a blank id!" if id.to_s == ''
14
- url = "#{@base_url}/api/storage/providers/#{id}"
14
+ url = "#{@base_url}/api/storage/buckets/#{id}"
15
15
  headers = { params: params, authorization: "Bearer #{@access_token}" }
16
16
  opts = {method: :get, url: url, headers: headers}
17
17
  execute(opts)
18
18
  end
19
19
 
20
20
  def list(params={})
21
- url = "#{@base_url}/api/storage/providers"
21
+ url = "#{@base_url}/api/storage/buckets"
22
22
  headers = { params: params, authorization: "Bearer #{@access_token}" }
23
23
  opts = {method: :get, url: url, headers: headers}
24
24
  execute(opts)
25
25
  end
26
26
 
27
27
  def create(payload)
28
- url = "#{@base_url}/api/storage/providers"
28
+ url = "#{@base_url}/api/storage/buckets"
29
29
  headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
30
30
  opts = {method: :post, url: url, headers: headers, payload: payload.to_json}
31
31
  execute(opts)
32
32
  end
33
33
 
34
34
  def update(id, payload)
35
- url = "#{@base_url}/api/storage/providers/#{id}"
35
+ url = "#{@base_url}/api/storage/buckets/#{id}"
36
36
  headers = { :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
37
37
  opts = {method: :put, url: url, headers: headers, payload: payload.to_json}
38
38
  execute(opts)
39
39
  end
40
40
 
41
41
  def destroy(id, params={})
42
- url = "#{@base_url}/api/storage/providers/#{id}"
42
+ url = "#{@base_url}/api/storage/buckets/#{id}"
43
43
  headers = { :params => params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
44
44
  opts = {method: :delete, url: url, timeout: 30, headers: headers}
45
45
  execute(opts)
@@ -49,7 +49,7 @@ class Morpheus::StorageProvidersInterface < Morpheus::APIClient
49
49
  if file_path.to_s.strip == "/"
50
50
  file_path = ""
51
51
  end
52
- url = "#{@base_url}/api/storage/providers/#{URI.escape(id.to_s)}" + "/files/#{URI.escape(file_path)}".squeeze('/')
52
+ url = "#{@base_url}/api/storage/buckets/#{URI.escape(id.to_s)}" + "/files/#{URI.escape(file_path)}".squeeze('/')
53
53
  headers = { params: params, authorization: "Bearer #{@access_token}" }
54
54
  opts = {method: :get, url: url, headers: headers}
55
55
  execute(opts)
@@ -74,7 +74,7 @@ class Morpheus::StorageProvidersInterface < Morpheus::APIClient
74
74
  # if filename == "" || filename == "/"
75
75
  # filename = File.basename(local_file)
76
76
  # end
77
- url = "#{@base_url}/api/storage/providers/#{URI.escape(id.to_s)}" + "/files/#{safe_dirname}".squeeze('/')
77
+ url = "#{@base_url}/api/storage/buckets/#{URI.escape(id.to_s)}" + "/files/#{safe_dirname}".squeeze('/')
78
78
  headers = { :params => params, :authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/octet-stream'}
79
79
  headers[:params][:filename] = filename # File.basename(destination)
80
80
  if !local_file.kind_of?(File)
@@ -89,7 +89,7 @@ class Morpheus::StorageProvidersInterface < Morpheus::APIClient
89
89
  raise "#{self.class}.download_file() passed a blank id!" if id.to_s == ''
90
90
  raise "#{self.class}.download_file() passed a blank file path!" if file_path.to_s == ''
91
91
  escaped_file_path = file_path.split("/").collect {|it| URI.escape(it) }.join("/")
92
- url = "#{@base_url}/api/storage/providers/#{URI.escape(id.to_s)}" + "/download-file/#{escaped_file_path}".squeeze('/')
92
+ url = "#{@base_url}/api/storage/buckets/#{URI.escape(id.to_s)}" + "/download-file/#{escaped_file_path}".squeeze('/')
93
93
  headers = { params: params, authorization: "Bearer #{@access_token}" }
94
94
  opts = {method: :get, url: url, headers: headers}
95
95
  execute(opts, false)
@@ -99,7 +99,7 @@ class Morpheus::StorageProvidersInterface < Morpheus::APIClient
99
99
  raise "#{self.class}.download_file() passed a blank id!" if id.to_s == ''
100
100
  raise "#{self.class}.download_file() passed a blank file path!" if file_path.to_s == ''
101
101
  escaped_file_path = file_path.split("/").collect {|it| URI.escape(it) }.join("/")
102
- url = "#{@base_url}/api/storage/providers/#{URI.escape(id.to_s)}" + "/download-file/#{escaped_file_path}".squeeze('/')
102
+ url = "#{@base_url}/api/storage/buckets/#{URI.escape(id.to_s)}" + "/download-file/#{escaped_file_path}".squeeze('/')
103
103
  headers = { params: params, authorization: "Bearer #{@access_token}" }
104
104
  opts = {method: :get, url: url, headers: headers}
105
105
  # execute(opts, false)
@@ -128,8 +128,8 @@ class Morpheus::StorageProvidersInterface < Morpheus::APIClient
128
128
  end
129
129
 
130
130
  def download_zip_chunked(id, outfile, params={})
131
- #url = "#{@base_url}/api/storage/providers/#{URI.escape(id.to_s)}" + ".zip"
132
- url = "#{@base_url}/api/storage/providers/#{URI.escape(id.to_s)}/download-zip"
131
+ #url = "#{@base_url}/api/storage/buckets/#{URI.escape(id.to_s)}" + ".zip"
132
+ url = "#{@base_url}/api/storage/buckets/#{URI.escape(id.to_s)}/download-zip"
133
133
  headers = { params: params, authorization: "Bearer #{@access_token}" }
134
134
  opts = {method: :get, url: url, headers: headers}
135
135
  # execute(opts, false)
@@ -107,7 +107,7 @@ class Morpheus::Cli::Accounts
107
107
 
108
108
  def get(args)
109
109
  options = {}
110
- optparse = OptionParser.new do|opts|
110
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
111
111
  opts.banner = subcommand_usage("[name]")
112
112
  build_common_options(opts, options, [:json, :remote, :dry_run])
113
113
  end
@@ -166,7 +166,7 @@ class Morpheus::Cli::Accounts
166
166
 
167
167
  def add(args)
168
168
  options = {}
169
- optparse = OptionParser.new do|opts|
169
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
170
170
  opts.banner = subcommand_usage("[options]")
171
171
  build_option_type_options(opts, options, add_account_option_types)
172
172
  build_common_options(opts, options, [:options, :json, :remote, :dry_run])
@@ -212,7 +212,7 @@ class Morpheus::Cli::Accounts
212
212
 
213
213
  def update(args)
214
214
  options = {}
215
- optparse = OptionParser.new do|opts|
215
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
216
216
  opts.banner = subcommand_usage("[name] [options]")
217
217
  build_option_type_options(opts, options, update_account_option_types)
218
218
  build_common_options(opts, options, [:options, :json, :remote, :dry_run])
@@ -274,7 +274,7 @@ class Morpheus::Cli::Accounts
274
274
 
275
275
  def remove(args)
276
276
  options = {}
277
- optparse = OptionParser.new do|opts|
277
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
278
278
  opts.banner = subcommand_usage("[name]")
279
279
  build_common_options(opts, options, [:auto_confirm, :json, :remote, :dry_run])
280
280
  end
@@ -166,7 +166,7 @@ class Morpheus::Cli::Apps
166
166
  payload['id'] = 'existing'
167
167
  payload['templateName'] = 'Existing Instances'
168
168
  else
169
- found_app_template = get_available_app_templates.find {|it| it['id'].to_s == template_id.to_s }
169
+ found_app_template = get_available_app_templates.find {|it| it['id'].to_s == template_id.to_s || it['name'].to_s == template_id.to_s }
170
170
  if found_app_template.nil?
171
171
  print_red_alert "App Template not found by id #{template_id}"
172
172
  return 1
@@ -218,6 +218,16 @@ class Morpheus::Cli::Apps
218
218
  options = {}
219
219
  optparse = Morpheus::Cli::OptionParser.new do |opts|
220
220
  opts.banner = subcommand_usage("[app]")
221
+ opts.on('--refresh-until [status]', String, "Refresh until status is reached. Default status is running.") do |val|
222
+ if val.to_s.empty?
223
+ options[:refresh_until_status] = "running"
224
+ else
225
+ options[:refresh_until_status] = val.to_s.downcase
226
+ end
227
+ end
228
+ opts.on('--refresh-interval seconds', String, "Refresh interval. Default is 5 seconds.") do |val|
229
+ options[:refresh_interval] = val.to_f
230
+ end
221
231
  build_common_options(opts, options, [:json, :dry_run])
222
232
  opts.footer = "Get details about an app.\n" +
223
233
  "[app] is required. This is the name or id of an app."
@@ -270,7 +280,7 @@ class Morpheus::Cli::Apps
270
280
  if instances.empty?
271
281
  puts yellow, "This tier is empty", reset
272
282
  else
273
- instance_table = instances.collect do |instance|
283
+ instances_rows = instances.collect do |instance|
274
284
  # JD: fix bug here, status is not returned because withStats: false !?
275
285
  status_string = instance['status'].to_s
276
286
  if status_string == 'running'
@@ -288,7 +298,10 @@ class Morpheus::Cli::Apps
288
298
  end
289
299
  {id: instance['id'], name: instance['name'], connection: connection_string, environment: instance['instanceContext'], nodes: instance['containers'].count, status: status_string, type: instance['instanceType']['name'], group: !instance['group'].nil? ? instance['group']['name'] : nil, cloud: !instance['cloud'].nil? ? instance['cloud']['name'] : nil}
290
300
  end
291
- tp instance_table, :id, :name, :cloud, :type, :environment, :nodes, :connection, :status
301
+ instances_rows = instances_rows.sort {|x,y| x[:id] <=> y[:id] } #oldest to newest..
302
+ print cyan
303
+ print as_pretty_table(instances_rows, [:id, :name, :cloud, :type, :environment, :nodes, :connection, :status])
304
+ print reset
292
305
  end
293
306
  end
294
307
  end
@@ -296,6 +309,19 @@ class Morpheus::Cli::Apps
296
309
 
297
310
  print reset,"\n"
298
311
 
312
+ # refresh until a status is reached
313
+ if options[:refresh_until_status]
314
+ if options[:refresh_interval].nil? || options[:refresh_interval].to_f < 0
315
+ options[:refresh_interval] = 5
316
+ end
317
+ while app['status'].to_s.downcase != options[:refresh_until_status].to_s.downcase
318
+ print cyan
319
+ print "Refreshing until status #{options[:refresh_until_status]} ..."
320
+ sleep(options[:refresh_interval])
321
+ get(args)
322
+ end
323
+ end
324
+
299
325
  rescue RestClient::Exception => e
300
326
  print_rest_exception(e, options)
301
327
  exit 1
@@ -429,24 +455,25 @@ class Morpheus::Cli::Apps
429
455
 
430
456
  def remove(args)
431
457
  options = {}
432
- query_params = {keepBackups: 'off', force: 'off'}
458
+ query_params = {}
433
459
  optparse = Morpheus::Cli::OptionParser.new do |opts|
434
- opts.banner = subcommand_usage("[app] [-fB]")
435
- opts.on( '-f', '--force', "Force Delete" ) do
436
- query_params[:force] = 'on'
460
+ opts.banner = subcommand_usage("[app]")
461
+ #JD: UI defaults to on, but perhaps better to be explicate for now.
462
+ opts.on('--remove-instances [on|off]', ['on','off'], "Remove instances. Default is off.") do |val|
463
+ query_params[:removeInstances] = val
464
+ end
465
+ opts.on('--preserve-volumes [on|off]', ['on','off'], "Preserve Volumes. Default is off. Applies to certain types only.") do |val|
466
+ query_params[:preserveVolumes] = val
437
467
  end
438
468
  opts.on( '-B', '--keep-backups', "Preserve copy of backups" ) do
439
469
  query_params[:keepBackups] = 'on'
440
470
  end
441
- opts.on('--remove-instances [on|off]', ['on','off'], "Remove instances. Default is on.") do |val|
442
- query_params[:removeInstances] = val
443
- end
444
- opts.on('--remove-volumes [on|off]', ['on','off'], "Remove Volumes. Default is on. Applies to certain types only.") do |val|
445
- query_params[:removeVolumes] = val
446
- end
447
- opts.on('--releaseEIPs', ['on','off'], "Release EIPs. Default is false. Applies to Amazon only.") do |val|
471
+ opts.on('--releaseEIPs', ['on','off'], "Release EIPs. Default is on. Applies to Amazon only.") do |val|
448
472
  query_params[:releaseEIPs] = val
449
473
  end
474
+ opts.on( '-f', '--force', "Force Delete" ) do
475
+ query_params[:force] = 'on'
476
+ end
450
477
  build_common_options(opts, options, [:json, :dry_run, :quiet, :auto_confirm])
451
478
  opts.footer = "Delete an app.\n" +
452
479
  "[app] is required. This is the name or id of an app."
@@ -464,6 +491,10 @@ class Morpheus::Cli::Apps
464
491
  unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to remove the app '#{app['name']}'?", options)
465
492
  return 9
466
493
  end
494
+ # JD: removeVolumes to maintain the old behavior with pre-3.5.2 appliances, remove me later
495
+ if query_params[:preserveVolumes].nil?
496
+ query_params[:removeVolumes] = 'on'
497
+ end
467
498
  if options[:dry_run]
468
499
  print_dry_run @apps_interface.dry.destroy(app['id'], query_params)
469
500
  return
@@ -474,7 +505,7 @@ class Morpheus::Cli::Apps
474
505
  print "\n"
475
506
  elsif !options[:quiet]
476
507
  print_green_success "Removed app #{app['name']}"
477
- list([])
508
+ #list([])
478
509
  end
479
510
  rescue RestClient::Exception => e
480
511
  print_rest_exception(e, options)
@@ -527,7 +558,7 @@ class Morpheus::Cli::Apps
527
558
  print "\n"
528
559
  else
529
560
  print_green_success "Removed instance #{instance['name']} from app #{app['name']}"
530
- list([])
561
+ #list([])
531
562
  # details_options = [app['name']]
532
563
  # details(details_options)
533
564
  end
@@ -883,6 +914,7 @@ class Morpheus::Cli::Apps
883
914
 
884
915
  table_color = opts[:color] || cyan
885
916
  rows = apps.collect do |app|
917
+ tiers_str = format_app_tiers(app)
886
918
  instances_str = (app['instanceCount'].to_i == 1) ? "1 Instance" : "#{app['instanceCount']} Instances"
887
919
  containers_str = (app['containerCount'].to_i == 1) ? "1 Container" : "#{app['containerCount']} Containers"
888
920
  stats = app['stats']
@@ -893,6 +925,7 @@ class Morpheus::Cli::Apps
893
925
  {
894
926
  id: app['id'],
895
927
  name: app['name'],
928
+ tiers: tiers_str,
896
929
  instances: instances_str,
897
930
  containers: containers_str,
898
931
  account: app['account'] ? app['account']['name'] : nil,
@@ -907,6 +940,7 @@ class Morpheus::Cli::Apps
907
940
  columns = [
908
941
  :id,
909
942
  :name,
943
+ :tiers,
910
944
  :instances,
911
945
  :containers,
912
946
  #:account,
@@ -948,6 +982,23 @@ class Morpheus::Cli::Apps
948
982
  out
949
983
  end
950
984
 
985
+ def format_app_tiers(app)
986
+ out = ""
987
+ begin
988
+ app_tiers = app['appTiers']
989
+ if app_tiers
990
+ app_tier_names = app_tiers.collect { |app_tier| app_tier['tier']['name'] }
991
+ out << app_tier_names.join(", ")
992
+ end
993
+ if out.empty?
994
+ #out = "(Empty)"
995
+ end
996
+ rescue => ex
997
+ Morpheus::Logging::DarkPrinter.puts "A formatting exception occured: #{ex}" if Morpheus::Logging.debug?
998
+ end
999
+ out
1000
+ end
1001
+
951
1002
  def get_available_app_templates(refresh=false)
952
1003
  if !@available_app_templates || refresh
953
1004
  results = @options_interface.options_for_source('appTemplates',{})
@@ -35,7 +35,7 @@ class Morpheus::Cli::BootScriptsCommand
35
35
 
36
36
  def list(args)
37
37
  options = {}
38
- optparse = OptionParser.new do|opts|
38
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
39
39
  opts.banner = subcommand_usage()
40
40
  build_common_options(opts, options, [:list, :json, :dry_run])
41
41
  end
@@ -93,7 +93,7 @@ class Morpheus::Cli::BootScriptsCommand
93
93
 
94
94
  def get(args)
95
95
  options = {}
96
- optparse = OptionParser.new do|opts|
96
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
97
97
  opts.banner = subcommand_usage("[boot-script]")
98
98
  build_common_options(opts, options, [:json, :dry_run])
99
99
  end
@@ -147,7 +147,7 @@ class Morpheus::Cli::BootScriptsCommand
147
147
 
148
148
  def add(args)
149
149
  options = {}
150
- optparse = OptionParser.new do|opts|
150
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
151
151
  opts.banner = subcommand_usage("[fileName]")
152
152
  build_option_type_options(opts, options, add_boot_script_option_types(false))
153
153
  build_common_options(opts, options, [:options, :json, :dry_run, :quiet])
@@ -206,7 +206,7 @@ class Morpheus::Cli::BootScriptsCommand
206
206
 
207
207
  def update(args)
208
208
  options = {}
209
- optparse = OptionParser.new do|opts|
209
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
210
210
  opts.banner = subcommand_usage("[boot-script] [options]")
211
211
  build_option_type_options(opts, options, update_boot_script_option_types(false))
212
212
  build_common_options(opts, options, [:options, :json, :dry_run])
@@ -276,7 +276,7 @@ class Morpheus::Cli::BootScriptsCommand
276
276
 
277
277
  def remove(args)
278
278
  options = {}
279
- optparse = OptionParser.new do|opts|
279
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
280
280
  opts.banner = subcommand_usage("[boot-script]")
281
281
  build_common_options(opts, options, [:account, :auto_confirm, :json, :dry_run])
282
282
  end
@@ -226,7 +226,7 @@ class Morpheus::Cli::Clouds
226
226
  def add(args)
227
227
  options = {}
228
228
  params = {}
229
- optparse = OptionParser.new do|opts|
229
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
230
230
  opts.banner = subcommand_usage("[name] --group GROUP --type TYPE")
231
231
  opts.on( '-g', '--group GROUP', "Group Name" ) do |val|
232
232
  params[:group] = val
@@ -345,7 +345,7 @@ class Morpheus::Cli::Clouds
345
345
  def update(args)
346
346
  options = {}
347
347
  params = {}
348
- optparse = OptionParser.new do|opts|
348
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
349
349
  opts.banner = subcommand_usage("[name] [options]")
350
350
  # opts.on( '-g', '--group GROUP', "Group Name" ) do |val|
351
351
  # params[:group] = val
@@ -415,7 +415,7 @@ class Morpheus::Cli::Clouds
415
415
  def remove(args)
416
416
  options = {}
417
417
  query_params = {}
418
- optparse = OptionParser.new do|opts|
418
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
419
419
  opts.banner = subcommand_usage("[name]")
420
420
  opts.on( '-f', '--force', "Force Remove" ) do
421
421
  query_params[:force] = 'on'
@@ -450,7 +450,7 @@ class Morpheus::Cli::Clouds
450
450
  def firewall_disable(args)
451
451
  options = {}
452
452
  clear_or_secgroups_specified = false
453
- optparse = OptionParser.new do|opts|
453
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
454
454
  opts.banner = subcommand_usage("[name]")
455
455
  build_common_options(opts, options, [:json, :dry_run, :remote])
456
456
  end
@@ -482,7 +482,7 @@ class Morpheus::Cli::Clouds
482
482
  def firewall_enable(args)
483
483
  options = {}
484
484
  clear_or_secgroups_specified = false
485
- optparse = OptionParser.new do|opts|
485
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
486
486
  opts.banner = subcommand_usage("[name]")
487
487
  build_common_options(opts, options, [:json, :dry_run, :remote])
488
488
  end
@@ -514,7 +514,7 @@ class Morpheus::Cli::Clouds
514
514
  def security_groups(args)
515
515
  options = {}
516
516
  clear_or_secgroups_specified = false
517
- optparse = OptionParser.new do|opts|
517
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
518
518
  opts.banner = subcommand_usage("[name]")
519
519
  build_common_options(opts, options, [:json, :dry_run, :remote])
520
520
  end
@@ -560,7 +560,7 @@ class Morpheus::Cli::Clouds
560
560
  def apply_security_groups(args)
561
561
  options = {}
562
562
  clear_or_secgroups_specified = false
563
- optparse = OptionParser.new do|opts|
563
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
564
564
  opts.banner = subcommand_usage("[name] [-s] [--clear]")
565
565
  opts.on( '-c', '--clear', "Clear all security groups" ) do
566
566
  options[:securityGroupIds] = []
@@ -600,7 +600,7 @@ class Morpheus::Cli::Clouds
600
600
  def list_cloud_types(args)
601
601
  options={}
602
602
  params = {}
603
- optparse = OptionParser.new do|opts|
603
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
604
604
  opts.banner = subcommand_usage()
605
605
  build_common_options(opts, options, [:json, :dry_run, :remote])
606
606
  end
@@ -26,11 +26,21 @@ class Morpheus::Cli::ContainersCommand
26
26
 
27
27
  def get(args)
28
28
  options = {}
29
- optparse = OptionParser.new do|opts|
29
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
30
30
  opts.banner = subcommand_usage("[name]")
31
31
  opts.on( nil, '--actions', "Display Available Actions" ) do
32
32
  options[:include_available_actions] = true
33
33
  end
34
+ opts.on('--refresh-until [status]', String, "Refresh until status is reached. Default status is running.") do |val|
35
+ if val.to_s.empty?
36
+ options[:refresh_until_status] = "running"
37
+ else
38
+ options[:refresh_until_status] = val.to_s.downcase
39
+ end
40
+ end
41
+ opts.on('--refresh-interval seconds', String, "Refresh interval. Default is 5 seconds.") do |val|
42
+ options[:refresh_interval] = val.to_f
43
+ end
34
44
  build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
35
45
  end
36
46
  optparse.parse!(args)
@@ -120,6 +130,19 @@ class Morpheus::Cli::ContainersCommand
120
130
 
121
131
  print reset, "\n"
122
132
 
133
+ # refresh until a status is reached
134
+ if options[:refresh_until_status]
135
+ if options[:refresh_interval].nil? || options[:refresh_interval].to_f < 0
136
+ options[:refresh_interval] = 5
137
+ end
138
+ while container['status'].to_s.downcase != options[:refresh_until_status].to_s.downcase
139
+ print cyan
140
+ print "Refreshing until status #{options[:refresh_until_status]} ..."
141
+ sleep(options[:refresh_interval])
142
+ _get(arg, options)
143
+ end
144
+ end
145
+
123
146
  return 0
124
147
  rescue RestClient::Exception => e
125
148
  print_rest_exception(e, options)
@@ -130,7 +153,7 @@ class Morpheus::Cli::ContainersCommand
130
153
 
131
154
  def stop(args)
132
155
  options = {}
133
- optparse = OptionParser.new do|opts|
156
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
134
157
  opts.banner = subcommand_usage("[id list]")
135
158
  build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
136
159
  end
@@ -169,7 +192,7 @@ class Morpheus::Cli::ContainersCommand
169
192
 
170
193
  def start(args)
171
194
  options = {}
172
- optparse = OptionParser.new do|opts|
195
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
173
196
  opts.banner = subcommand_usage("[id list]")
174
197
  build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
175
198
  end
@@ -208,7 +231,7 @@ class Morpheus::Cli::ContainersCommand
208
231
 
209
232
  def restart(args)
210
233
  options = {}
211
- optparse = OptionParser.new do|opts|
234
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
212
235
  opts.banner = subcommand_usage("[id list]")
213
236
  build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
214
237
  end
@@ -247,7 +270,7 @@ class Morpheus::Cli::ContainersCommand
247
270
 
248
271
  def suspend(args)
249
272
  options = {}
250
- optparse = OptionParser.new do|opts|
273
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
251
274
  opts.banner = subcommand_usage("[id list]")
252
275
  build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
253
276
  end
@@ -286,7 +309,7 @@ class Morpheus::Cli::ContainersCommand
286
309
 
287
310
  def eject(args)
288
311
  options = {}
289
- optparse = OptionParser.new do|opts|
312
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
290
313
  opts.banner = subcommand_usage("[id list]")
291
314
  build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
292
315
  end