morpheus-cli 3.6.28 → 3.6.29

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/lib/morpheus/api/api_client.rb +16 -0
  3. data/lib/morpheus/api/cloud_folders_interface.rb +47 -0
  4. data/lib/morpheus/api/cloud_resource_pools_interface.rb +47 -0
  5. data/lib/morpheus/api/network_types_interface.rb +26 -0
  6. data/lib/morpheus/api/reports_interface.rb +77 -0
  7. data/lib/morpheus/api/security_group_rules_interface.rb +6 -0
  8. data/lib/morpheus/api/security_groups_interface.rb +21 -15
  9. data/lib/morpheus/cli.rb +3 -0
  10. data/lib/morpheus/cli/accounts.rb +1 -1
  11. data/lib/morpheus/cli/apps.rb +2 -2
  12. data/lib/morpheus/cli/archives_command.rb +18 -18
  13. data/lib/morpheus/cli/blueprints_command.rb +1 -1
  14. data/lib/morpheus/cli/boot_scripts_command.rb +6 -6
  15. data/lib/morpheus/cli/cli_command.rb +4 -0
  16. data/lib/morpheus/cli/cloud_datastores_command.rb +58 -20
  17. data/lib/morpheus/cli/cloud_folders_command.rb +463 -0
  18. data/lib/morpheus/cli/cloud_resource_pools_command.rb +707 -0
  19. data/lib/morpheus/cli/clouds.rb +2 -0
  20. data/lib/morpheus/cli/hosts.rb +33 -8
  21. data/lib/morpheus/cli/instances.rb +79 -54
  22. data/lib/morpheus/cli/library_option_lists_command.rb +1 -1
  23. data/lib/morpheus/cli/library_option_types_command.rb +1 -1
  24. data/lib/morpheus/cli/mixins/provisioning_helper.rb +11 -2
  25. data/lib/morpheus/cli/monitoring_contacts_command.rb +1 -1
  26. data/lib/morpheus/cli/monitoring_incidents_command.rb +1 -1
  27. data/lib/morpheus/cli/network_services_command.rb +7 -3
  28. data/lib/morpheus/cli/networks_command.rb +164 -63
  29. data/lib/morpheus/cli/option_types.rb +16 -15
  30. data/lib/morpheus/cli/policies_command.rb +76 -9
  31. data/lib/morpheus/cli/preseed_scripts_command.rb +2 -2
  32. data/lib/morpheus/cli/remote.rb +26 -28
  33. data/lib/morpheus/cli/reports_command.rb +594 -0
  34. data/lib/morpheus/cli/security_group_rules.rb +5 -1
  35. data/lib/morpheus/cli/security_groups.rb +882 -45
  36. data/lib/morpheus/cli/tasks.rb +158 -23
  37. data/lib/morpheus/cli/tenants_command.rb +1 -1
  38. data/lib/morpheus/cli/users.rb +1 -1
  39. data/lib/morpheus/cli/version.rb +1 -1
  40. metadata +9 -2
@@ -285,7 +285,7 @@ class Morpheus::Cli::LibraryOptionListsCommand
285
285
  end
286
286
  end
287
287
  if params.empty?
288
- print_red_alert "Specify atleast one option to update"
288
+ print_red_alert "Specify at least one option to update"
289
289
  puts optparse
290
290
  exit 1
291
291
  end
@@ -211,7 +211,7 @@ class Morpheus::Cli::LibraryOptionTypesCommand
211
211
  #params = options[:options] || {}
212
212
  params = Morpheus::Cli::OptionTypes.no_prompt(update_option_type_option_types, options[:options], @api_client, options[:params])
213
213
  if params.empty?
214
- print_red_alert "Specify atleast one option to update"
214
+ print_red_alert "Specify at least one option to update"
215
215
  puts optparse
216
216
  exit 1
217
217
  end
@@ -317,7 +317,10 @@ module Morpheus::Cli::ProvisioningHelper
317
317
 
318
318
  available_versions = options_interface.options_for_source('instanceVersions',{groupId: group_id, cloudId: cloud_id, instanceTypeId: instance_type['id']})['data']
319
319
  default_version_value = payload['instance']['version'] ? payload['instance']['version'] : payload['version']
320
- default_layout_value = payload['instance']['layout'] ? payload['instance']['layout']['id'] : nil
320
+ default_layout_value = payload['instance']['layout'] ? payload['instance']['layout'] : payload['layout']
321
+ if default_layout_value && default_layout_value.is_a?(Hash)
322
+ default_layout_value = default_layout_value['id']
323
+ end
321
324
  # JD: version is always nil because it is not stored in the blueprint or config !!
322
325
  # so for now, infer the version from the layout
323
326
  # requires api 3.6.2 to get "layouts" from /options/versions
@@ -341,6 +344,12 @@ module Morpheus::Cli::ProvisioningHelper
341
344
  version_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'version', 'type' => 'select', 'fieldLabel' => 'Version', 'selectOptions' => available_versions, 'required' => version_is_required, 'skipSingleOption' => true, 'autoPickOption' => true, 'description' => 'Select which version of the instance type to be provisioned.', 'defaultValue' => default_version_value}],options[:options],api_client,{groupId: group_id, cloudId: cloud_id, instanceTypeId: instance_type['id']})
342
345
  version_value = version_prompt['version']
343
346
  end
347
+ # JD: there is a bug here, the version needs to be passed perhaps? or the optionSource methods need updating...
348
+ # could just allow for now ...
349
+ # if options[:options]["layout"]
350
+ # layout_id = options[:options]["layout"]
351
+ # ...
352
+ # end
344
353
  layout_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'layout', 'type' => 'select', 'fieldLabel' => 'Layout', 'optionSource' => 'layoutsForCloud', 'required' => true, 'description' => 'Select which configuration of the instance type to be provisioned.', 'defaultValue' => default_layout_value}],options[:options],api_client,{groupId: group_id, cloudId: cloud_id, instanceTypeId: instance_type['id'], version: version_value})
345
354
  layout_id = layout_prompt['layout']
346
355
  layout = instance_type['instanceTypeLayouts'].find{ |lt| lt['id'] == layout_id.to_i}
@@ -432,7 +441,7 @@ module Morpheus::Cli::ProvisioningHelper
432
441
  option_type_list = option_type_list.reject {|opt| ['resourcePool','resourcePoolId','azureResourceGroupId'].include?(opt['fieldName']) }
433
442
  end
434
443
 
435
- instance_config_payload = Morpheus::Cli::OptionTypes.prompt(option_type_list, options[:options], @api_client, {groupId: group_id, cloudId: cloud_id, zoneId: cloud_id, instanceTypeId: instance_type['id'], version: version_prompt['version']})
444
+ instance_config_payload = Morpheus::Cli::OptionTypes.prompt(option_type_list, options[:options], @api_client, {groupId: group_id, cloudId: cloud_id, zoneId: cloud_id, instanceTypeId: instance_type['id'], version: version_value})
436
445
  payload.deep_merge!(instance_config_payload)
437
446
 
438
447
  ## Advanced Options
@@ -231,7 +231,7 @@ class Morpheus::Cli::MonitoringContactsCommand
231
231
  contact = find_contact_by_name_or_id(args[0])
232
232
 
233
233
  if params.empty?
234
- print_red_alert "Specify atleast one option to update"
234
+ print_red_alert "Specify at least one option to update"
235
235
  puts optparse
236
236
  exit 1
237
237
  end
@@ -447,7 +447,7 @@ class Morpheus::Cli::MonitoringIncidentsCommand
447
447
  end
448
448
 
449
449
  if params.empty?
450
- print_red_alert "Specify atleast one option to update"
450
+ print_red_alert "Specify at least one option to update"
451
451
  puts optparse
452
452
  exit 1
453
453
  end
@@ -35,8 +35,8 @@ class Morpheus::Cli::NetworkServicesCommand
35
35
  params = {}
36
36
  optparse = Morpheus::Cli::OptionParser.new do |opts|
37
37
  opts.banner = subcommand_usage()
38
- build_common_options(opts, options, [:list, :json, :yaml, :csv, :fields, :json, :dry_run, :remote])
39
- opts.footer = "List network services."
38
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
39
+ opts.footer = "List network services (Integrations)."
40
40
  end
41
41
  optparse.parse!(args)
42
42
  connect(options)
@@ -81,7 +81,11 @@ class Morpheus::Cli::NetworkServicesCommand
81
81
  print cyan
82
82
  print as_pretty_table(rows, columns, options)
83
83
  print reset
84
- print_results_pagination(json_response, {:label => "network service", :n_label => "network services"})
84
+ if json_response['meta']
85
+ print_results_pagination(json_response, {:label => "network service", :n_label => "network services"})
86
+ else
87
+ print_results_pagination({'meta'=>{'total'=>rows.size,'size'=>rows.size,'max'=>options[:max] || rows.size,'offset'=>0}}, {:label => "network service", :n_label => "network services"})
88
+ end
85
89
  end
86
90
  print reset,"\n"
87
91
  return 0
@@ -11,7 +11,8 @@ class Morpheus::Cli::NetworksCommand
11
11
  set_command_name :networks
12
12
 
13
13
  register_subcommands :list, :get, :add, :update, :remove #, :generate_pool
14
-
14
+ register_subcommands :'types' => :list_types
15
+
15
16
  # set_default_subcommand :list
16
17
 
17
18
  def initialize()
@@ -21,6 +22,7 @@ class Morpheus::Cli::NetworksCommand
21
22
  def connect(opts)
22
23
  @api_client = establish_remote_appliance_connection(opts)
23
24
  @networks_interface = @api_client.networks
25
+ @network_types_interface = @api_client.network_types
24
26
  @clouds_interface = @api_client.clouds
25
27
  @options_interface = @api_client.options
26
28
  end
@@ -154,6 +156,7 @@ class Morpheus::Cli::NetworksCommand
154
156
  "Primary DNS" => 'dnsPrimary',
155
157
  "Secondary DNS" => 'dnsSecondary',
156
158
  "Pool" => lambda {|it| it['pool'] ? it['pool']['name'] : '' },
159
+ "VPC" => lambda {|it| it['zonePool'] ? it['zonePool']['name'] : '' },
157
160
  "DHCP" => lambda {|it| it['dhcpServer'] ? 'Yes' : 'No' },
158
161
  "Allow IP Override" => lambda {|it| it['allowStaticOverride'] ? 'Yes' : 'No' },
159
162
  "Visibility" => lambda {|it| it['visibility'].to_s.capitalize },
@@ -323,6 +326,22 @@ class Morpheus::Cli::NetworksCommand
323
326
  # allow arbitrary -O options
324
327
  payload['network'].deep_merge!(options[:options].reject {|k,v| k.is_a?(Symbol) }) if options[:options]
325
328
 
329
+ # Name
330
+ if options['name']
331
+ payload['network']['name'] = options['name']
332
+ else
333
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network.'}], options)
334
+ payload['network']['name'] = v_prompt['name']
335
+ end
336
+
337
+ # Description
338
+ if options['description']
339
+ payload['network']['description'] = options['description']
340
+ else
341
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false, 'description' => 'Description of network.'}], options)
342
+ payload['network']['description'] = v_prompt['description']
343
+ end
344
+
326
345
  # Cloud
327
346
  cloud = nil
328
347
  if options[:cloud]
@@ -350,62 +369,92 @@ class Morpheus::Cli::NetworksCommand
350
369
  end
351
370
  payload['network']['type'] = {'id' => network_type_id.to_i }
352
371
 
353
- # Name
354
- if options['name']
355
- payload['network']['name'] = options['name']
372
+ network_type = nil
373
+ json_response = @network_types_interface.get(network_type_id)
374
+ if json_response["networkType"]
375
+ network_type = json_response["networkType"]
356
376
  else
357
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => true, 'description' => 'Name for this network.'}], options)
358
- payload['network']['name'] = v_prompt['name']
377
+ print_red_alert "Network Type not found by id '#{network_type_id}'"
378
+ return 1
359
379
  end
380
+ network_type_option_types = network_type['optionTypes']
381
+ if network_type_option_types && network_type_option_types.size > 0
382
+ # prompt for option types
383
+ # JD: 3.6.2 has fieldContext: 'domain' , which is wrong
384
+ network_type_option_types.each do |option_type|
385
+ # if option_type['fieldContext'] == 'domain'
386
+ # option_type['fieldContext'] = 'network'
387
+ # end
388
+ option_type['fieldContext'] = nil
389
+ end
390
+ network_type_params = Morpheus::Cli::OptionTypes.prompt(network_type_option_types,options[:options],@api_client, {zoneId: cloud['id']})
391
+ payload['network'].deep_merge!(network_type_params)
360
392
 
361
- # Description
362
- if options['description']
363
- payload['network']['description'] = options['description']
364
- else
365
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'description', 'fieldLabel' => 'Description', 'type' => 'text', 'required' => false, 'description' => 'Description of network.'}], options)
366
- payload['network']['description'] = v_prompt['description']
367
- end
393
+ #todo: special handling of type: 'aciVxlan'
368
394
 
369
- # Gateway
370
- if options['gateway']
371
- payload['network']['gateway'] = options['gateway']
372
395
  else
373
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'gateway', 'fieldLabel' => 'Gateway', 'type' => 'text', 'required' => false, 'description' => ''}], options)
374
- payload['network']['gateway'] = v_prompt['gateway']
375
- end
396
+ # DEFAULT INPUTS
397
+
398
+ # Gateway
399
+ if options['gateway']
400
+ payload['network']['gateway'] = options['gateway']
401
+ else
402
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'gateway', 'fieldLabel' => 'Gateway', 'type' => 'text', 'required' => false, 'description' => ''}], options)
403
+ payload['network']['gateway'] = v_prompt['gateway']
404
+ end
376
405
 
377
- # DNS Primary
378
- if options['dnsPrimary']
379
- payload['network']['dnsPrimary'] = options['dnsPrimary']
380
- else
381
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsPrimary', 'fieldLabel' => 'DNS Primary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
382
- payload['network']['dnsPrimary'] = v_prompt['dnsPrimary']
383
- end
406
+ # DNS Primary
407
+ if options['dnsPrimary']
408
+ payload['network']['dnsPrimary'] = options['dnsPrimary']
409
+ else
410
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsPrimary', 'fieldLabel' => 'DNS Primary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
411
+ payload['network']['dnsPrimary'] = v_prompt['dnsPrimary']
412
+ end
384
413
 
385
- # DNS Secondary
386
- if options['dnsSecondary']
387
- payload['network']['dnsSecondary'] = options['dnsSecondary']
388
- else
389
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsSecondary', 'fieldLabel' => 'DNS Secondary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
390
- payload['network']['dnsSecondary'] = v_prompt['dnsSecondary']
391
- end
414
+ # DNS Secondary
415
+ if options['dnsSecondary']
416
+ payload['network']['dnsSecondary'] = options['dnsSecondary']
417
+ else
418
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dnsSecondary', 'fieldLabel' => 'DNS Secondary', 'type' => 'text', 'required' => false, 'description' => ''}], options)
419
+ payload['network']['dnsSecondary'] = v_prompt['dnsSecondary']
420
+ end
392
421
 
393
- # CIDR
394
- if options['cidr']
395
- payload['network']['cidr'] = options['cidr']
396
- else
397
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cidr', 'fieldLabel' => 'CIDR', 'type' => 'text', 'required' => false, 'description' => ''}], options)
398
- payload['network']['cidr'] = v_prompt['cidr']
399
- end
422
+ # CIDR
423
+ if options['cidr']
424
+ payload['network']['cidr'] = options['cidr']
425
+ else
426
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'cidr', 'fieldLabel' => 'CIDR', 'type' => 'text', 'required' => false, 'description' => ''}], options)
427
+ payload['network']['cidr'] = v_prompt['cidr']
428
+ end
429
+
430
+ # VLAN ID
431
+ if options['vlanId']
432
+ payload['network']['vlanId'] = options['vlanId']
433
+ else
434
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'vlanId', 'fieldLabel' => 'VLAN ID', 'type' => 'number', 'required' => false, 'description' => ''}], options)
435
+ payload['network']['vlanId'] = v_prompt['vlanId']
436
+ end
437
+
438
+ # DHCP Server
439
+ if options['dhcpServer'] != nil
440
+ payload['network']['dhcpServer'] = options['dhcpServer']
441
+ else
442
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dhcpServer', 'fieldLabel' => 'DHCP Server', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
443
+ payload['network']['dhcpServer'] = v_prompt['dhcpServer']
444
+ end
445
+
446
+ # Allow IP Override
447
+ if options['allowStaticOverride'] != nil
448
+ payload['network']['allowStaticOverride'] = options['allowStaticOverride']
449
+ else
450
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'allowStaticOverride', 'fieldLabel' => 'Allow IP Override', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
451
+ payload['network']['allowStaticOverride'] = v_prompt['allowStaticOverride']
452
+ end
400
453
 
401
- # VLAN ID
402
- if options['vlanId']
403
- payload['network']['vlanId'] = options['vlanId']
404
- else
405
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'vlanId', 'fieldLabel' => 'VLAN ID', 'type' => 'number', 'required' => false, 'description' => ''}], options)
406
- payload['network']['vlanId'] = v_prompt['vlanId']
407
454
  end
408
455
 
456
+ ## IPAM Options
457
+
409
458
  # Network Pool
410
459
  if options['pool']
411
460
  payload['network']['pool'] = options['pool'].to_i
@@ -415,23 +464,9 @@ class Morpheus::Cli::NetworksCommand
415
464
  v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'pool', 'fieldLabel' => 'Network Pool', 'type' => 'text', 'required' => false, 'description' => ''}], options)
416
465
  payload['network']['pool'] = v_prompt['pool'].to_i if v_prompt['pool']
417
466
  end
418
-
419
- # DHCP Server
420
- if options['dhcpServer'] != nil
421
- payload['network']['dhcpServer'] = options['dhcpServer']
422
- else
423
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'dhcpServer', 'fieldLabel' => 'DHCP Server', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
424
- payload['network']['dhcpServer'] = v_prompt['dhcpServer']
425
- end
426
-
427
- # Allow IP Override
428
- if options['allowStaticOverride'] != nil
429
- payload['network']['allowStaticOverride'] = options['allowStaticOverride']
430
- else
431
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'allowStaticOverride', 'fieldLabel' => 'Allow IP Override', 'type' => 'checkbox', 'required' => false, 'description' => ''}], options)
432
- payload['network']['allowStaticOverride'] = v_prompt['allowStaticOverride']
433
- end
434
467
 
468
+ ## Advanced Options
469
+
435
470
  # Network Domain
436
471
  if options['domain']
437
472
  payload['network']['networkDomain'] = {'id' => options['domain'].to_i}
@@ -909,10 +944,76 @@ class Morpheus::Cli::NetworksCommand
909
944
  end
910
945
  end
911
946
 
947
+ def list_types(args)
948
+ options = {}
949
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
950
+ opts.banner = subcommand_usage()
951
+ opts.on( '-c', '--cloud CLOUD', "Cloud Name or ID" ) do |val|
952
+ options[:cloud] = val
953
+ end
954
+ build_common_options(opts, options, [:list, :query, :json, :yaml, :csv, :fields, :dry_run, :remote])
955
+ opts.footer = "List host types."
956
+ end
957
+ optparse.parse!(args)
958
+ connect(options)
959
+ begin
960
+ params = {}
961
+ params.merge!(parse_list_options(options))
962
+ if options[:cloud]
963
+ #return network_types_for_cloud(options[:cloud], options)
964
+ zone = find_zone_by_name_or_id(nil, options[:cloud])
965
+ #params["zoneTypeId"] = zone['zoneTypeId']
966
+ params["zoneId"] = zone['id']
967
+ params["creatable"] = true
968
+ end
969
+ @network_types_interface.setopts(options)
970
+ if options[:dry_run]
971
+ print_dry_run @network_types_interface.dry.list(params)
972
+ return
973
+ end
974
+ json_response = @network_types_interface.list(params)
975
+
976
+ render_result = render_with_format(json_response, options, 'networkTypes')
977
+ return 0 if render_result
978
+
979
+ network_types = json_response['networkTypes']
980
+
981
+ title = "Morpheus network Types"
982
+ subtitles = []
983
+ subtitles += parse_list_subtitles(options)
984
+ if options[:cloud]
985
+ subtitles << "Cloud: #{options[:cloud]}"
986
+ end
987
+ print_h1 title, subtitles
988
+ if network_types.empty?
989
+ print cyan,"No network types found.",reset,"\n"
990
+ else
991
+ rows = network_types.collect do |network_type|
992
+ {
993
+ id: network_type['id'],
994
+ code: network_type['code'],
995
+ name: network_type['name']
996
+ }
997
+ end
998
+ columns = [:id, :name, :code]
999
+ print cyan
1000
+ print as_pretty_table(rows, columns, options)
1001
+ print reset
1002
+ print_results_pagination(json_response)
1003
+ end
1004
+ print reset,"\n"
1005
+ return 0
1006
+
1007
+ rescue RestClient::Exception => e
1008
+ print_rest_exception(e, options)
1009
+ exit 1
1010
+ end
1011
+ end
1012
+
912
1013
  private
913
1014
 
914
1015
 
915
- def find_network_by_name_or_id(val)
1016
+ def find_network_by_name_or_id(val)
916
1017
  if val.to_s =~ /\A\d{1,}\Z/
917
1018
  return find_network_by_id(val)
918
1019
  else
@@ -56,9 +56,13 @@ module Morpheus
56
56
  # end
57
57
  # end
58
58
 
59
- if option_type['fieldContext']
59
+ field_key = [option_type['fieldContext'], option_type['fieldName']].select {|it| it && it != '' }.join('.')
60
+ namespaces = field_key.split(".")
61
+ field_name = namespaces.pop
62
+
63
+ if field_key.include?(".")
60
64
  cur_namespace = options
61
- namespaces = option_type['fieldContext'].split(".")
65
+
62
66
  namespaces.each do |ns|
63
67
  next if ns.empty?
64
68
  cur_namespace[ns.to_s] ||= {}
@@ -67,13 +71,13 @@ module Morpheus
67
71
  context_map = context_map[ns.to_s]
68
72
  end
69
73
  # use the value passed in the options map
70
- if cur_namespace.key?(option_type['fieldName'])
71
- value = cur_namespace[option_type['fieldName']]
74
+ if cur_namespace.key?(field_name)
75
+ value = cur_namespace[field_name]
72
76
  if option_type['type'] == 'number'
73
77
  value = value.to_s.include?('.') ? value.to_f : value.to_i
74
78
  elsif option_type['type'] == 'select'
75
79
  # this should just fall down through below, with the extra params no_prompt, use_value
76
- value = select_prompt(option_type, api_client, api_params, true, value)
80
+ value = select_prompt(option_type, api_client, (api_params || {}).merge(results), true, value)
77
81
  end
78
82
  if options[:always_prompt] != true
79
83
  value_found = true
@@ -81,8 +85,8 @@ module Morpheus
81
85
  end
82
86
  else
83
87
  # no fieldContext
84
- if value_found == false && options.key?(option_type['fieldName'])
85
- value = options[option_type['fieldName']]
88
+ if value_found == false && options.key?(field_key)
89
+ value = options[field_key]
86
90
  if option_type['type'] == 'number'
87
91
  value = value.to_s.include?('.') ? value.to_f : value.to_i
88
92
  end
@@ -113,13 +117,13 @@ module Morpheus
113
117
  # select type is special because it supports skipSingleOption
114
118
  # and prints the available options on error
115
119
  if option_type['type'] == 'select'
116
- value = select_prompt(option_type, api_client, api_params, true)
120
+ value = select_prompt(option_type, api_client, (api_params || {}).merge(results), true)
117
121
  value_found = !!value
118
122
  end
119
123
  if !value_found
120
124
  if option_type['required']
121
125
  print Term::ANSIColor.red, "\nMissing Required Option\n\n", Term::ANSIColor.reset
122
- print Term::ANSIColor.red, " * #{option_type['fieldLabel']} [-O #{option_type['fieldContext'] ? (option_type['fieldContext']+'.') : ''}#{option_type['fieldName']}=] - #{option_type['description']}\n", Term::ANSIColor.reset
126
+ print Term::ANSIColor.red, " * #{option_type['fieldLabel']} [-O #{field_key}=] - #{option_type['description']}\n", Term::ANSIColor.reset
123
127
  print "\n"
124
128
  exit 1
125
129
  else
@@ -150,10 +154,7 @@ module Morpheus
150
154
  # I suppose the entered value should take precedence
151
155
  # api_params = api_params.merge(options) # this might be good enough
152
156
  # dup it
153
- select_api_params = {}.merge(api_params || {}).merge(results)
154
- grails_select_api_params = grails_params(select_api_params)
155
-
156
- value = select_prompt(option_type,api_client, grails_select_api_params)
157
+ value = select_prompt(option_type,api_client, (api_params || {}).merge(results))
157
158
  elsif option_type['type'] == 'hidden'
158
159
  value = option_type['defaultValue']
159
160
  input = value
@@ -163,7 +164,7 @@ module Morpheus
163
164
  value = generic_prompt(option_type)
164
165
  end
165
166
  end
166
- context_map[option_type['fieldName']] = value
167
+ context_map[field_name] = value
167
168
  end
168
169
 
169
170
  return results
@@ -248,7 +249,7 @@ module Morpheus
248
249
  if option_type['optionSource'] == 'list'
249
250
  select_options = load_source_options(option_type['optionSource'], api_client, {'optionTypeId' => option_type['id']})
250
251
  else
251
- select_options = load_source_options(option_type['optionSource'], api_client, api_params)
252
+ select_options = load_source_options(option_type['optionSource'], api_client, grails_params(api_params || {}))
252
253
  end
253
254
  else
254
255
  raise "select_prompt() requires selectOptions or optionSource!"