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 +4 -4
- data/lib/morpheus/api/instances_interface.rb +7 -0
- data/lib/morpheus/api/storage_providers_interface.rb +11 -11
- data/lib/morpheus/cli/accounts.rb +4 -4
- data/lib/morpheus/cli/apps.rb +67 -16
- data/lib/morpheus/cli/boot_scripts_command.rb +5 -5
- data/lib/morpheus/cli/clouds.rb +8 -8
- data/lib/morpheus/cli/containers_command.rb +29 -6
- data/lib/morpheus/cli/dashboard_command.rb +1 -1
- data/lib/morpheus/cli/deployments.rb +5 -5
- data/lib/morpheus/cli/hosts.rb +46 -23
- data/lib/morpheus/cli/image_builder_command.rb +6 -6
- data/lib/morpheus/cli/instances.rb +243 -82
- data/lib/morpheus/cli/key_pairs.rb +6 -6
- data/lib/morpheus/cli/load_balancers.rb +6 -6
- data/lib/morpheus/cli/login.rb +8 -5
- data/lib/morpheus/cli/logout.rb +1 -1
- data/lib/morpheus/cli/monitoring_contacts_command.rb +6 -6
- data/lib/morpheus/cli/monitoring_incidents_command.rb +8 -8
- data/lib/morpheus/cli/preseed_scripts_command.rb +5 -5
- data/lib/morpheus/cli/recent_activity_command.rb +1 -1
- data/lib/morpheus/cli/remote.rb +1 -1
- data/lib/morpheus/cli/security_group_rules.rb +4 -4
- data/lib/morpheus/cli/security_groups.rb +5 -5
- data/lib/morpheus/cli/shell.rb +1 -1
- data/lib/morpheus/cli/storage_providers_command.rb +78 -78
- data/lib/morpheus/cli/tasks.rb +5 -5
- data/lib/morpheus/cli/version.rb +1 -1
- data/lib/morpheus/cli/version_command.rb +1 -1
- data/lib/morpheus/cli/whoami.rb +1 -1
- data/lib/morpheus/cli/workflows.rb +4 -4
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: e69dc73a61a5113eda7600546cc3930dfdd4f47a9a882cd0aa27bb9af12a5f97
|
4
|
+
data.tar.gz: 9d47bacf74b477ab1d887f110b055b5cf9d89e0f65fff187b0bf2471a92b8616
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
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/
|
132
|
-
url = "#{@base_url}/api/storage/
|
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
|
data/lib/morpheus/cli/apps.rb
CHANGED
@@ -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
|
-
|
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
|
-
|
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 = {
|
458
|
+
query_params = {}
|
433
459
|
optparse = Morpheus::Cli::OptionParser.new do |opts|
|
434
|
-
opts.banner = subcommand_usage("[app]
|
435
|
-
|
436
|
-
|
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('--
|
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
|
data/lib/morpheus/cli/clouds.rb
CHANGED
@@ -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
|