morpheus-cli 5.5.1.3 → 5.5.1.4

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c60f08b038db5460dc2fbcb4ca3626f8784164f89ff477cd9b4ef0b32073a16e
4
- data.tar.gz: 1b2a47809e7826fec9893d7b9899ee96e536c6661f4de7eedc4f467756dde5e5
3
+ metadata.gz: 4c3d95bd4c6ab10da93d1c60ed9c046b3da95ff610a6d69f3b5fea7dd62aa6a0
4
+ data.tar.gz: 8235ec60e8b4385952b639b33bee047a005a55f9e64bdb4bb095420e5c88ce03
5
5
  SHA512:
6
- metadata.gz: 89fcdd4815408d056d3fd6adb79bcc82f7d26eaf6fdc9d6d640289d554cdab0f7c4eeeef55f130299a67b599a1e2746263d55eab209165e91e11e68d1e5cb8f8
7
- data.tar.gz: 7fa16441f2d3612f1af1f86f8cb3c86363abd2f36f49f8da47550b6b2901a60227acc8407ab93e9a71e9d147431e0513905b9d63153378294a7bd57e0127b656
6
+ metadata.gz: 903f50a32e744d725125edb26648a134b71c2844f5949943800290c2fce1af2c437de2016c9b06072efec8998e2992e3c9083c034adb6890809062a54e0d924f
7
+ data.tar.gz: b81fcbd866cbd4020908c99888b3e70cd669af87fe0f8834ad896f01036b16b98b417bd48858809ac54222526e34edd71165f63ad17ca28811995fd8bd29e73d
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.7.5
2
2
 
3
- RUN gem install morpheus-cli -v 5.5.1.3
3
+ RUN gem install morpheus-cli -v 5.5.1.4
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -407,4 +407,12 @@ class Morpheus::InstancesInterface < Morpheus::APIClient
407
407
  execute(opts)
408
408
  end
409
409
 
410
+ def remove_from_control(ids, params={})
411
+ url = "#{@base_url}/api/instances/removeFromControl"
412
+ payload = { ids: ids }
413
+ headers = { :params => params,:authorization => "Bearer #{@access_token}", 'Content-Type' => 'application/json' }
414
+ opts = {method: :delete, url: url, headers: headers, payload: payload.to_json}
415
+ execute(opts)
416
+ end
417
+
410
418
  end
@@ -736,9 +736,15 @@ class Morpheus::Cli::Clusters
736
736
  opts.on("--api-url [TEXT]", String, "Updates Cluster API Url") do |val|
737
737
  options[:apiUrl] = val.to_s
738
738
  end
739
+ opts.on("--api-token [TEXT]", String, "Updates Cluster API Token") do |val|
740
+ options[:apiToken] = val.to_s
741
+ end
739
742
  opts.on('--active [on|off]', String, "Can be used to enable / disable the cluster. Default is on") do |val|
740
743
  options[:active] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
741
744
  end
745
+ opts.on('--managed [on|off]', String, "Can be used to enable / disable managed cluster. Default is on") do |val|
746
+ options[:managed] = val.to_s == 'on' || val.to_s == 'true' || val.to_s == '1' || val.to_s == ''
747
+ end
742
748
  opts.on( nil, '--refresh', "Refresh cluster" ) do
743
749
  options[:refresh] = true
744
750
  end
@@ -777,7 +783,9 @@ class Morpheus::Cli::Clusters
777
783
  cluster_payload['name'] = options[:name] if !options[:name].empty?
778
784
  cluster_payload['description'] = options[:description] if !options[:description].empty?
779
785
  cluster_payload['enabled'] = options[:active] if !options[:active].nil?
786
+ cluster_payload['managed'] = options[:managed] if !options[:managed].nil?
780
787
  cluster_payload['serviceUrl'] = options[:apiUrl] if !options[:apiUrl].nil?
788
+ cluster_payload['serviceToken'] = options[:apiToken] if !options[:apiToken].nil?
781
789
  cluster_payload['refresh'] = options[:refresh] if options[:refresh] == true
782
790
  cluster_payload['tenant'] = options[:tenant] if !options[:tenant].nil?
783
791
  payload = {"cluster" => cluster_payload}
@@ -788,9 +796,7 @@ class Morpheus::Cli::Clusters
788
796
  exit 1
789
797
  end
790
798
 
791
- has_field_updates = ['name', 'description', 'enabled', 'serviceUrl'].find {|field| payload['cluster'] && !payload['cluster'][field].nil? && payload['cluster'][field] != cluster[field] ? field : nil}
792
-
793
- if !has_field_updates && cluster_payload['refresh'].nil? && cluster_payload['tenant'].nil?
799
+ if cluster_payload.empty?
794
800
  print_green_success "Nothing to update"
795
801
  exit 1
796
802
  end
@@ -537,6 +537,7 @@ class Morpheus::Cli::Hosts
537
537
  # "Status" => lambda {|it| format_server_status(it) },
538
538
  # "Power" => lambda {|it| format_server_power_state(it) },
539
539
  "Status" => lambda {|it| format_server_status_friendly(it) }, # combo
540
+ "Managed" => lambda {|it| it['computeServerType'] ? it['computeServerType']['managed'] : ''}
540
541
  }
541
542
  server_columns.delete("Hostname") if server['hostname'].to_s.empty? || server['hostname'] == server['name']
542
543
  server_columns.delete("IP") if server['externalIp'].to_s.empty?
@@ -13,7 +13,7 @@ class Morpheus::Cli::Instances
13
13
  set_command_name :instances
14
14
  set_command_description "View and manage instances."
15
15
  register_subcommands :list, :count, :get, :view, :add, :update, :remove,
16
- :cancel_removal, :cancel_expiration, :cancel_shutdown, :extend_expiration, :extend_shutdown,
16
+ :cancel_removal, :cancel_expiration, :cancel_shutdown, :extend_expiration, :extend_shutdown, :remove_from_control,
17
17
  :history, {:'history-details' => :history_details}, {:'history-event' => :history_event_details},
18
18
  :logs, :stats, :stop, :start, :restart, :actions, :action, :suspend, :eject, :stop_service, :start_service, :restart_service,
19
19
  :backup, :backups, :resize, :clone, :envs, :setenv, :delenv,
@@ -3054,6 +3054,56 @@ EOT
3054
3054
  return 0, nil
3055
3055
  end
3056
3056
 
3057
+ def remove_from_control(args)
3058
+ params = {}
3059
+ options = {}
3060
+ optparse = Morpheus::Cli::OptionParser.new do |opts|
3061
+ opts.banner = subcommand_usage("[name or id]")
3062
+ opts.footer = "Remove a brownfield instance from Morpheus. This does not delete the cloud instance, only Morpheus' record of it.\n" +
3063
+ "[name or id] is required. The name or the id of the instance may be listed.\n" +
3064
+ "[name or id] [name or id] [name or id] ... A list of names or ids, separated by a space, may be used for bulk removal."
3065
+ build_common_options(opts, options, [:auto_confirm, :json, :dry_run, :quiet, :remote])
3066
+ end
3067
+ optparse.parse!(args)
3068
+ if args.count < 1
3069
+ puts optparse
3070
+ exit 1
3071
+ end
3072
+ connect(options)
3073
+ begin
3074
+ instance_ids = parse_id_list(args)
3075
+ instances = []
3076
+ instance_ids.each do |instance_id|
3077
+ instance = find_instance_by_name_or_id(instance_id)
3078
+ return 1 if instance.nil?
3079
+ instances << instance
3080
+ end
3081
+ unless options[:yes] || ::Morpheus::Cli::OptionTypes::confirm("Are you sure you would like to remove #{instances.size == 1 ? 'instance' : (instances.size.to_s + ' instances')} #{anded_list(instances.collect {|it| it['name'] })}?", options)
3082
+ return 9, "aborted command"
3083
+ end
3084
+ @instances_interface.setopts(options)
3085
+ if options[:dry_run]
3086
+ print_dry_run @instances_interface.dry.remove_from_control(instances.collect {|it| it['id'] }, params)
3087
+ return
3088
+ end
3089
+ json_response = @instances_interface.remove_from_control(instances.collect {|it| it['id'] }, params)
3090
+ if options[:json]
3091
+ puts as_json(json_response, options)
3092
+ elsif !options[:quiet]
3093
+ puts json_response
3094
+ if json_response['success'] == false
3095
+ print_red_alert json_response['msg']
3096
+ else
3097
+ print_green_success json_response['msg']
3098
+ end
3099
+ end
3100
+ return 0
3101
+ rescue RestClient::Exception => e
3102
+ print_rest_exception(e, options)
3103
+ exit 1
3104
+ end
3105
+ end
3106
+
3057
3107
  def firewall_disable(args)
3058
3108
  options = {}
3059
3109
  optparse = Morpheus::Cli::OptionParser.new do |opts|
@@ -180,7 +180,7 @@ class Morpheus::Cli::LibraryContainerTypesCommand
180
180
  {"VALUE" => lambda {|it| it['defaultValue'] } },
181
181
  {"TYPE" => lambda {|it| it['valueType'].to_s.capitalize } },
182
182
  {"EXPORT" => lambda {|it| format_boolean it['export'] } },
183
- {"MASKED" => lambda {|it| format_boolean it['mask'] } },
183
+ {"MASKED" => lambda {|it| format_boolean it['masked'] } },
184
184
  ]
185
185
  print as_pretty_table(evars, evar_columns)
186
186
  else
@@ -255,6 +255,21 @@ class Morpheus::Cli::LibraryContainerTypesCommand
255
255
  opts.on('--technology CODE', String, "Technology. This is the provision type code.") do |val|
256
256
  params['provisionTypeCode'] = val
257
257
  end
258
+ opts.on('--evars-json JSON', String, 'Environment variables JSON: {"name":"Foo", "value":"Bar", "masked":true, "export":true}' ) do |val|
259
+ begin
260
+ evars = JSON.parse(val.to_s)
261
+ evars = evars.kind_of?(Array) ? evars : [evars]
262
+ rescue JSON::ParserError => e
263
+ print_red_alert "Unable to parse evars JSON"
264
+ exit 1
265
+ end
266
+ end
267
+ opts.on('-e', '--evars LIST', Array, "Environment variables list. Comma delimited list of name=value pairs") do |val|
268
+ evars = val.collect do |nv|
269
+ parts = nv.split('=')
270
+ {'name' => parts[0].strip, 'value' => (parts.count > 1 ? parts[1].strip : '')}
271
+ end
272
+ end
258
273
  opts.on('--ports NAME=PORT,NAME=PORT', String, "List of exposed port definitions in the format NAME=PORT|PROTOCOL, Example: \"WEB=80|HTTP,SECURE=443|HTTPS\"") do |val|
259
274
  params['containerPorts'] ||= []
260
275
  parsed_ports = val.split(",").each do |value_pair|
@@ -358,7 +373,7 @@ class Morpheus::Cli::LibraryContainerTypesCommand
358
373
  # print "\n"
359
374
  puts field_group_name
360
375
  puts "==============="
361
- provision_type_v_prompt = Morpheus::Cli::OptionTypes.prompt(provision_type_custom_option_types,options[:options],@api_client, {provisionTypCode: params['provisionTypeCode']})
376
+ provision_type_v_prompt = Morpheus::Cli::OptionTypes.prompt(provision_type_custom_option_types,options[:options],@api_client, {provisionTypeCode: params['provisionTypeCode']})
362
377
  end
363
378
 
364
379
  # payload.deep_merge!(provision_type_v_prompt)
@@ -371,7 +386,9 @@ class Morpheus::Cli::LibraryContainerTypesCommand
371
386
 
372
387
  # ENVIRONMENT VARIABLES
373
388
  if evars
374
- params['environmentVariables'] = evars
389
+ # bug before 5.4.10/5.5.2 requires this to be passed at the root of the request instead of under containerType.
390
+ # params['environmentVariables'] = evars
391
+ payload['environmentVariables'] = evars
375
392
  else
376
393
  # prompt
377
394
  # parsed_evars = parse_environment_variables
@@ -386,7 +403,7 @@ class Morpheus::Cli::LibraryContainerTypesCommand
386
403
 
387
404
  # FILE TEMPLATES
388
405
  if file_template_ids
389
- params['scripts'] = file_template_ids.collect {|it| it.to_i }.select { |it| it != 0 }
406
+ params['templates'] = file_template_ids.collect {|it| it.to_i }.select { |it| it != 0 }
390
407
  else
391
408
  # prompt
392
409
  end
@@ -447,6 +464,21 @@ class Morpheus::Cli::LibraryContainerTypesCommand
447
464
  # opts.on('--technology CODE', String, "Technology") do |val|
448
465
  # params['provisionTypeCode'] = val
449
466
  # end
467
+ opts.on('--evars-json JSON', String, 'Environment variables JSON: {"name":"Foo", "value":"Bar", "masked":true, "export":true}' ) do |val|
468
+ begin
469
+ evars = JSON.parse(val.to_s)
470
+ evars = evars.kind_of?(Array) ? evars : [evars]
471
+ rescue JSON::ParserError => e
472
+ print_red_alert "Unable to parse evars JSON"
473
+ exit 1
474
+ end
475
+ end
476
+ opts.on('-e', '--evars LIST', Array, "Environment variables list. Comma delimited list of name=value pairs") do |val|
477
+ evars = val.collect do |nv|
478
+ parts = nv.split('=')
479
+ {'name' => parts[0].strip, 'value' => (parts.count > 1 ? parts[1].strip : '')}
480
+ end
481
+ end
450
482
  opts.on('--ports NAME=PORT,NAME=PORT', String, "List of exposed port definitions in the format NAME=PORT|PROTOCOL, Example: \"WEB=80|HTTP,SECURE=443|HTTPS\"") do |val|
451
483
  params['containerPorts'] ||= []
452
484
  parsed_ports = val.split(",").each do |value_pair|
@@ -506,7 +538,9 @@ class Morpheus::Cli::LibraryContainerTypesCommand
506
538
 
507
539
  # ENVIRONMENT VARIABLES
508
540
  if evars
509
-
541
+ # bug before 5.4.10/5.5.2 requires this to be passed at the root of the request instead of under containerType.
542
+ # params['environmentVariables'] = evars
543
+ payload['environmentVariables'] = evars
510
544
  else
511
545
  # prompt
512
546
  end
@@ -525,7 +559,7 @@ class Morpheus::Cli::LibraryContainerTypesCommand
525
559
  # prompt
526
560
  end
527
561
 
528
- if params.empty? && passed_options.empty?
562
+ if params.empty? && passed_options.empty? && evars.nil?
529
563
  raise_command_error "Specify at least one option to update.\n#{optparse}"
530
564
  end
531
565
 
@@ -187,7 +187,7 @@ class Morpheus::Cli::LibraryInstanceTypesCommand
187
187
  {"VALUE" => lambda {|it| it['defaultValue'] } },
188
188
  {"TYPE" => lambda {|it| it['valueType'].to_s.capitalize } },
189
189
  {"EXPORT" => lambda {|it| format_boolean it['export'] } },
190
- {"MASKED" => lambda {|it| format_boolean it['mask'] } },
190
+ {"MASKED" => lambda {|it| format_boolean it['masked'] } },
191
191
  ]
192
192
  print as_pretty_table(instance_type_evars, evar_columns)
193
193
  else
@@ -214,7 +214,7 @@ EOT
214
214
  {"VALUE" => lambda {|it| it['defaultValue'] } },
215
215
  {"TYPE" => lambda {|it| it['valueType'].to_s.capitalize } },
216
216
  {"EXPORT" => lambda {|it| format_boolean it['export'] } },
217
- {"MASKED" => lambda {|it| format_boolean it['mask'] } },
217
+ {"MASKED" => lambda {|it| format_boolean it['masked'] } },
218
218
  ]
219
219
  print as_pretty_table(layout_evars, evar_columns)
220
220
  else
@@ -577,6 +577,7 @@ EOT
577
577
  def change_password(args)
578
578
  params = {}
579
579
  options = {}
580
+ payload = {}
580
581
  new_password = nil
581
582
  optparse = Morpheus::Cli::OptionParser.new do |opts|
582
583
  opts.banner = subcommand_usage("[user] [password] [options]")
@@ -651,7 +652,7 @@ EOT
651
652
  return
652
653
  end
653
654
  json_response = @account_users_interface.update(account_id, user['id'], payload)
654
- render_response(json_response, optparse, "user") do
655
+ render_response(json_response, options, "user") do
655
656
  print_green_success "Updated password for user #{user['username']}"
656
657
  end
657
658
  return exit_code, err
@@ -1019,7 +1019,14 @@ EOT
1019
1019
 
1020
1020
  # Marketplace Publisher & Offer
1021
1021
  marketplace_api_params = {'zoneId' => cloud_id}
1022
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'offer', 'fieldLabel' => 'Azure Marketplace Offer', 'type' => 'typeahead', 'optionSource' => 'searchAzureMarketplace', 'required' => true, 'description' => "Select Azure Marketplace Offer."}], options[:options],@api_client, marketplace_api_params)
1022
+ v_prompt = nil
1023
+ # API endpoints moved from /api/options to /api/options/azure...
1024
+ begin
1025
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'offer', 'fieldLabel' => 'Azure Marketplace Offer', 'type' => 'typeahead', 'optionSourceType' => 'azure', 'optionSource' => 'searchAzureMarketplace', 'required' => true, 'description' => "Select Azure Marketplace Offer."}], options[:options],@api_client, marketplace_api_params)
1026
+ rescue => ex
1027
+ Morpheus::Logging::DarkPrinter.puts "Failed to load azure marketplace offers, trying older endpoint" if Morpheus::Logging.debug?
1028
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'offer', 'fieldLabel' => 'Azure Marketplace Offer', 'type' => 'typeahead', 'optionSource' => 'searchAzureMarketplace', 'required' => true, 'description' => "Select Azure Marketplace Offer."}], options[:options],@api_client, marketplace_api_params)
1029
+ end
1023
1030
  # offer_value = v_prompt['marketplace']
1024
1031
  # actually need both offer and publisher of these to query correctly..sigh
1025
1032
  marketplace_option = Morpheus::Cli::OptionTypes.get_last_select()
@@ -1032,7 +1039,12 @@ EOT
1032
1039
  options[:options]['sku'] = options[:options]['sku'] + '|' + options[:options]['version']
1033
1040
  end
1034
1041
  sku_api_params = {'zoneId' => cloud_id, publisher: publisher_value, offer: offer_value}
1035
- v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'sku', 'fieldLabel' => 'Azure Marketplace SKU', 'type' => 'select', 'optionSource' => 'searchAzureMarketplaceSkus', 'required' => true, 'description' => "Select Azure Marketplace SKU and Version, the format is SKU|Version"}], options[:options],@api_client, sku_api_params)
1042
+ begin
1043
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'sku', 'fieldLabel' => 'Azure Marketplace SKU', 'type' => 'select', 'optionSourceType' => 'azure', 'optionSource' => 'searchAzureMarketplaceSkus', 'required' => true, 'description' => "Select Azure Marketplace SKU and Version, the format is SKU|Version"}], options[:options],@api_client, sku_api_params)
1044
+ rescue => ex
1045
+ Morpheus::Logging::DarkPrinter.puts "Failed to load azure marketplace offers, trying older endpoint" if Morpheus::Logging.debug?
1046
+ v_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'sku', 'fieldLabel' => 'Azure Marketplace SKU', 'type' => 'select', 'optionSource' => 'searchAzureMarketplaceSkus', 'required' => true, 'description' => "Select Azure Marketplace SKU and Version, the format is SKU|Version"}], options[:options],@api_client, sku_api_params)
1047
+ end
1036
1048
  # marketplace_option = Morpheus::Cli::OptionTypes.get_last_select()
1037
1049
  # sku_value = marketplace_option['sku']
1038
1050
  # version_value = marketplace_option['version']
@@ -577,6 +577,10 @@ module Morpheus::Cli::ProvisioningHelper
577
577
  (2..10).each {|i| arbitrary_options.delete('dataVolume' + i.to_s) }
578
578
  arbitrary_options.delete('lockedFields')
579
579
  # arbitrary_options.delete('ports')
580
+ arbitrary_options.delete('marketplacePublisher')
581
+ arbitrary_options.delete('marketplaceOffer')
582
+ arbitrary_options.delete('marketplaceSku')
583
+ arbitrary_options.delete('marketplaceVersion')
580
584
  payload.deep_merge!(arbitrary_options)
581
585
  end
582
586
 
@@ -1664,6 +1668,10 @@ module Morpheus::Cli::ProvisioningHelper
1664
1668
  end
1665
1669
  end
1666
1670
 
1671
+ if ip_required == false && network_interface['ipAddress'] == nil && selected_network['dhcpServer'] == true
1672
+ network_interface['ipMode'] = 'dhcp'
1673
+ end
1674
+
1667
1675
  network_interfaces << network_interface
1668
1676
  interface_index += 1
1669
1677
  if options[:options] && options[:options]['networkInterfaces'] && options[:options]['networkInterfaces'][interface_index]
@@ -252,6 +252,15 @@ module Morpheus
252
252
  if !value_found
253
253
  # select type is special because it supports skipSingleOption
254
254
  # and prints the available options on error
255
+ if option_type['type'] == 'azureMarketplace'
256
+ value = azure_marketplace_prompt(option_type, options, api_client, option_params)
257
+ # inject {marketplacePublisher:'...',} into config, not as config.azureMarketplace = {}
258
+ # and remove any passed in values from
259
+ if value.is_a?(Hash)
260
+ context_map.merge!(value)
261
+ end
262
+ next
263
+ end
255
264
  if ['select', 'multiSelect'].include?(option_type['type'])
256
265
  value = select_prompt(option_type, api_client, option_params, true, nil, false, ignore_empty)
257
266
  value_found = !!value
@@ -334,6 +343,14 @@ module Morpheus
334
343
  value = file_content_prompt(option_type, options, api_client, {})
335
344
  elsif option_type['type'] == 'multiText'
336
345
  value = multitext_prompt(option_type)
346
+ elsif option_type['type'] == 'azureMarketplace'
347
+ value = azure_marketplace_prompt(option_type, options, api_client, option_params)
348
+ # inject {marketplacePublisher:'...',} into config, not as config.azureMarketplace = {}
349
+ # and remove any passed in values from
350
+ if value.is_a?(Hash)
351
+ context_map.merge!(value)
352
+ end
353
+ next
337
354
  else
338
355
  value = generic_prompt(option_type)
339
356
  end
@@ -1033,6 +1050,62 @@ module Morpheus
1033
1050
  rtn
1034
1051
  end
1035
1052
 
1053
+ # file_content_prompt() prompts for source (local,repository,url) and then content or repo or.
1054
+ # returns a Hash like {sourceType:"local",content:"yadda",contentPath:null,contentRef:null}
1055
+ def self.azure_marketplace_prompt(option_type, options={}, api_client=nil, api_params={})
1056
+ cloud_id = api_params[:zoneId] || api_params[:cloudId] || api_params["zoneId"] || api_params["cloudId"]
1057
+ if cloud_id.nil?
1058
+ Morpheus::Logging::DarkPrinter.puts "Failed to load azure marketplace offers without a zoneId" if Morpheus::Logging.debug?
1059
+ return nil
1060
+ end
1061
+ # lets go!
1062
+ rtn = {}
1063
+ publisher_value, offer_value, sku_value, version_value = nil, nil, nil, nil
1064
+
1065
+ # Marketplace Publisher & Offer
1066
+ marketplace_api_params = {'zoneId' => cloud_id}
1067
+ v_prompt = nil
1068
+ # API endpoints moved from /api/options to /api/options/azure...
1069
+ begin
1070
+ v_prompt = prompt([{'fieldName' => 'marketplaceOffer', 'fieldLabel' => 'Azure Marketplace Offer', 'type' => 'typeahead', 'optionSourceType' => 'azure', 'optionSource' => 'searchAzureMarketplace', 'required' => true, 'description' => "Select Azure Marketplace Offer."}], options,api_client, marketplace_api_params)
1071
+ rescue => ex
1072
+ Morpheus::Logging::DarkPrinter.puts "Failed to load azure marketplace offers, trying older endpoint" if Morpheus::Logging.debug?
1073
+ v_prompt = prompt([{'fieldName' => 'marketplaceOffer', 'fieldLabel' => 'Azure Marketplace Offer', 'type' => 'typeahead', 'optionSource' => 'searchAzureMarketplace', 'required' => true, 'description' => "Select Azure Marketplace Offer."}], options,api_client, marketplace_api_params)
1074
+ end
1075
+ # offer_value = v_prompt['marketplaceOffer']
1076
+ # actually need both offer and publisher of these to query correctly..sigh
1077
+ marketplace_option = Morpheus::Cli::OptionTypes.get_last_select()
1078
+ offer_value = marketplace_option['offer']
1079
+ publisher_value = marketplace_option['publisher']
1080
+
1081
+ # SKU & VERSION
1082
+ if options && options['marketplaceSku'] && options['marketplaceVersion']
1083
+ # the value to match on is actually sku|version
1084
+ options['marketplaceSku'] = options['marketplaceSku'] + '|' + options['marketplaceVersion']
1085
+ end
1086
+ sku_api_params = {'zoneId' => cloud_id, publisher: publisher_value, offer: offer_value}
1087
+ begin
1088
+ v_prompt = prompt([{'fieldName' => 'marketplaceSku', 'fieldLabel' => 'Azure Marketplace SKU', 'type' => 'select', 'optionSourceType' => 'azure', 'optionSource' => 'searchAzureMarketplaceSkus', 'required' => true, 'description' => "Select Azure Marketplace SKU and Version, the format is SKU|Version"}], options,api_client, sku_api_params)
1089
+ rescue => ex
1090
+ Morpheus::Logging::DarkPrinter.puts "Failed to load azure marketplace offers, trying older endpoint" if Morpheus::Logging.debug?
1091
+ v_prompt = prompt([{'fieldName' => 'marketplaceSku', 'fieldLabel' => 'Azure Marketplace SKU', 'type' => 'select', 'optionSource' => 'searchAzureMarketplaceSkus', 'required' => true, 'description' => "Select Azure Marketplace SKU and Version, the format is SKU|Version"}], options,api_client, sku_api_params)
1092
+ end
1093
+ # marketplace_option = Morpheus::Cli::OptionTypes.get_last_select()
1094
+ # sku_value = marketplace_option['sku']
1095
+ # version_value = marketplace_option['version']
1096
+ sku_value = v_prompt['marketplaceSku']
1097
+ if sku_value && sku_value.include?("|")
1098
+ sku_value, version_value = sku_value.split("|")
1099
+ end
1100
+ # rtn['publisher'] = publisher_value
1101
+ # rtn['offer'] = offer_value
1102
+ # rtn['sku'] = sku_value
1103
+ # rtn['version'] = version_value
1104
+ # return rtn
1105
+ # instance provisioning expects these parameters...
1106
+ return {'marketplacePublisher' => publisher_value, 'marketplaceOffer' => offer_value, 'marketplaceSku' => sku_value, 'marketplaceVersion' => version_value}
1107
+ end
1108
+
1036
1109
  def self.load_options(option_type, api_client, api_params, query_value=nil)
1037
1110
  field_key = [option_type['fieldContext'], option_type['fieldName']].select {|it| it && it != '' }.join('.')
1038
1111
  help_field_key = option_type[:help_field_prefix] ? "#{option_type[:help_field_prefix]}.#{field_key}" : field_key
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "5.5.1.3"
4
+ VERSION = "5.5.1.4"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpheus-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.5.1.3
4
+ version: 5.5.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
@@ -11,7 +11,7 @@ authors:
11
11
  autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2022-08-01 00:00:00.000000000 Z
14
+ date: 2022-08-09 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler