morpheus-cli 5.4.2 → 5.4.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (56) hide show
  1. checksums.yaml +4 -4
  2. data/Dockerfile +1 -1
  3. data/lib/morpheus/api/api_client.rb +12 -1
  4. data/lib/morpheus/api/catalog_item_types_interface.rb +17 -0
  5. data/lib/morpheus/api/clusters_interface.rb +12 -0
  6. data/lib/morpheus/api/credential_types_interface.rb +9 -0
  7. data/lib/morpheus/api/credentials_interface.rb +9 -0
  8. data/lib/morpheus/api/instances_interface.rb +28 -0
  9. data/lib/morpheus/api/monitoring_apps_interface.rb +12 -4
  10. data/lib/morpheus/api/monitoring_checks_interface.rb +12 -4
  11. data/lib/morpheus/api/monitoring_groups_interface.rb +13 -5
  12. data/lib/morpheus/api/monitoring_incidents_interface.rb +12 -4
  13. data/lib/morpheus/api/options_interface.rb +8 -1
  14. data/lib/morpheus/api/ping_interface.rb +2 -0
  15. data/lib/morpheus/api/power_schedules_interface.rb +2 -2
  16. data/lib/morpheus/api/service_plans_interface.rb +6 -0
  17. data/lib/morpheus/api/setup_interface.rb +4 -0
  18. data/lib/morpheus/api/snapshots_interface.rb +19 -0
  19. data/lib/morpheus/cli/cli_command.rb +10 -17
  20. data/lib/morpheus/cli/commands/catalog_item_types_command.rb +156 -1
  21. data/lib/morpheus/cli/commands/clusters.rb +177 -50
  22. data/lib/morpheus/cli/commands/credential_types_command.rb +36 -0
  23. data/lib/morpheus/cli/commands/credentials_command.rb +124 -0
  24. data/lib/morpheus/cli/commands/hosts.rb +32 -2
  25. data/lib/morpheus/cli/commands/instances.rb +255 -2
  26. data/lib/morpheus/cli/commands/library_instance_types_command.rb +3 -0
  27. data/lib/morpheus/cli/commands/monitoring_apps_command.rb +8 -8
  28. data/lib/morpheus/cli/commands/monitoring_checks_command.rb +8 -8
  29. data/lib/morpheus/cli/commands/monitoring_groups_command.rb +8 -8
  30. data/lib/morpheus/cli/commands/monitoring_incidents_command.rb +8 -8
  31. data/lib/morpheus/cli/commands/network_static_routes_command.rb +5 -0
  32. data/lib/morpheus/cli/commands/networks_command.rb +2 -2
  33. data/lib/morpheus/cli/commands/ping.rb +3 -5
  34. data/lib/morpheus/cli/commands/policies_command.rb +1 -1
  35. data/lib/morpheus/cli/commands/power_schedules_command.rb +189 -258
  36. data/lib/morpheus/cli/commands/provisioning_settings_command.rb +1 -0
  37. data/lib/morpheus/cli/commands/remote.rb +16 -10
  38. data/lib/morpheus/cli/commands/security_groups.rb +2 -2
  39. data/lib/morpheus/cli/commands/service_plans_command.rb +52 -5
  40. data/lib/morpheus/cli/commands/setup.rb +1 -1
  41. data/lib/morpheus/cli/commands/snapshots.rb +139 -0
  42. data/lib/morpheus/cli/commands/storage_server_types.rb +0 -5
  43. data/lib/morpheus/cli/commands/storage_servers.rb +0 -6
  44. data/lib/morpheus/cli/commands/storage_volume_types.rb +0 -5
  45. data/lib/morpheus/cli/commands/storage_volumes.rb +0 -6
  46. data/lib/morpheus/cli/commands/tasks.rb +5 -5
  47. data/lib/morpheus/cli/commands/user_settings_command.rb +1 -1
  48. data/lib/morpheus/cli/commands/virtual_images.rb +4 -1
  49. data/lib/morpheus/cli/mixins/provisioning_helper.rb +117 -27
  50. data/lib/morpheus/cli/mixins/rest_command.rb +20 -4
  51. data/lib/morpheus/cli/mixins/storage_servers_helper.rb +0 -63
  52. data/lib/morpheus/cli/mixins/storage_volumes_helper.rb +0 -43
  53. data/lib/morpheus/cli/option_types.rb +27 -11
  54. data/lib/morpheus/cli/version.rb +1 -1
  55. data/lib/morpheus/routes.rb +13 -3
  56. metadata +13 -7
@@ -69,6 +69,7 @@ class Morpheus::Cli::ProvisioningSettingsCommand
69
69
  "Hide Datastore Stats On Selection" => lambda {|it| format_boolean(it['hideDatastoreStats'])},
70
70
  "Cross-Tenant Naming Policies" => lambda {|it| format_boolean(it['crossTenantNamingPolicies'])},
71
71
  "Reuse Naming Sequence Numbers" => lambda {|it| format_boolean(it['reuseSequence'])},
72
+ "Show Console Keyboard Layout Settings" => lambda {|it| format_boolean(it['showConsoleKeyboardSettings'])},
72
73
  "Deployment Archive Store" => lambda {|it| it['deployStorageProvider'] ? it['deployStorageProvider']['name'] : nil},
73
74
  # Cloud-Init Settings
74
75
  "Cloud-Init Username" => lambda {|it| it['cloudInitUsername']},
@@ -102,7 +102,7 @@ EOT
102
102
  "URL" => lambda {|it| it[:url] || it[:host] },
103
103
  "Status" => lambda {|it| format_appliance_status(it, cyan) },
104
104
  "Version" => lambda {|it| it[:build_version] ? "#{it[:build_version]}" : '' },
105
- "Appliance URL" => lambda {|it| it[:appliance_url] ? "#{it[:appliance_url]}" : '' },
105
+ #"Appliance URL" => lambda {|it| it[:appliance_url] ? "#{it[:appliance_url]}" : '' },
106
106
  "Secure" => lambda {|it| format_boolean(it[:insecure] != true && (it[:url] || it[:host]).to_s.include?("https")) },
107
107
  "Active" => lambda {|it| it[:active] ? "Yes " + format_is_current() : "No" },
108
108
  #"Authenticated" => lambda {|it| format_boolean it[:authenticated] },
@@ -336,7 +336,7 @@ EOT
336
336
  print cyan,"Added remote #{new_appliance_name}, status is #{format_appliance_status(appliance)}",reset,"\n"
337
337
  end
338
338
 
339
- appliance, json_response = ::Morpheus::Cli::Remote.refresh_remote(new_appliance_name.to_sym)
339
+ #appliance, json_response = ::Morpheus::Cli::Remote.refresh_remote(new_appliance_name.to_sym)
340
340
  # if !options[:quiet]
341
341
  # print cyan
342
342
  # puts "Status: #{format_appliance_status(appliance)}"
@@ -390,7 +390,8 @@ EOT
390
390
  end
391
391
 
392
392
  end
393
-
393
+ # refresh to get buildVersion now that we are logged in
394
+ appliance, json_response = ::Morpheus::Cli::Remote.refresh_remote(new_appliance_name.to_sym)
394
395
  else
395
396
  #puts "Status is #{format_appliance_status(appliance)}"
396
397
  end
@@ -1278,7 +1279,7 @@ EOT
1278
1279
  "URL" => lambda {|it| it[:url] || it[:host] },
1279
1280
  #"Status" => lambda {|it| format_appliance_status(it, cyan) },
1280
1281
  "Version" => lambda {|it| it[:build_version] ? "#{it[:build_version]}" : '' },
1281
- "Appliance URL" => lambda {|it| it[:appliance_url] ? "#{it[:appliance_url]}" : '' },
1282
+ #"Appliance URL" => lambda {|it| it[:appliance_url] ? "#{it[:appliance_url]}" : '' },
1282
1283
  "Secure" => lambda {|it| format_appliance_secure(it) },
1283
1284
  "Active" => lambda {|it| it[:active] ? "Yes " + format_is_current() : "No" },
1284
1285
  # "Active" => lambda {|it| format_boolean(it[:active]) },
@@ -1696,7 +1697,10 @@ EOT
1696
1697
  # wtf, no url...
1697
1698
  return appliance, json_response
1698
1699
  else
1699
- setup_interface = Morpheus::SetupInterface.new({url:appliance_url, verify_ssl: !appliance[:insecure], timeout: timeout})
1700
+ # access token is needed for buildVersion
1701
+ wallet = Morpheus::Cli::Credentials.new(app_name, appliance_url).load_saved_credentials()
1702
+ setup_interface = Morpheus::SetupInterface.new({url:appliance_url, verify_ssl: !appliance[:insecure], timeout: timeout,
1703
+ access_token: (wallet && wallet['access_token']) ? wallet['access_token'] : nil})
1700
1704
  start_time = Time.now
1701
1705
  begin
1702
1706
  json_response = setup_interface.check(params)
@@ -1734,17 +1738,19 @@ EOT
1734
1738
  appliance[:last_check][:took] = (took_sec.to_f*1000).round
1735
1739
  end
1736
1740
  if json_response
1737
- if json_response.key?('applianceUrl')
1738
- appliance[:appliance_url] = json_response['applianceUrl']
1739
- end
1740
- if json_response.key?('buildVersion')
1741
- appliance[:build_version] = json_response['buildVersion']
1741
+ # if json_response.key?('applianceUrl')
1742
+ # appliance[:appliance_url] = json_response['applianceUrl']
1743
+ # end
1744
+ if json_response['success'] == true
1742
1745
  appliance[:status] = 'ready'
1743
1746
  appliance[:last_check][:success] = true
1744
1747
  # consider bumping this after every successful api command
1745
1748
  appliance[:last_success_at] = Time.now.to_i
1746
1749
  appliance.delete(:error)
1747
1750
  end
1751
+ if !json_response['buildVersion'].to_s.empty?
1752
+ appliance[:build_version] = json_response['buildVersion']
1753
+ end
1748
1754
  if json_response.key?('setupNeeded')
1749
1755
  if json_response['setupNeeded'] == true
1750
1756
  appliance[:setup_needed] = true
@@ -855,7 +855,7 @@ class Morpheus::Cli::SecurityGroups
855
855
 
856
856
  end
857
857
 
858
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'sourceType', 'fieldLabel' => 'Source Type', 'type' => 'select', 'optionSource' => 'securityGroupSourceType', 'required' => true, 'defaultValue' => 'cidr'}], options[:options], @api_client)
858
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'sourceType', 'fieldLabel' => 'Source Type', 'type' => 'select', 'optionSource' => 'securityGroupSourceType', 'required' => true, 'defaultValue' => 'cidr'}], options[:options], @api_client, {'rule.securityGroupId': security_group['id'], 'securityGroupRule.direction': payload['rule']['direction']})
859
859
  payload['rule']['sourceType'] = v_prompt['sourceType'] unless v_prompt['sourceType'].nil?
860
860
 
861
861
  if payload['rule']['sourceType'] == 'cidr'
@@ -869,7 +869,7 @@ class Morpheus::Cli::SecurityGroups
869
869
  payload['rule']['sourceTier'] = {"id" => v_prompt['sourceTier']} unless v_prompt['sourceTier'].nil?
870
870
  end
871
871
 
872
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'destinationType', 'fieldLabel' => 'Destination Type', 'type' => 'select', 'optionSource' => 'securityGroupDestinationType', 'required' => true, 'defaultValue' => 'instance'}], options[:options], @api_client)
872
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'destinationType', 'fieldLabel' => 'Destination Type', 'type' => 'select', 'optionSource' => 'securityGroupDestinationType', 'required' => true, 'defaultValue' => 'instance'}], options[:options], @api_client, {'rule.securityGroupId': security_group['id'], 'securityGroupRule.direction': payload['rule']['direction']})
873
873
  payload['rule']['destinationType'] = v_prompt['destinationType'] unless v_prompt['destinationType'].nil?
874
874
 
875
875
  if payload['rule']['destinationType'] == 'cidr'
@@ -7,7 +7,7 @@ class Morpheus::Cli::ServicePlanCommand
7
7
 
8
8
  set_command_name :'service-plans'
9
9
 
10
- register_subcommands :list, :get, :add, :update, :activate, :deactivate
10
+ register_subcommands :list, :get, :add, :update, :activate, :deactivate, :remove
11
11
  set_default_subcommand :list
12
12
 
13
13
  def connect(opts)
@@ -119,8 +119,6 @@ class Morpheus::Cli::ServicePlanCommand
119
119
  def _get(plan_id, options = {})
120
120
  params = {}
121
121
  begin
122
- @service_plans_interface.setopts(options)
123
-
124
122
  if !(plan_id.to_s =~ /\A\d{1,}\Z/)
125
123
  plan = find_service_plan(plan_id)
126
124
 
@@ -130,7 +128,7 @@ class Morpheus::Cli::ServicePlanCommand
130
128
  end
131
129
  plan_id = plan['id']
132
130
  end
133
-
131
+ @service_plans_interface.setopts(options)
134
132
  if options[:dry_run]
135
133
  print_dry_run @service_plans_interface.dry.get(plan_id)
136
134
  return
@@ -575,7 +573,7 @@ class Morpheus::Cli::ServicePlanCommand
575
573
  options[:provisionType] = options[:provisionType] || (args.count > 1 ? args[1] : nil)
576
574
 
577
575
  if !options[:provisionType].nil?
578
- provision_types = @service_plans_interface.provision_types()['provisionTypes']
576
+ provision_types = @service_plans_interface.provision_types({max: 10000})['provisionTypes']
579
577
  provision_type = provision_types.find {|it| it['name'] == options[:provisionType] || it['code'] == options[:provisionType] || it['id'] == options[:provisionType].to_i}
580
578
 
581
579
  if provision_type.nil?
@@ -740,6 +738,55 @@ class Morpheus::Cli::ServicePlanCommand
740
738
  end
741
739
  end
742
740
 
741
+ def remove(args)
742
+ options = {}
743
+ params = {}
744
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
745
+ opts.banner = subcommand_usage( "[plan]")
746
+ build_common_options(opts, options, [:json, :dry_run, :remote, :auto_confirm])
747
+ opts.footer = "Delete a service plan.\n" +
748
+ "[plan] is required. Service plan ID, name or code"
749
+ end
750
+ optparse.parse!(args)
751
+ connect(options)
752
+ if args.count != 1
753
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args}\n#{optparse}"
754
+ return 1
755
+ end
756
+
757
+ begin
758
+ plan = find_service_plan(args[0])
759
+
760
+ if !plan
761
+ print_red_alert "Service plan #{args[0]} not found"
762
+ return 1
763
+ end
764
+
765
+ unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to delete the service plan '#{plan['name']}'?", options)
766
+ return 9, "aborted command"
767
+ end
768
+
769
+ @service_plans_interface.setopts(options)
770
+ if options[:dry_run]
771
+ print_dry_run @service_plans_interface.dry.destroy(plan['id'], params)
772
+ return
773
+ end
774
+
775
+ json_response = @service_plans_interface.destroy(plan['id'], params)
776
+
777
+ if options[:json]
778
+ print JSON.pretty_generate(json_response)
779
+ print "\n"
780
+ elsif !options[:quiet]
781
+ print_green_success "Service plan #{plan['name']} deleted"
782
+ end
783
+ return 0
784
+ rescue RestClient::Exception => e
785
+ print_rest_exception(e, options)
786
+ exit 1
787
+ end
788
+ end
789
+
743
790
  private
744
791
 
745
792
  def find_service_plan(val)
@@ -95,7 +95,7 @@ EOT
95
95
  # my_terminal.execute("setup needed?")
96
96
  # theres a bug here with --remote-url :status == "unknown"
97
97
  # but hey, we got json back, so set status to "ready"
98
- if appliance_status_json && appliance_status_json['setupNeeded'] == false
98
+ if appliance_status_json
99
99
  @remote_appliance[:status] == 'ready'
100
100
  end
101
101
  remote_status_string = format_appliance_status(@remote_appliance, cyan)
@@ -0,0 +1,139 @@
1
+ require 'morpheus/cli/cli_command'
2
+
3
+ class Morpheus::Cli::Snapshots
4
+ include Morpheus::Cli::CliCommand
5
+
6
+ set_command_name :snapshots
7
+ set_command_description "View or remove snapshot"
8
+ register_subcommands :get, :remove
9
+
10
+ alias_subcommand :details, :get
11
+ set_default_subcommand :get
12
+
13
+ def connect(opts)
14
+ @api_client = establish_remote_appliance_connection(opts)
15
+ @snapshots_interface = @api_client.snapshots
16
+ end
17
+
18
+ def handle(args)
19
+ handle_subcommand(args)
20
+ end
21
+
22
+ def get(args)
23
+ options = {}
24
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
25
+ opts.banner = subcommand_usage("[id]")
26
+ opts.footer = "Get Snapshot details." + "\n" +
27
+ "[snapshotId] is required. This is the id of the snapshot."
28
+ build_common_options(opts, options, [:json, :yaml, :csv, :fields, :dry_run, :remote])
29
+ end
30
+ optparse.parse!(args)
31
+ if args.count < 1
32
+ puts_error "[id] argument is required"
33
+ puts_error optparse
34
+ return 1
35
+ end
36
+
37
+ connect(options)
38
+ id_list = parse_id_list(args)
39
+
40
+ return run_command_for_each_arg(id_list) do |arg|
41
+ _get(arg, options)
42
+ end
43
+ end
44
+
45
+ def _get(arg, options)
46
+ begin
47
+
48
+ @snapshots_interface.setopts(options)
49
+ if options[:dry_run]
50
+ print_dry_run @snapshots_interface.dry.get(arg.to_i)
51
+ return
52
+ end
53
+
54
+ json_response = @snapshots_interface.get(arg.to_i)
55
+ if options[:json]
56
+ puts as_json(json_response, options, "snapshot")
57
+ return 0
58
+ elsif options[:yaml]
59
+ puts as_yaml(json_response, options, "snapshot")
60
+ return 0
61
+ end
62
+
63
+ if options[:csv]
64
+ puts records_as_csv([json_response['snapshot']], options)
65
+ return 0
66
+ end
67
+ snapshot = json_response['snapshot']
68
+
69
+ print_h1 "Snapshot Details"
70
+ print cyan
71
+ description_cols = {
72
+ "ID" => 'id',
73
+ "Name" => 'name',
74
+ "Description" => 'description',
75
+ "External Id" => 'externalId',
76
+ "Status" => 'status',
77
+ "State" => 'state',
78
+ "Snapshot Type" => 'snapshotType',
79
+ "Snapshot Created" => 'snapshotCreated',
80
+ "Cloud" => 'zone.name',
81
+ "Datastore" => 'datastore',
82
+ "Parent Snapshot" => 'parentSnapshot',
83
+ "Active" => 'currentlyActive',
84
+ "Date Created" => 'dateCreated'
85
+ }
86
+ print_description_list(description_cols, snapshot)
87
+
88
+ print reset, "\n"
89
+
90
+ return 0
91
+ rescue RestClient::Exception => e
92
+ print_rest_exception(e, options)
93
+ return 1
94
+ end
95
+ end
96
+
97
+ def remove(args)
98
+ options = {}
99
+ instance = nil
100
+ snapshot_id = nil
101
+
102
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
103
+ opts.banner = subcommand_usage("[instance]")
104
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :remote])
105
+ opts.footer = "Remove/Delete a snapshot." + "\n" +
106
+ "[snapshotId] is required. This is the id of the snapshot to delete."
107
+ end
108
+
109
+ optparse.parse!(args)
110
+ if args.count != 1
111
+ raise_command_error "wrong number of arguments, expected 1 and got (#{args.count}) #{args.join(' ')}\n#{optparse}"
112
+ end
113
+ snapshot_id = args[0].to_i
114
+ connect(options)
115
+ begin
116
+ unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to remove a snapshot?", options)
117
+ exit 1
118
+ end
119
+
120
+ payload = {}
121
+ if options[:dry_run]
122
+ print_dry_run @snapshots_interface.dry.remove(snapshot_id, payload)
123
+ return
124
+ end
125
+
126
+ json_response = @snapshots_interface.remove(snapshot_id, payload)
127
+ if options[:json]
128
+ puts as_json(json_response, options)
129
+ else
130
+ print_green_success "Snapshot delete initiated."
131
+ end
132
+ return 0
133
+
134
+ rescue RestClient::Exception => e
135
+ print_rest_exception(e, options)
136
+ exit 1
137
+ end
138
+ end
139
+ end
@@ -41,10 +41,5 @@ class Morpheus::Cli::StorageServerTypes
41
41
  }
42
42
  end
43
43
 
44
- # overridden to support name or code
45
- def find_storage_server_type_by_name_or_id(name)
46
- storage_server_type_for_name_or_id(name)
47
- end
48
-
49
44
  end
50
45
 
@@ -66,12 +66,6 @@ class Morpheus::Cli::StorageServers
66
66
  }
67
67
  end
68
68
 
69
- # overridden to work with name or code
70
- # nope, api works with name=code now too
71
- # def find_storage_server_type_by_name_or_id(name)
72
- # storage_server_type_for_name_or_id(name)
73
- # end
74
-
75
69
  def add_storage_server_option_types()
76
70
  [
77
71
  {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true},
@@ -41,10 +41,5 @@ class Morpheus::Cli::StorageVolumeTypes
41
41
  }
42
42
  end
43
43
 
44
- # overridden to support name or code
45
- def find_storage_volume_type_by_name_or_id(name)
46
- storage_volume_type_for_name_or_id(name)
47
- end
48
-
49
44
  end
50
45
 
@@ -65,12 +65,6 @@ class Morpheus::Cli::StorageVolumes
65
65
  }
66
66
  end
67
67
 
68
- # overridden to work with name or code
69
- # nope, api works with name=code now too
70
- # def find_storage_volume_type_by_name_or_id(name)
71
- # storage_volume_type_for_name_or_id(name)
72
- # end
73
-
74
68
  def add_storage_volume_option_types()
75
69
  [
76
70
  {'fieldContext' => 'storageServer', 'fieldName' => 'id', 'fieldLabel' => 'Storage Server', 'type' => 'select', 'optionSource' => 'storageServers', 'optionParams' => {'createType' => 'block'}, 'required' => true},
@@ -179,7 +179,7 @@ class Morpheus::Cli::Tasks
179
179
  task_option_config = {}
180
180
  task_option_columns = []
181
181
  task_type['optionTypes'].sort { |x,y| x['displayOrder'].to_i <=> y['displayOrder'].to_i }.each do |optionType|
182
- if optionType['fieldLabel'].to_s.downcase == 'script'
182
+ if optionType['code'] == 'script'
183
183
  script_content = task['taskOptions'][optionType['fieldName']]
184
184
  elsif optionType['fieldName'] == 'httpHeaders' || optionType['fieldName'] == 'webHeaders'
185
185
  http_headers = task['taskOptions']['httpHeaders'] || task['taskOptions']['webHeaders']
@@ -553,11 +553,11 @@ class Morpheus::Cli::Tasks
553
553
  payload['task']['retryCount'] = v_prompt['retryCount'].to_i unless v_prompt['retryCount'].nil?
554
554
  end
555
555
  # Retry Delay
556
- if options[:options]['retryDelay']
557
- payload['task']['retryDelay'] = options[:options]['retryDelay'].to_i
556
+ if options[:options]['retryDelaySeconds']
557
+ payload['task']['retryDelaySeconds'] = options[:options]['retryDelaySeconds'].to_i
558
558
  else
559
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'retryDelay', 'fieldLabel' => 'Retry Delay', 'type' => 'number', 'defaultValue' => 10}], options[:options], @api_client)
560
- payload['task']['retryDelay'] = v_prompt['retryDelay'].to_i unless v_prompt['retryDelay'].nil?
559
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'retryDelaySeconds', 'fieldLabel' => 'Retry Delay', 'type' => 'number', 'defaultValue' => 10}], options[:options], @api_client)
560
+ payload['task']['retryDelaySeconds'] = v_prompt['retryDelaySeconds'].to_i unless v_prompt['retryDelaySeconds'].nil?
561
561
  end
562
562
  end
563
563
 
@@ -803,7 +803,7 @@ EOT
803
803
  {'fieldName' => 'windowsPassword', 'fieldLabel' => 'Windows Password', 'type' => 'password'},
804
804
  {'fieldName' => 'defaultGroup', 'fieldLabel' => 'Default Group ID', 'type' => 'text'},
805
805
  {'fieldName' => 'defaultCloud', 'fieldLabel' => 'Default Cloud ID', 'type' => 'text'},
806
- {'fieldName' => 'defaultPersona', 'fieldLabel' => 'Default Persona Name or Code or ID', 'type' => 'text'},
806
+ {'fieldName' => 'defaultPersona', 'fieldLabel' => 'Default Persona Name or Code or ID eg. standard, serviceCatalog or vdi', 'type' => 'text'},
807
807
  {'switch' => 'change-password', 'fieldName' => 'password', 'fieldLabel' => 'Password', 'type' => 'password', 'description' => 'Change user credentials to use a new password'},
808
808
  {'fieldName' => 'avatar', 'fieldLabel' => 'Avatar', 'type' => 'file', 'description' => 'Local filepath of image file to upload as user avatar'},
809
809
  {'fieldName' => 'desktopBackground', 'fieldLabel' => 'Desktop Background', 'type' => 'file', 'description' => 'Local filepath of image file to upload as user desktop background'},
@@ -38,6 +38,9 @@ class Morpheus::Cli::VirtualImages
38
38
  end
39
39
  opts.on('--system', "System Images" ) do
40
40
  options[:filterType] = 'System'
41
+ end
42
+ opts.on('--synced', "Synced Images" ) do
43
+ options[:filterType] = 'Synced'
41
44
  end
42
45
  opts.on('--tags Name=Value',String, "Filter by tags (metadata name value pairs).") do |val|
43
46
  val.split(",").each do |value_pair|
@@ -51,7 +54,7 @@ class Morpheus::Cli::VirtualImages
51
54
  options[:details] = true
52
55
  end
53
56
  build_standard_list_options(opts, options)
54
- opts.footer = "List virtual images."
57
+ opts.footer = "List virtual images. Default list applies User filter"
55
58
  end
56
59
  optparse.parse!(args)
57
60
  connect(options)