Merge "Octavia flavors"
This commit is contained in:
commit
7c50ea185d
@ -95,7 +95,8 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.NsxpLoadbalancerBaseManager):
|
||||
tags.append(p_utils.get_service_lb_tag(lb['id']))
|
||||
|
||||
lb_size = lb_utils.get_lb_flavor_size(self.flavor_plugin, context,
|
||||
lb.get('flavor_id'))
|
||||
lb.get('flavor_id'),
|
||||
lb.get('flavor'))
|
||||
|
||||
try:
|
||||
if network and network.get('router:external'):
|
||||
@ -227,6 +228,30 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.NsxpLoadbalancerBaseManager):
|
||||
context, lb, [])
|
||||
self.delete(context, lb, completor)
|
||||
|
||||
def get_supported_flavor_metadata(self):
|
||||
return {
|
||||
'lb_size': 'loadbalancer edge size, one of: %s' % ', '.join(
|
||||
lb_const.LB_FLAVOR_SIZES)}
|
||||
|
||||
def validate_flavor(self, flavor_metadata):
|
||||
# Validate flavor attributes
|
||||
valid_flavor_keys = ['lb_size']
|
||||
for k in flavor_metadata.keys():
|
||||
if k not in valid_flavor_keys:
|
||||
return {'valid': False}
|
||||
|
||||
# Validate attribute
|
||||
if (flavor_metadata.get('lb_size') and
|
||||
flavor_metadata['lb_size'] not in lb_const.LB_FLAVOR_SIZES):
|
||||
return {'valid': False}
|
||||
return {'valid': True}
|
||||
|
||||
def get_supported_availability_zone_metadata(self):
|
||||
return {}
|
||||
|
||||
def validate_availability_zone(self, availability_zone_metadata):
|
||||
return False
|
||||
|
||||
|
||||
def _nsx_status_to_lb_status(nsx_status):
|
||||
if not nsx_status:
|
||||
|
@ -210,3 +210,15 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.EdgeLoadbalancerBaseManager):
|
||||
if not found:
|
||||
return False
|
||||
return True
|
||||
|
||||
def get_supported_flavor_metadata(self):
|
||||
return None
|
||||
|
||||
def validate_flavor(self, flavor_metadata):
|
||||
return None
|
||||
|
||||
def get_supported_availability_zone_metadata(self):
|
||||
return None
|
||||
|
||||
def validate_availability_zone(self, availability_zone_metadata):
|
||||
return None
|
||||
|
@ -62,7 +62,10 @@ def get_router_from_network(context, plugin, subnet_id):
|
||||
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_lb_flavor_size(flavor_plugin, context, flavor_id):
|
||||
def get_lb_flavor_size(flavor_plugin, context, flavor_id, flavor):
|
||||
# Octavia will have a flavor obj here
|
||||
if flavor:
|
||||
return flavor.get('lb_size', lb_const.DEFAULT_LB_SIZE)
|
||||
if not flavor_id:
|
||||
return lb_const.DEFAULT_LB_SIZE
|
||||
|
||||
|
@ -55,7 +55,7 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
lb_service = service_client.get_router_lb_service(nsx_router_id)
|
||||
if not lb_service:
|
||||
lb_size = lb_utils.get_lb_flavor_size(
|
||||
self.flavor_plugin, context, lb.get('flavor_id'))
|
||||
self.flavor_plugin, context, lb.get('flavor_id'), None)
|
||||
if router_id:
|
||||
# Make sure the NSX service router exists
|
||||
if not self.core_plugin.service_router_has_services(
|
||||
@ -244,3 +244,15 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
||||
def delete_cascade(self, context, lb, completor):
|
||||
"""Delete all backend and DB resources of this loadbalancer"""
|
||||
self.delete(context, lb, completor)
|
||||
|
||||
def get_supported_flavor_metadata(self):
|
||||
return None
|
||||
|
||||
def validate_flavor(self, flavor_metadata):
|
||||
return None
|
||||
|
||||
def get_supported_availability_zone_metadata(self):
|
||||
return None
|
||||
|
||||
def validate_availability_zone(self, availability_zone_metadata):
|
||||
return None
|
||||
|
@ -557,10 +557,54 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
||||
# Flavor
|
||||
@log_helpers.log_method_call
|
||||
def get_supported_flavor_metadata(self):
|
||||
raise exceptions.NotImplementedError()
|
||||
try:
|
||||
md = self.client.call({}, 'get_supported_flavor_metadata')
|
||||
except Exception:
|
||||
raise exceptions.DriverError()
|
||||
|
||||
if md is None:
|
||||
raise exceptions.NotImplementedError()
|
||||
return md
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def validate_flavor(self, flavor_metadata):
|
||||
kw = {'flavor_metadata': flavor_metadata}
|
||||
try:
|
||||
result = self.client.call({}, 'validate_flavor', **kw)
|
||||
except Exception:
|
||||
raise exceptions.DriverError()
|
||||
|
||||
if result and result.get('valid', False):
|
||||
return None
|
||||
if result:
|
||||
raise exceptions.UnsupportedOptionError()
|
||||
raise exceptions.NotImplementedError()
|
||||
|
||||
# AZ
|
||||
@log_helpers.log_method_call
|
||||
def get_supported_availability_zone_metadata(self):
|
||||
try:
|
||||
md = self.client.call(
|
||||
{}, 'get_supported_availability_zone_metadata')
|
||||
except Exception:
|
||||
raise exceptions.DriverError()
|
||||
|
||||
if md is None:
|
||||
raise exceptions.NotImplementedError()
|
||||
return md
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def validate_availability_zone(self, availability_zone_metadata):
|
||||
kw = {'availability_zone_metadata': availability_zone_metadata}
|
||||
try:
|
||||
result = self.client.call({}, 'validate_availability_zone', **kw)
|
||||
except Exception:
|
||||
raise exceptions.DriverError()
|
||||
|
||||
if result and result.get('valid', False):
|
||||
return None
|
||||
if result:
|
||||
raise exceptions.UnsupportedOptionError()
|
||||
raise exceptions.NotImplementedError()
|
||||
|
||||
|
||||
|
@ -694,6 +694,23 @@ class NSXOctaviaListenerEndpoint(object):
|
||||
return False
|
||||
return True
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_supported_flavor_metadata(self, ctxt):
|
||||
return self.loadbalancer.get_supported_flavor_metadata()
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def validate_flavor(self, ctxt, flavor_metadata):
|
||||
return self.loadbalancer.validate_flavor(flavor_metadata)
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def get_supported_availability_zone_metadata(self, ctxt):
|
||||
return self.loadbalancer.get_supported_availability_zone_metadata()
|
||||
|
||||
@log_helpers.log_method_call
|
||||
def validate_availability_zone(self, ctxt, availability_zone_metadata):
|
||||
return self.loadbalancer.validate_availability_zone(
|
||||
availability_zone_metadata)
|
||||
|
||||
|
||||
class NSXOctaviaStatisticsCollector(object):
|
||||
def __init__(self, core_plugin, listener_stats_getter,
|
||||
|
Loading…
x
Reference in New Issue
Block a user