morpheus-cli 4.2.8 → 4.2.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (88) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api.rb +1 -1
  4. data/lib/morpheus/api/activity_interface.rb +9 -0
  5. data/lib/morpheus/api/api_client.rb +83 -27
  6. data/lib/morpheus/api/apps_interface.rb +21 -0
  7. data/lib/morpheus/api/dashboard_interface.rb +5 -21
  8. data/lib/morpheus/api/instances_interface.rb +3 -10
  9. data/lib/morpheus/api/invoice_line_items_interface.rb +14 -0
  10. data/lib/morpheus/api/invoices_interface.rb +7 -12
  11. data/lib/morpheus/api/library_layouts_interface.rb +8 -0
  12. data/lib/morpheus/api/ping_interface.rb +20 -0
  13. data/lib/morpheus/api/projects_interface.rb +33 -0
  14. data/lib/morpheus/api/setup_interface.rb +19 -36
  15. data/lib/morpheus/api/user_settings_interface.rb +0 -6
  16. data/lib/morpheus/api/whoami_interface.rb +4 -8
  17. data/lib/morpheus/benchmarking.rb +16 -26
  18. data/lib/morpheus/cli.rb +10 -5
  19. data/lib/morpheus/cli/access_token_command.rb +5 -8
  20. data/lib/morpheus/cli/activity_command.rb +146 -0
  21. data/lib/morpheus/cli/apps.rb +312 -121
  22. data/lib/morpheus/cli/archives_command.rb +1 -1
  23. data/lib/morpheus/cli/auth_command.rb +4 -11
  24. data/lib/morpheus/cli/blueprints_command.rb +196 -137
  25. data/lib/morpheus/cli/change_password_command.rb +1 -1
  26. data/lib/morpheus/cli/cli_command.rb +225 -72
  27. data/lib/morpheus/cli/cli_registry.rb +2 -2
  28. data/lib/morpheus/cli/cloud_datastores_command.rb +1 -1
  29. data/lib/morpheus/cli/clouds.rb +5 -20
  30. data/lib/morpheus/cli/clusters.rb +4 -28
  31. data/lib/morpheus/cli/commands/standard/alias_command.rb +2 -9
  32. data/lib/morpheus/cli/commands/standard/benchmark_command.rb +2 -0
  33. data/lib/morpheus/cli/commands/standard/curl_command.rb +2 -3
  34. data/lib/morpheus/cli/commands/standard/history_command.rb +3 -6
  35. data/lib/morpheus/cli/commands/standard/man_command.rb +10 -7
  36. data/lib/morpheus/cli/commands/standard/ssl_verification_command.rb +10 -9
  37. data/lib/morpheus/cli/containers_command.rb +3 -3
  38. data/lib/morpheus/cli/credentials.rb +13 -16
  39. data/lib/morpheus/cli/error_handler.rb +18 -12
  40. data/lib/morpheus/cli/errors.rb +45 -0
  41. data/lib/morpheus/cli/execute_schedules_command.rb +1 -1
  42. data/lib/morpheus/cli/execution_request_command.rb +4 -4
  43. data/lib/morpheus/cli/groups.rb +84 -132
  44. data/lib/morpheus/cli/hosts.rb +6 -16
  45. data/lib/morpheus/cli/instances.rb +100 -183
  46. data/lib/morpheus/cli/invoices_command.rb +505 -71
  47. data/lib/morpheus/cli/library_layouts_command.rb +254 -166
  48. data/lib/morpheus/cli/library_option_lists_command.rb +0 -87
  49. data/lib/morpheus/cli/library_option_types_command.rb +0 -96
  50. data/lib/morpheus/cli/license.rb +3 -0
  51. data/lib/morpheus/cli/login.rb +17 -37
  52. data/lib/morpheus/cli/logout.rb +9 -5
  53. data/lib/morpheus/cli/mixins/accounts_helper.rb +83 -7
  54. data/lib/morpheus/cli/mixins/operations_helper.rb +41 -0
  55. data/lib/morpheus/cli/mixins/option_source_helper.rb +255 -0
  56. data/lib/morpheus/cli/mixins/print_helper.rb +18 -4
  57. data/lib/morpheus/cli/mixins/provisioning_helper.rb +222 -13
  58. data/lib/morpheus/cli/mixins/remote_helper.rb +139 -0
  59. data/lib/morpheus/cli/monitoring_checks_command.rb +11 -3
  60. data/lib/morpheus/cli/network_groups_command.rb +8 -2
  61. data/lib/morpheus/cli/option_types.rb +1 -1
  62. data/lib/morpheus/cli/ping.rb +252 -0
  63. data/lib/morpheus/cli/price_sets_command.rb +16 -27
  64. data/lib/morpheus/cli/prices_command.rb +34 -27
  65. data/lib/morpheus/cli/processes_command.rb +81 -7
  66. data/lib/morpheus/cli/projects_command.rb +607 -0
  67. data/lib/morpheus/cli/recent_activity_command.rb +87 -65
  68. data/lib/morpheus/cli/remote.rb +965 -974
  69. data/lib/morpheus/cli/reports_command.rb +3 -15
  70. data/lib/morpheus/cli/roles.rb +8 -31
  71. data/lib/morpheus/cli/service_plans_command.rb +25 -31
  72. data/lib/morpheus/cli/setup.rb +392 -0
  73. data/lib/morpheus/cli/shell.rb +144 -56
  74. data/lib/morpheus/cli/subnets_command.rb +71 -11
  75. data/lib/morpheus/cli/tasks.rb +3 -3
  76. data/lib/morpheus/cli/user_sources_command.rb +4 -4
  77. data/lib/morpheus/cli/users.rb +135 -109
  78. data/lib/morpheus/cli/version.rb +1 -1
  79. data/lib/morpheus/cli/whitelabel_settings_command.rb +7 -7
  80. data/lib/morpheus/cli/whoami.rb +90 -129
  81. data/lib/morpheus/cli/wiki_command.rb +2 -14
  82. data/lib/morpheus/ext/rest_client.rb +36 -0
  83. data/lib/morpheus/formatters.rb +42 -5
  84. data/lib/morpheus/rest_client.rb +0 -10
  85. data/lib/morpheus/terminal.rb +41 -1
  86. data/lib/morpheus/util.rb +24 -0
  87. metadata +16 -3
  88. data/lib/morpheus/cli/command_error.rb +0 -22
@@ -0,0 +1,45 @@
1
+ module Morpheus::Cli
2
+
3
+ # A standard error to raise in your CliCommand classes.
4
+ class CommandError < StandardError
5
+
6
+ attr_reader :args, :exit_code
7
+
8
+ def initialize(msg, args=[], optparse=nil, exit_code=nil)
9
+ @args = args
10
+ @optparse = optparse
11
+ @exit_code = exit_code # || 1
12
+ super(msg)
13
+ end
14
+ end
15
+
16
+ # An error indicating the command was not recoginzed
17
+ class CommandNotFoundError < CommandError
18
+
19
+ def initialize(msg, args=[], optparse=nil, exit_code=nil)
20
+ super(msg, args, optparse, exit_code || 127)
21
+ end
22
+
23
+ end
24
+
25
+ # An error for wrong number of arguments
26
+ # could use ::OptionParser::MissingArgument, ::OptionParser::NeedlessArgument
27
+ # maybe return an error code niftier than 1?
28
+ class CommandArgumentsError < CommandError
29
+
30
+ def initialize(msg, args=[], optparse=nil, exit_code=nil)
31
+ super(msg, args, optparse, exit_code || 1)
32
+ end
33
+
34
+ end
35
+
36
+ # An error indicating authorization is required (unable to aquire access token)
37
+ class AuthorizationRequiredError < CommandError
38
+
39
+ def initialize(msg, args=[], optparse=nil, exit_code=nil)
40
+ super(msg, args, optparse, exit_code || 1)
41
+ end
42
+
43
+ end
44
+
45
+ end
@@ -127,7 +127,7 @@ class Morpheus::Cli::ExecuteSchedulesCommand
127
127
  print cyan
128
128
  description_cols = {
129
129
  "ID" => lambda {|it| it['id'] },
130
- #"Account" => lambda {|it| it['owner'] ? it['owner']['name'] : '' },
130
+ #"Tenant" => lambda {|it| it['owner'] ? it['owner']['name'] : '' },
131
131
  "Name" => lambda {|it| it['name'] },
132
132
  "Description" => lambda {|it| it['description'] },
133
133
  "Type" => lambda {|it| format_schedule_type(it['scheduleType']) },
@@ -213,9 +213,9 @@ class Morpheus::Cli::ExecutionRequestCommand
213
213
  execution_request = json_response['executionRequest']
214
214
  print_green_success "Executing request #{execution_request['uniqueId']}"
215
215
  if do_refresh
216
- get([execution_request['uniqueId'], "--refresh"])
216
+ get([execution_request['uniqueId'], "--refresh"] + (options[:remote] ? ["-r",options[:remote]] : []))
217
217
  else
218
- get([execution_request['uniqueId']])
218
+ get([execution_request['uniqueId']] + (options[:remote] ? ["-r",options[:remote]] : []))
219
219
  end
220
220
  return 0
221
221
  rescue RestClient::Exception => e
@@ -288,9 +288,9 @@ class Morpheus::Cli::ExecutionRequestCommand
288
288
  execution_request = json_response['executionRequest']
289
289
  print_green_success "Executing request #{execution_request['uniqueId']} against lease"
290
290
  if do_refresh
291
- get([execution_request['uniqueId'], "--refresh"])
291
+ get([execution_request['uniqueId'], "--refresh"] + (options[:remote] ? ["-r",options[:remote]] : []))
292
292
  else
293
- get([execution_request['uniqueId']])
293
+ get([execution_request['uniqueId']] + (options[:remote] ? ["-r",options[:remote]] : []))
294
294
  end
295
295
  return 0
296
296
  rescue RestClient::Exception => e
@@ -10,6 +10,7 @@ require 'morpheus/logging'
10
10
  class Morpheus::Cli::Groups
11
11
  include Morpheus::Cli::CliCommand
12
12
  include Morpheus::Cli::InfrastructureHelper
13
+ include Morpheus::Cli::OptionSourceHelper
13
14
 
14
15
  register_subcommands :list, :get, :add, :update, :use, :unuse, :add_cloud, :remove_cloud, :remove, :current => :print_current
15
16
  alias_subcommand :details, :get
@@ -22,8 +23,9 @@ class Morpheus::Cli::Groups
22
23
 
23
24
  def connect(opts)
24
25
  @api_client = establish_remote_appliance_connection(opts)
25
- @groups_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).groups
26
- @clouds_interface = Morpheus::APIClient.new(@access_token,nil,nil, @appliance_url).clouds
26
+ @groups_interface = @api_client.groups
27
+ @clouds_interface = @api_client.clouds
28
+ @options_interface = @api_client.options
27
29
  @active_group_id = Morpheus::Cli::Groups.active_groups[@appliance_name]
28
30
  end
29
31
 
@@ -36,22 +38,21 @@ class Morpheus::Cli::Groups
36
38
  params = {}
37
39
  optparse = Morpheus::Cli::OptionParser.new do|opts|
38
40
  opts.banner = subcommand_usage()
39
- build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
40
- opts.footer = "List groups (sites)."
41
+ build_standard_list_options(opts, options)
42
+ opts.footer = "List groups."
41
43
  end
42
44
  optparse.parse!(args)
45
+ verify_args!(args:args, optparse:optparse, count:0)
43
46
  connect(options)
44
- begin
45
- params.merge!(parse_list_options(options))
46
- @groups_interface.setopts(options)
47
- if options[:dry_run]
48
- print_dry_run @groups_interface.list(params)
49
- return 0
50
- end
51
- json_response = @groups_interface.list(params)
52
- render_result = render_with_format(json_response, options, 'groups')
53
- return 0 if render_result
54
-
47
+ params.merge!(parse_list_options(options))
48
+ @groups_interface.setopts(options)
49
+ if options[:dry_run]
50
+ print_dry_run @groups_interface.list(params)
51
+ return 0, nil
52
+ end
53
+ json_response = @groups_interface.list(params)
54
+ exit_code, err = 0, nil
55
+ render_response(json_response, options) do
55
56
  groups = json_response['groups']
56
57
  subtitles = []
57
58
  subtitles += parse_list_subtitles(options)
@@ -61,39 +62,24 @@ class Morpheus::Cli::Groups
61
62
  else
62
63
  print_groups_table(groups, options)
63
64
  print_results_pagination(json_response)
64
- if @active_group_id
65
- active_group = groups.find { |it| it['id'] == @active_group_id }
66
- active_group = active_group || find_group_by_name_or_id(@active_group_id)
67
- #unless @appliances.keys.size == 1
68
- print cyan, "\n# => Currently using group #{active_group['name']}\n", reset
69
- #end
70
- else
71
- unless options[:remote]
72
- print cyan, "\n# => No active group, see `groups use`\n", reset
73
- end
74
- end
75
65
  end
76
66
  print reset,"\n"
77
- return 0
78
- rescue RestClient::Exception => e
79
- print_rest_exception(e, options)
80
- exit 1
81
67
  end
68
+ return exit_code, err
82
69
  end
83
70
 
84
71
  def get(args)
85
72
  options = {}
86
73
  optparse = Morpheus::Cli::OptionParser.new do|opts|
87
74
  opts.banner = subcommand_usage("[name]")
88
- build_common_options(opts, options, [:query, :json, :yaml, :csv, :fields, :dry_run, :remote])
89
- opts.footer = "Get details about a group.\n" +
90
- "[name] is required. This is the name or id of a group. Supports 1-N arguments."
75
+ build_standard_get_options(opts, options)
76
+ opts.footer = <<-EOT
77
+ Get details about a group.
78
+ [name] is required. This is the name or id of a group. Supports 1-N arguments.
79
+ EOT
91
80
  end
92
81
  optparse.parse!(args)
93
- if args.count < 1
94
- puts optparse
95
- exit 1
96
- end
82
+ verify_args!(args:args, optparse:optparse, min:1)
97
83
  connect(options)
98
84
  id_list = parse_id_list(args)
99
85
  return run_command_for_each_arg(id_list) do |arg|
@@ -140,12 +126,11 @@ class Morpheus::Cli::Groups
140
126
  # puts "Clouds: #{group['zones'].collect {|it| it['name'] }.join(', ')}"
141
127
  # puts "Hosts: #{group['serverCount']}"
142
128
  if is_active
143
- puts "\n => This is the active group."
129
+ print "\n"
130
+ print cyan, "=> This is the active group", reset, "\n" # remove me...
144
131
  end
145
-
146
132
  print reset,"\n"
147
-
148
- #puts instance
133
+ return 0, nil
149
134
  rescue RestClient::Exception => e
150
135
  print_rest_exception(e, options)
151
136
  exit 1
@@ -165,15 +150,11 @@ class Morpheus::Cli::Groups
165
150
  opts.on( '--use', '--use', "Make this the current active group" ) do
166
151
  use_it = true
167
152
  end
168
-
169
- build_common_options(opts, options, [:options, :json, :dry_run, :remote])
153
+ build_standard_add_options(opts, options)
170
154
  opts.footer = "Create a new group."
171
155
  end
172
156
  optparse.parse!(args)
173
- # if args.count < 1
174
- # puts optparse
175
- # exit 1
176
- # end
157
+ verify_args!(args:args, optparse:optparse, max:1)
177
158
  connect(options)
178
159
  begin
179
160
  # group = {name: args[0], location: params[:location]}
@@ -223,14 +204,11 @@ class Morpheus::Cli::Groups
223
204
  # opts.on( '-l', '--location LOCATION', "Location" ) do |val|
224
205
  # params[:location] = val
225
206
  # end
226
- build_common_options(opts, options, [:options, :json, :dry_run, :remote])
227
- opts.footer = "Update an existing group."
207
+ build_standard_update_options(opts, options)
208
+ opts.footer = "Update a group."
228
209
  end
229
210
  optparse.parse!(args)
230
- if args.count < 1
231
- puts optparse
232
- exit 1
233
- end
211
+ verify_args!(args:args, optparse:optparse, count:1)
234
212
  connect(options)
235
213
  begin
236
214
  group = find_group_by_name_or_id(args[0])
@@ -270,14 +248,11 @@ class Morpheus::Cli::Groups
270
248
  options = {}
271
249
  optparse = Morpheus::Cli::OptionParser.new do|opts|
272
250
  opts.banner = subcommand_usage("[name]", "CLOUD")
273
- build_common_options(opts, options, [:json, :dry_run, :remote])
251
+ build_standard_update_options(opts, options)
274
252
  opts.footer = "Add a cloud to a group."
275
253
  end
276
254
  optparse.parse!(args)
277
- if args.count < 2
278
- puts optparse
279
- exit 1
280
- end
255
+ verify_args!(args:args, optparse:optparse, count:2)
281
256
  connect(options)
282
257
  begin
283
258
  group = find_group_by_name_or_id(args[0])
@@ -313,15 +288,12 @@ class Morpheus::Cli::Groups
313
288
  def remove_cloud(args)
314
289
  options = {}
315
290
  optparse = Morpheus::Cli::OptionParser.new do|opts|
316
- opts.banner = subcommand_usage("[name]", "CLOUD")
317
- build_common_options(opts, options, [:json, :dry_run, :remote])
291
+ opts.banner = subcommand_usage("[name] [cloud]")
292
+ build_standard_update_options(opts, options)
318
293
  opts.footer = "Remove a cloud from a group."
319
294
  end
320
295
  optparse.parse!(args)
321
- if args.count < 2
322
- puts optparse
323
- exit 1
324
- end
296
+ verify_args!(args:args, optparse:optparse, count:2)
325
297
  connect(options)
326
298
  begin
327
299
  group = find_group_by_name_or_id(args[0])
@@ -358,15 +330,11 @@ class Morpheus::Cli::Groups
358
330
  options = {}
359
331
  optparse = Morpheus::Cli::OptionParser.new do|opts|
360
332
  opts.banner = subcommand_usage("[name]")
361
- build_common_options(opts, options, [:json, :dry_run, :auto_confirm, :remote])
333
+ build_standard_remove_options(opts, options)
362
334
  opts.footer = "Delete a group."
363
- # more info to display here
364
335
  end
365
336
  optparse.parse!(args)
366
- if args.count < 1
367
- puts optparse
368
- exit 1
369
- end
337
+ verify_args!(args:args, optparse:optparse, count:1)
370
338
  connect(options)
371
339
 
372
340
  begin
@@ -397,42 +365,42 @@ class Morpheus::Cli::Groups
397
365
  options = {}
398
366
  optparse = Morpheus::Cli::OptionParser.new do|opts|
399
367
  opts.banner = subcommand_usage("[name]")
400
- opts.footer = "" +
401
- "This sets the active group.\n" +
402
- "The active group will be auto-selected for use during provisioning.\n" +
403
- "You can still use the --group option to override this."
368
+ opts.footer = <<-EOT
369
+ This sets the active group.
370
+ The active group will be auto-selected for use during provisioning.
371
+ [name] is required. This is the name or id of a group.
372
+ EOT
404
373
  build_common_options(opts, options, [:quiet, :remote])
405
374
  end
406
375
  optparse.parse!(args)
407
- if args.count < 1
408
- puts optparse
409
- return 1
410
- end
376
+ verify_args!(args:args, optparse:optparse, count:1)
411
377
  connect(options)
412
- begin
413
- # todo: this is a problem for unprivileged users, need to use find_group_by_id_for_provisioning(group_id)
414
- group = find_group_by_name_or_id(args[0])
415
- if !group
416
- print_red_alert "Group not found by name #{args[0]}"
417
- return 1
378
+
379
+ group = find_group_option(args[0]) #uses /api/options
380
+ if !group
381
+ raise_command_error "Group not found by name #{args[0]}"
382
+ end
383
+ exit_code, err = 0, nil
384
+ is_already_active = @active_group_id == group['id']
385
+ if is_already_active
386
+ unless options[:quiet]
387
+ print reset,"Already using the group #{group['name']}","\n",reset
418
388
  end
419
- if @active_group_id == group['id']
420
- unless options[:quiet]
421
- print reset,"Already using the group #{group['name']}","\n",reset
422
- end
423
- else
424
- ::Morpheus::Cli::Groups.set_active_group(@appliance_name, group['id'])
425
- # ::Morpheus::Cli::Groups.save_groups(@active_groups)
426
- unless options[:quiet]
427
- print cyan,"Switched active group to #{group['name']}","\n",reset
428
- end
429
- #list([])
389
+ else
390
+ ::Morpheus::Cli::Groups.set_active_group(@appliance_name, group['id'])
391
+ # ::Morpheus::Cli::Groups.save_groups(@active_groups)
392
+ unless options[:quiet]
393
+ print cyan,"Switched active group to #{group['name']}","\n",reset
430
394
  end
431
- return 0
432
- rescue RestClient::Exception => e
433
- print_rest_exception(e, options)
434
- return 1
395
+ #list([])
396
+ end
397
+ if is_already_active
398
+ print_green_success "Group #{group['name']} is still active"
399
+ else
400
+ print_green_success "Group #{group['name']} is now active"
435
401
  end
402
+ return 0
403
+
436
404
 
437
405
  end
438
406
 
@@ -443,24 +411,23 @@ class Morpheus::Cli::Groups
443
411
  opts.footer = "" +
444
412
  "This will clear the current active group.\n" +
445
413
  "You will be prompted for a Group during provisioning."
446
- build_common_options(opts, options, [])
414
+ build_common_options(opts, options, [:quiet, :remote])
447
415
  end
448
416
  optparse.parse!(args)
449
- connect(options)
450
-
417
+ verify_args!(args:args, optparse:optparse, count:0)
418
+ connect(options.merge({:skip_verify_access_token => true, :skip_login => true}))
419
+ exit_code, err = 0, nil
451
420
  if @active_group_id
452
421
  ::Morpheus::Cli::Groups.clear_active_group(@appliance_name)
453
- # unless options[:quiet]
454
- # print cyan
455
- # puts "Switched to no active group."
456
- # puts "You will be prompted for Group during provisioning."
457
- # print reset
458
- # end
459
- return true
422
+ # print_green_success "Group #{@active_group_id} is no longer active."
423
+ print_green_success "Group is no longer active."
424
+ return 0, nil
460
425
  else
461
- puts "You are not using any group for appliance #{@appliance_name}"
462
- #return false
426
+ # print reset,"You are not using any group for appliance #{@appliance_name}",reset,"\n"
427
+ print reset,"You are not using any group",reset,"\n"
428
+ # exit_code = 1
463
429
  end
430
+ return exit_code, err
464
431
  end
465
432
 
466
433
  def print_current(args)
@@ -580,23 +547,11 @@ class Morpheus::Cli::Groups
580
547
 
581
548
  link = "#{@appliance_url}/login/oauth-redirect?access_token=#{@access_token}\\&redirectUri=/infrastructure/groups/#{group['id']}#!wiki"
582
549
 
583
- open_command = nil
584
- if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
585
- open_command = "start #{link}"
586
- elsif RbConfig::CONFIG['host_os'] =~ /darwin/
587
- open_command = "open #{link}"
588
- elsif RbConfig::CONFIG['host_os'] =~ /linux|bsd/
589
- open_command = "xdg-open #{link}"
590
- end
591
-
592
550
  if options[:dry_run]
593
- puts "system: #{open_command}"
551
+ puts Morpheus::Util.open_url_command(link)
594
552
  return 0
595
553
  end
596
-
597
- system(open_command)
598
-
599
- return 0
554
+ return Morpheus::Util.open_url(link)
600
555
  rescue RestClient::Exception => e
601
556
  print_rest_exception(e, options)
602
557
  exit 1
@@ -685,13 +640,10 @@ class Morpheus::Cli::Groups
685
640
 
686
641
  def print_groups_table(groups, opts={})
687
642
  table_color = opts[:color] || cyan
688
- active_group_id = @active_group_id # Morpheus::Cli::Groups.active_group
643
+ active_group = @active_group_id ? groups.find {|group| group['id'] == @active_group_id } : nil
689
644
  rows = groups.collect do |group|
690
- is_active = @active_group_id && (@active_group_id == group['id'])
691
645
  {
692
- active: (is_active ? "=>" : ""),
693
- id: group['id'],
694
- # name: is_active ? "#{green}#{group['name']}#{reset}#{table_color}" : group['name'],
646
+ id: active_group ? (((@active_group_id && (@active_group_id == group['id'])) ? "=> " : " ") + group['id'].to_s) : group['id'],
695
647
  name: group['name'],
696
648
  location: group['location'],
697
649
  cloud_count: group['zones'] ? group['zones'].size : 0,
@@ -699,8 +651,8 @@ class Morpheus::Cli::Groups
699
651
  }
700
652
  end
701
653
  columns = [
702
- {:active => {:display_name => ""}},
703
- {:id => {:width => 10}},
654
+ #{:active => {:display_name => ""}},
655
+ {:id => {:display_name => (active_group ? " ID" : "ID")}},
704
656
  {:name => {:width => 16}},
705
657
  {:location => {:width => 32}},
706
658
  {:cloud_count => {:display_name => "CLOUDS"}},
@@ -146,6 +146,7 @@ class Morpheus::Cli::Hosts
146
146
  created_by_ids = find_all_user_ids(account ? account['id'] : nil, options[:created_by])
147
147
  return if created_by_ids.nil?
148
148
  params['createdBy'] = created_by_ids
149
+ # params['ownerId'] = created_by_ids # 4.2.1+
149
150
  end
150
151
 
151
152
  cluster = nil
@@ -366,6 +367,7 @@ class Morpheus::Cli::Hosts
366
367
  created_by_ids = find_all_user_ids(account ? account['id'] : nil, options[:created_by])
367
368
  return if created_by_ids.nil?
368
369
  params['createdBy'] = created_by_ids
370
+ # params['ownerId'] = created_by_ids # 4.2.1+
369
371
  end
370
372
  @servers_interface.setopts(options)
371
373
  if options[:dry_run]
@@ -1435,9 +1437,9 @@ class Morpheus::Cli::Hosts
1435
1437
  execution_request = json_response['executionRequest']
1436
1438
  print_green_success "Executing request #{execution_request['uniqueId']}"
1437
1439
  if do_refresh
1438
- Morpheus::Cli::ExecutionRequestCommand.new.handle(["get", execution_request['uniqueId'], "--refresh"])
1440
+ Morpheus::Cli::ExecutionRequestCommand.new.handle(["get", execution_request['uniqueId'], "--refresh"]+ (options[:remote] ? ["-r",options[:remote]] : []))
1439
1441
  else
1440
- Morpheus::Cli::ExecutionRequestCommand.new.handle(["get", execution_request['uniqueId']])
1442
+ Morpheus::Cli::ExecutionRequestCommand.new.handle(["get", execution_request['uniqueId']]+ (options[:remote] ? ["-r",options[:remote]] : []))
1441
1443
  end
1442
1444
  return 0
1443
1445
  rescue RestClient::Exception => e
@@ -1568,23 +1570,11 @@ class Morpheus::Cli::Hosts
1568
1570
  link << "#!#{options[:link_tab]}"
1569
1571
  end
1570
1572
 
1571
- open_command = nil
1572
- if RbConfig::CONFIG['host_os'] =~ /mswin|mingw|cygwin/
1573
- open_command = "start #{link}"
1574
- elsif RbConfig::CONFIG['host_os'] =~ /darwin/
1575
- open_command = "open #{link}"
1576
- elsif RbConfig::CONFIG['host_os'] =~ /linux|bsd/
1577
- open_command = "xdg-open #{link}"
1578
- end
1579
-
1580
1573
  if options[:dry_run]
1581
- puts "system: #{open_command}"
1574
+ puts Morpheus::Util.open_url_command(link)
1582
1575
  return 0
1583
1576
  end
1584
-
1585
- system(open_command)
1586
-
1587
- return 0
1577
+ return Morpheus::Util.open_url(link)
1588
1578
  rescue RestClient::Exception => e
1589
1579
  print_rest_exception(e, options)
1590
1580
  exit 1