morpheus-cli 5.4.1 → 5.4.2

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: 6cb700dea3828e709872e3cbdd2273b369aeee43bc7f451a305101ee3e0d7385
4
- data.tar.gz: 19414673dc1b1631b4221f6c280228cbc14f49b2a4356bc45a3a98a67bdfa9a6
3
+ metadata.gz: d81fbae375d0d103b21c67cbbe12688b7d6977674b275047acf8e5dc9f2e155f
4
+ data.tar.gz: f926189bc1792af28a86c1652a9b0b4268581d759fff857697e559e862aa09fb
5
5
  SHA512:
6
- metadata.gz: f1cc0cd19da8b84cff01f68e92ad8f82261bb399beff06b99461b4e9fc4fa76b5e1553e3f7a2aacf0dff746f858b9ef805f9d5a2c058da3af7d71fbd2bf616cc
7
- data.tar.gz: dc86c29c0192b1b82b5f449f6c1803f7476164c4444f7ee285d3db5397d7778ae0e45438b14ca27feab8d14269222cc59a17dd7a329c6962aeb8bd8cf2bb6962
6
+ metadata.gz: d5d832fc40ea3d0da75e4acfcd445fb59509b78fee5b87c81fa401237ed6ee8476a8a5de9fa11ce6bf2b1cac28f292bc0c6a5a9ef4345ca3c08a99baf084bee6
7
+ data.tar.gz: 216b534d057fe67350a816ee00e45a4d9218f21a9a4ebeeadad764a9b12821720658bf56be6b873e63143c58be61064d20c88550cd4a4a88780748499fe2f386
data/Dockerfile CHANGED
@@ -1,5 +1,5 @@
1
1
  FROM ruby:2.5.1
2
2
 
3
- RUN gem install morpheus-cli -v 5.4.1
3
+ RUN gem install morpheus-cli -v 5.4.2
4
4
 
5
5
  ENTRYPOINT ["morpheus"]
@@ -1517,7 +1517,7 @@ module Morpheus
1517
1517
  begin
1518
1518
  json_response = interface.get(*ids)
1519
1519
  return json_response[object_key]
1520
- rescue RestClient::Exception => e
1520
+ rescue Exception => e
1521
1521
  if e.response && e.response.code == 404
1522
1522
  print_red_alert "#{label} not found by id #{ids.last}"
1523
1523
  return nil
@@ -629,7 +629,7 @@ class Morpheus::Cli::Clusters
629
629
 
630
630
  # Worker count
631
631
  default_node_count = layout['computeServers'] ? (layout['computeServers'].find {|it| it['nodeType'] == 'worker'} || {'nodeCount' => 3})['nodeCount'] : 3
632
- server_payload['config']['nodeCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => "config.nodeCount", 'type' => 'number', 'fieldLabel' => "#{cluster_type['code'].include?('docker') ? 'Host' : 'Worker'} Count", 'required' => true, 'defaultValue' => default_node_count > 0 ? default_node_count : 3}], options[:options], @api_client, api_params, options[:no_prompt])['config']['nodeCount']
632
+ server_payload['config']['nodeCount'] = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => "config.nodeCount", 'type' => 'number', 'fieldLabel' => "#{['docker', 'kvm-cluster'].include?(cluster_type['code']) ? 'Host' : 'Worker'} Count", 'required' => true, 'defaultValue' => default_node_count > 0 ? default_node_count : 3}], options[:options], @api_client, api_params, options[:no_prompt])['config']['nodeCount']
633
633
 
634
634
  # Create User
635
635
  if !options[:createUser].nil?
@@ -1065,20 +1065,16 @@ class Morpheus::Cli::ImageBuilderCommand
1065
1065
  preseed_script_id = nil
1066
1066
  if options['preseedScript']
1067
1067
  preseed_script = find_preseed_script(options['preseedScript'])
1068
- if !preseed_script
1069
- print_red_alert "Preseed Script not found: #{options['preseedScript']}"
1070
- return false
1068
+ if preseed_script
1069
+ preseed_script_id = preseed_script['id']
1071
1070
  end
1072
- preseed_script_id = preseed_script['id']
1073
1071
  else
1074
1072
  preseed_script_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'preseedScript', 'type' => 'select', 'fieldLabel' => 'Preseed Script', 'selectOptions' => get_available_preseed_scripts(), 'required' => false, 'description' => 'Select Preseed Script.', 'defaultValue' => default_values['preseedScript'], :fmt=>:natural}],options,api_client,{})
1075
1073
  # preseed_script_id = preseed_script_prompt['preseedScript']
1076
1074
  preseed_script = find_preseed_script(preseed_script_prompt['preseedScript'])
1077
- if !preseed_script
1078
- print_red_alert "Preseed Script not found: '#{preseed_script_prompt['preseedScript']}'"
1079
- return false
1075
+ if preseed_script
1076
+ preseed_script_id = preseed_script['id']
1080
1077
  end
1081
- preseed_script_id = preseed_script['id']
1082
1078
  end
1083
1079
  if preseed_script_id
1084
1080
  # payload['preseedScript'] = preseed_script_id
@@ -1122,19 +1122,8 @@ EOT
1122
1122
 
1123
1123
  def add_integration_object_option_types
1124
1124
  [
1125
- {'code' => 'integrationObject.type', 'shorthand' => '-t', 'switch' => 'type', 'fieldName' => 'type', 'fieldLabel' => 'Type', 'type' => 'select', 'optionSource' => 'integrationObjectTypes', 'required' => true, 'description' => "Integration Object Type eg. cloud, layout, blueprint, catalog", 'displayOrder' => 1},
1125
+ {'code' => 'integrationObject.type', 'shorthand' => '-t', 'switch' => 'type', 'fieldName' => 'type', 'fieldLabel' => 'Type', 'type' => 'select', 'optionSource' => 'integrationObjectTypes', 'required' => true, 'description' => "Integration Object Type eg. catalog", 'displayOrder' => 1},
1126
1126
  # {'fieldName' => 'name', 'fieldLabel' => 'Name', 'type' => 'text', 'required' => false, 'description' => 'Display Name of the integration object, default is the name of the referenced object', 'displayOrder' => 2},
1127
- {'dependsOnCode' => 'integrationObject.type:cloud', 'switch' => 'group', 'fieldName' => 'group', 'fieldLabel' => 'Group', 'type' => 'select', 'optionSource' => 'groups', 'required' => true, 'description' => 'Group', 'displayOrder' => 3},
1128
- {'dependsOnCode' => 'integrationObject.type:cloud', 'switch' => 'cloud', 'fieldName' => 'cloud', 'fieldLabel' => 'Cloud', 'type' => 'select', 'optionSource' => 'clouds', 'required' => true, 'description' => 'Cloud', 'displayOrder' => 4},
1129
- {'dependsOnCode' => 'integrationObject.type:layout', 'switch' => 'instance-type', 'fieldName' => 'instanceType', 'fieldLabel' => 'Instance Type', 'type' => 'select', 'optionSource' => 'instanceTypes', 'required' => true, 'description' => 'Instance Type', 'displayOrder' => 5},
1130
- {'dependsOnCode' => 'integrationObject.type:layout', 'switch' => 'technology', 'fieldName' => 'zoneType', 'fieldLabel' => 'Cloud Type', 'type' => 'select', 'optionSource' => 'zoneTypes', 'required' => true, 'description' => 'Cloud Type (Technology)', 'displayOrder' => 5},
1131
- {'dependsOnCode' => 'integrationObject.type:layout', 'switch' => 'layout', 'fieldName' => 'layout', 'fieldLabel' => 'Layout', 'type' => 'select', 'optionSource' => 'layouts', 'required' => true, 'description' => 'Layout', 'displayOrder' => 6},
1132
- {'dependsOnCode' => 'integrationObject.type:blueprint', 'fieldName' => 'name', 'fieldLabel' => 'Catalog Item Name', 'type' => 'text', 'required' => true, 'description' => 'Display Name of the integration object', 'displayOrder' => 7},
1133
- {'dependsOnCode' => 'integrationObject.type:blueprint', 'switch' => 'blueprint', 'fieldName' => 'blueprint', 'fieldLabel' => 'Blueprint', 'type' => 'select', 'optionSource' => 'blueprints', 'required' => true, 'description' => 'Blueprint', 'displayOrder' => 8, 'noParams' => true},
1134
- {'dependsOnCode' => 'integrationObject.type:blueprint', 'switch' => 'group', 'fieldName' => 'group', 'fieldLabel' => 'Group', 'type' => 'select', 'optionSource' => 'groups', 'required' => true, 'description' => 'Group', 'displayOrder' => 9},
1135
- {'dependsOnCode' => 'integrationObject.type:blueprint', 'switch' => 'default-cloud', 'fieldName' => 'defaultCloud', 'fieldLabel' => 'Default Cloud', 'type' => 'select', 'optionSource' => 'clouds', 'required' => false, 'description' => 'Default Cloud', 'displayOrder' => 10},
1136
- {'dependsOnCode' => 'integrationObject.type:blueprint', 'switch' => 'environment', 'fieldName' => 'environment', 'fieldLabel' => 'Environment', 'type' => 'select', 'optionSource' => 'environments', 'required' => false, 'description' => 'Environment', 'displayOrder' => 11},
1137
- {'dependsOnCode' => 'integrationObject.type:blueprint', 'switch' => 'config', 'fieldName' => 'config', 'fieldLabel' => 'Config', 'type' => 'code-editor', 'required' => true, 'description' => 'Config JSON', 'displayOrder' => 12},
1138
1127
  {'dependsOnCode' => 'integrationObject.type:catalog', 'switch' => 'catalog', 'fieldName' => 'catalog', 'fieldLabel' => 'Catalog Item', 'type' => 'select', 'optionSource' => 'catalogItemTypes', 'required' => true, 'description' => 'Catalog Item', 'displayOrder' => 13},
1139
1128
  ]
1140
1129
  end
@@ -6,7 +6,6 @@ class Morpheus::Cli::LoadBalancerMonitors
6
6
  include Morpheus::Cli::SecondaryRestCommand
7
7
  include Morpheus::Cli::LoadBalancersHelper
8
8
 
9
- set_command_hidden
10
9
  set_command_description "View and manage load balancer monitors."
11
10
  set_command_name :'load-balancer-monitors'
12
11
  register_subcommands :list, :get, :add, :update, :remove
@@ -6,7 +6,6 @@ class Morpheus::Cli::LoadBalancerPools
6
6
  include Morpheus::Cli::SecondaryRestCommand
7
7
  include Morpheus::Cli::LoadBalancersHelper
8
8
 
9
- set_command_hidden
10
9
  set_command_description "View and manage load balancer pools."
11
10
  set_command_name :'load-balancer-pools'
12
11
  register_subcommands :list, :get, :add, :update, :remove
@@ -6,7 +6,6 @@ class Morpheus::Cli::LoadBalancerProfiles
6
6
  include Morpheus::Cli::SecondaryRestCommand
7
7
  include Morpheus::Cli::LoadBalancersHelper
8
8
 
9
- set_command_hidden
10
9
  set_command_description "View and manage load balancer profiles."
11
10
  set_command_name :'load-balancer-profiles'
12
11
  register_subcommands :list, :get, :add, :update, :remove
@@ -6,11 +6,9 @@ class Morpheus::Cli::LoadBalancerVirtualServers
6
6
  include Morpheus::Cli::SecondaryRestCommand
7
7
  include Morpheus::Cli::LoadBalancersHelper
8
8
 
9
- set_command_hidden
10
9
  set_command_description "View and manage load balancer virtual servers."
11
10
  set_command_name :'load-balancer-virtual-servers'
12
11
  register_subcommands :list, :get, :add, :update, :remove
13
-
14
12
  register_interfaces :load_balancer_virtual_servers,
15
13
  :load_balancers, :load_balancer_types
16
14
 
@@ -18,6 +16,7 @@ class Morpheus::Cli::LoadBalancerVirtualServers
18
16
  set_rest_arg 'vipName'
19
17
 
20
18
  # overridden to provide global list functionality without requiring parent argument
19
+ =begin
21
20
  def list(args)
22
21
  parent_id, parent_record = nil, nil
23
22
  params = {}
@@ -62,17 +61,9 @@ EOT
62
61
  end
63
62
  return 0, nil
64
63
  end
65
-
64
+ =end
66
65
  protected
67
66
 
68
- def build_list_options(opts, options, params)
69
- opts.on('--load-balancer LB', String, "Load Balancer Name or ID") do |val|
70
- options[:load_balancer] = val
71
- end
72
- # build_standard_list_options(opts, options)
73
- super
74
- end
75
-
76
67
  def parse_list_options!(args, options, params)
77
68
  parse_parameter_as_resource_id!(:load_balancer, options, params)
78
69
  super
@@ -5,7 +5,6 @@ class Morpheus::Cli::LoadBalancers
5
5
  include Morpheus::Cli::RestCommand
6
6
  include Morpheus::Cli::LoadBalancersHelper
7
7
 
8
- set_command_hidden
9
8
  set_command_description "View and manage load balancers."
10
9
  set_command_name :'load-balancers'
11
10
  register_subcommands :list, :get, :add, :update, :remove, :refresh
@@ -93,6 +92,23 @@ EOT
93
92
 
94
93
  protected
95
94
 
95
+ # filtering for NSX-T only
96
+ def rest_list_types()
97
+ rest_type_interface.list({max:10000, creatable:true})[rest_type_list_key].reject {|it| it['code'] == 'nsx-t'}
98
+ end
99
+
100
+ def load_balancer_type_list_to_options(type_list)
101
+ type_list.reject {|it| it['code'] != 'nsx-t'}.collect {|it| {'name' => it['name'], 'value' => it['code']} }
102
+ end
103
+
104
+ def add_load_balancer_footer_addn
105
+ "#{bold}Available for NSX-T load balancers only#{reset}"
106
+ end
107
+
108
+ def update_load_balancer_footer_addn
109
+ "#{bold}Available for NSX-T load balancers only#{reset}"
110
+ end
111
+
96
112
  def load_balancer_list_column_definitions(options)
97
113
  {
98
114
  "ID" => 'id',
@@ -141,7 +157,7 @@ EOT
141
157
  def add_load_balancer_advanced_option_types()
142
158
  [
143
159
  {'fieldName' => 'visibility', 'fieldLabel' => 'Visibility', 'fieldGroup' => 'Advanced', 'type' => 'select', 'selectOptions' => [{'name' => 'Private', 'value' => 'private'},{'name' => 'Public', 'value' => 'public'}], 'required' => false, 'description' => 'Visibility', 'category' => 'permissions', 'defaultValue' => 'public'},
144
- {'fieldName' => 'tenants', 'fieldLabel' => 'Tenants', 'fieldGroup' => 'Advanced', 'type' => 'multiSelect', 'optionSource' => lambda { |api_client, api_params|
160
+ {'fieldName' => 'tenants', 'fieldLabel' => 'Tenants', 'fieldGroup' => 'Advanced', 'type' => 'multiSelect', 'resultValueField' => 'id', 'optionSource' => lambda { |api_client, api_params|
145
161
  api_client.options.options_for_source("allTenants", {})['data']
146
162
  }},
147
163
  ]
@@ -484,7 +484,7 @@ module Morpheus::Cli::ProvisioningHelper
484
484
  if options[:instance_type_code]
485
485
  instance_type_code = options[:instance_type_code]
486
486
  else
487
- instance_type_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'type' => 'select', 'fieldLabel' => 'Type', 'optionSource' => 'instanceTypes', 'required' => true, 'description' => 'Select Instance Type.'}],options[:options],api_client,{groupId: group_id}, no_prompt, true)
487
+ instance_type_prompt = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'type' => 'select', 'fieldLabel' => 'Type', 'optionSource' => 'instanceTypes', 'required' => true, 'description' => 'Select Instance Type.'}],options[:options],api_client,{groupId: group_id, cloudId: cloud_id, restrictProvisionType:true}, no_prompt, true)
488
488
  instance_type_code = instance_type_prompt['type']
489
489
  end
490
490
  if instance_type_code.to_s =~ /\A\d{1,}\Z/
@@ -569,6 +569,7 @@ EOT
569
569
  Create a new #{rest_label.downcase}.
570
570
  [#{rest_arg}] is required. This is the name of the new #{rest_label.downcase}.
571
571
  EOT
572
+ opts.footer += send "add_#{rest_key}_footer_addn" if respond_to?("add_#{rest_key}_footer_addn", true)
572
573
  end
573
574
  optparse.parse!(args)
574
575
  # todo: make supporting args[0] optional and more flexible
@@ -588,7 +589,7 @@ EOT
588
589
  if record_type_id.nil?
589
590
  #raise_command_error "#{rest_type_label} is required.\n#{optparse}"
590
591
  type_list = rest_type_interface.list({max:10000, creatable:true})[rest_type_list_key]
591
- type_dropdown_options = type_list.collect {|it| {'name' => it['name'], 'value' => it['code']} }
592
+ type_dropdown_options = respond_to?("#{rest_key}_type_list_to_options", true) ? send("#{rest_key}_type_list_to_options", type_list) : type_list.collect {|it| {'name' => it['name'], 'value' => it['code']} }
592
593
  record_type_id = Morpheus::Cli::OptionTypes.prompt([{'fieldName' => 'type', 'fieldLabel' => rest_type_label, 'type' => 'select', 'selectOptions' => type_dropdown_options, 'required' => true}], options[:options], @api_client)['type']
593
594
  end
594
595
  record_type = rest_type_find_by_name_or_id(record_type_id)
@@ -694,6 +695,7 @@ EOT
694
695
  Update an existing #{rest_label.downcase}.
695
696
  [#{rest_arg}] is required. This is the #{rest_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_label)} #{rest_label.downcase}.
696
697
  EOT
698
+ opts.footer += send "update_#{rest_key}_footer_addn" if respond_to?("update_#{rest_key}_footer_addn", true)
697
699
  end
698
700
  optparse.parse!(args)
699
701
  verify_args!(args:args, optparse:optparse, count:1)
@@ -265,7 +265,7 @@ module Morpheus::Cli::SecondaryRestCommand
265
265
  options = {}
266
266
  optparse = Morpheus::Cli::OptionParser.new do |opts|
267
267
  opts.banner = subcommand_usage("[#{rest_parent_arg}] [search]")
268
- parse_list_options!(args, options, params)
268
+ build_list_options(opts, options, params)
269
269
  opts.footer = <<-EOT
270
270
  List #{rest_label_plural.downcase}.
271
271
  [#{rest_parent_arg}] is required. This is the #{rest_parent_has_name ? 'name or id' : 'id'} of #{a_or_an(rest_parent_label)} #{rest_parent_label.downcase}.
@@ -513,7 +513,6 @@ EOT
513
513
  advanced_option_types = respond_to?("update_#{rest_key}_advanced_option_types", true) ? send("update_#{rest_key}_advanced_option_types") : []
514
514
  optparse = Morpheus::Cli::OptionParser.new do |opts|
515
515
  opts.banner = subcommand_usage("[#{rest_parent_arg}] [#{rest_arg}] [options]")
516
-
517
516
  build_standard_update_options(opts, options)
518
517
  opts.footer = <<-EOT
519
518
  Update an existing #{rest_label.downcase}.
@@ -562,7 +561,7 @@ EOT
562
561
  options[:params]['type'] = record_type['code']
563
562
  end
564
563
  # update options without prompting by default
565
- if option_types && !option_types.empty?
564
+ if false && option_types && !option_types.empty?
566
565
  api_params = (options[:params] || {}).merge(record_payload) # need to merge in values from record too, ughhh
567
566
  v_prompt = Morpheus::Cli::OptionTypes.no_prompt(option_types, options[:options], @api_client, api_params)
568
567
  v_prompt.deep_compact!
@@ -576,7 +575,7 @@ EOT
576
575
  else
577
576
  my_option_types = record_type ? record_type['optionTypes'] : nil
578
577
  end
579
- if my_option_types && !my_option_types.empty?
578
+ if false && my_option_types && !my_option_types.empty?
580
579
  # remove redundant fieldContext
581
580
  # make them optional for updates
582
581
  # todo: use current value as default instead of just making things optioanl
@@ -594,7 +593,7 @@ EOT
594
593
  record_payload.deep_merge!(v_prompt)
595
594
  end
596
595
  # advanced options
597
- if advanced_option_types && !advanced_option_types.empty?
596
+ if false && advanced_option_types && !advanced_option_types.empty?
598
597
  v_prompt = Morpheus::Cli::OptionTypes.no_prompt(advanced_option_types, options[:options], @api_client, options[:params])
599
598
  v_prompt.deep_compact!
600
599
  v_prompt.booleanize! # 'on' => true
@@ -644,7 +643,7 @@ EOT
644
643
  if parent_record.nil?
645
644
  return 1, "#{rest_parent_label} not found for '#{parent_id}"
646
645
  end
647
- record = rest_find_by_name_or_id(parent_id, id)
646
+ record = rest_find_by_name_or_id(parent_record['id'], id)
648
647
  if record.nil?
649
648
  return 1, "#{rest_name} not found for '#{id}'"
650
649
  end
@@ -281,12 +281,14 @@ module Morpheus
281
281
  if option_type['optionSource'].nil?
282
282
  value = option_type['defaultValue']
283
283
  else
284
- value = load_source_options(option_type['optionSource'], option_params, api_client, api_params || {})
284
+ value = load_source_options(option_type['optionSource'], option_type['optionSourceType'], api_client, api_params || {})
285
285
  end
286
286
  elsif option_type['type'] == 'file'
287
287
  value = file_prompt(option_type)
288
288
  elsif option_type['type'] == 'file-content'
289
289
  value = file_content_prompt(option_type, options, api_client, {})
290
+ elsif option_type['type'] == 'multiText'
291
+ value = multitext_prompt(option_type)
290
292
  else
291
293
  value = generic_prompt(option_type)
292
294
  end
@@ -294,7 +296,6 @@ module Morpheus
294
296
 
295
297
  if option_type['type'] == 'multiSelect'
296
298
  value = [value] if !value.nil? && !value.is_a?(Array)
297
- # parent_context_map[parent_ns] = value
298
299
  elsif option_type['type'] == 'multiText'
299
300
  # multiText expects csv value
300
301
  if value && value.is_a?(String)
@@ -530,6 +531,10 @@ module Morpheus
530
531
  if value && !option_type['fieldInput'].nil?
531
532
  value = {option_type['fieldName'].split('.').last => value, option_type['fieldInput'] => (no_prompt ? option_type['defaultInputValue'] : field_input_prompt(option_type))}
532
533
  end
534
+
535
+ if value && !option_type['resultValueField'].nil?
536
+ value = {option_type['resultValueField'] => value}
537
+ end
533
538
  value
534
539
  end
535
540
 
@@ -926,6 +931,32 @@ module Morpheus
926
931
  return file_params
927
932
  end
928
933
 
934
+ def self.multitext_prompt(option_type)
935
+ rtn = nil
936
+
937
+ # supports multi-part fields via config.fields
938
+ # {"fields": [{"name":"tag", "required":true, "label": "Tag"}, {"name":"value", "required":false, "label": "Scope"}]}
939
+ if option_type['config']['fields']
940
+ while (option_type['required'] && rtn.empty?) || self.confirm("Add#{rtn.empty? ? '': ' more'} #{option_type['fieldLabel']}?", {:default => false})
941
+ rtn ||= []
942
+ value = {}
943
+ option_type['config']['fields'].each do |field|
944
+ field_label = field['label'] || field['name'].capitalize
945
+ value[field['name']] = generic_prompt(option_type.merge({'fieldLabel' => field_label, 'required' => field['required'], 'description' => "#{option_type['fieldLabel']} #{field_label}"}))
946
+ end
947
+ rtn << value
948
+ end
949
+ else
950
+ if rtn = generic_prompt(option_type)
951
+ rtn = [rtn]
952
+ while self.confirm("Add more #{option_type['fieldLabel']}?", {:default => false}) do
953
+ rtn << generic_prompt(option_type)
954
+ end
955
+ end
956
+ end
957
+ rtn
958
+ end
959
+
929
960
  def self.load_options(option_type, api_client, api_params, query_value=nil)
930
961
  select_options = []
931
962
  # local array of options
@@ -945,7 +976,7 @@ module Morpheus
945
976
  select_options = filtered_options
946
977
  end
947
978
  elsif option_type['optionSource']
948
- api_params = api_params.select {|k,v| option_type['params'].include(k)} if option_type['params'].nil? && api_params
979
+ api_params = api_params.select {|k,v| option_type['params'].include(k)} if !option_type['params'].nil? && api_params
949
980
 
950
981
  # calculate from inline lambda
951
982
  if option_type['optionSource'].is_a?(Proc)
@@ -1,6 +1,6 @@
1
1
 
2
2
  module Morpheus
3
3
  module Cli
4
- VERSION = "5.4.1"
4
+ VERSION = "5.4.2"
5
5
  end
6
6
  end
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: morpheus-cli
3
3
  version: !ruby/object:Gem::Version
4
- version: 5.4.1
4
+ version: 5.4.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Estes
8
8
  - Bob Whiton
9
9
  - Jeremy Michael Crosbie
10
10
  - James Dickson
11
- autorequire:
11
+ autorequire:
12
12
  bindir: bin
13
13
  cert_chain: []
14
- date: 2021-12-14 00:00:00.000000000 Z
14
+ date: 2022-01-11 00:00:00.000000000 Z
15
15
  dependencies:
16
16
  - !ruby/object:Gem::Dependency
17
17
  name: bundler
@@ -524,11 +524,11 @@ files:
524
524
  - lib/morpheus/terminal.rb
525
525
  - lib/morpheus/util.rb
526
526
  - morpheus-cli.gemspec
527
- homepage:
527
+ homepage:
528
528
  licenses:
529
529
  - MIT
530
530
  metadata: {}
531
- post_install_message:
531
+ post_install_message:
532
532
  rdoc_options: []
533
533
  require_paths:
534
534
  - lib
@@ -543,8 +543,9 @@ required_rubygems_version: !ruby/object:Gem::Requirement
543
543
  - !ruby/object:Gem::Version
544
544
  version: '0'
545
545
  requirements: []
546
- rubygems_version: 3.0.9
547
- signing_key:
546
+ rubyforge_project:
547
+ rubygems_version: 2.7.6
548
+ signing_key:
548
549
  specification_version: 4
549
550
  summary: Provides CLI Interface to the Morpheus Public/Private Cloud Appliance
550
551
  test_files: []