Merge "NSX|V3: Fix octavia pool update operation"
This commit is contained in:
commit
b68bb4b149
@ -301,8 +301,9 @@ class EdgePoolManagerFromDict(base_mgr.Nsxv3LoadbalancerBaseManager):
|
|||||||
except IndexError:
|
except IndexError:
|
||||||
# If listeners is an empty list we hit this exception
|
# If listeners is an empty list we hit this exception
|
||||||
listener = None
|
listener = None
|
||||||
# Perform additional validation for session persistence before
|
|
||||||
# operating on resources in the backend
|
# Perform additional validation for session persistence before
|
||||||
|
# operating on resources in the backend
|
||||||
self._validate_session_persistence(new_pool, listener, completor,
|
self._validate_session_persistence(new_pool, listener, completor,
|
||||||
old_pool=old_pool)
|
old_pool=old_pool)
|
||||||
|
|
||||||
|
@ -144,7 +144,7 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
lb_dict['vip_subnet_id'] = db_lb.vip.subnet_id
|
lb_dict['vip_subnet_id'] = db_lb.vip.subnet_id
|
||||||
return lb_dict
|
return lb_dict
|
||||||
|
|
||||||
def _get_listener_in_pool_dict(self, pool_dict):
|
def _get_listener_in_pool_dict(self, pool_dict, is_update):
|
||||||
if 'listener' not in pool_dict:
|
if 'listener' not in pool_dict:
|
||||||
if pool_dict.get('listener_id'):
|
if pool_dict.get('listener_id'):
|
||||||
db_listener = self.repositories.listener.get(
|
db_listener = self.repositories.listener.get(
|
||||||
@ -165,12 +165,14 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
if 'listeners' not in pool_dict:
|
if 'listeners' not in pool_dict:
|
||||||
# multiple listeners is not really supported yet
|
# multiple listeners is not really supported yet
|
||||||
pool_dict['listeners'] = [listener_dict]
|
pool_dict['listeners'] = [listener_dict]
|
||||||
else:
|
# Do not add listener in update situation, as we want to use
|
||||||
|
# the original listener of this pool
|
||||||
|
elif not is_update:
|
||||||
pool_dict['listener'] = None
|
pool_dict['listener'] = None
|
||||||
if 'listeners' not in pool_dict:
|
if 'listeners' not in pool_dict:
|
||||||
pool_dict['listeners'] = []
|
pool_dict['listeners'] = []
|
||||||
|
|
||||||
def _get_pool_dict(self, pool_id):
|
def _get_pool_dict(self, pool_id, is_update):
|
||||||
if not pool_id:
|
if not pool_id:
|
||||||
return {}
|
return {}
|
||||||
db_pool = self.repositories.pool.get(db_apis.get_session(), id=pool_id)
|
db_pool = self.repositories.pool.get(db_apis.get_session(), id=pool_id)
|
||||||
@ -185,10 +187,10 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
pool_dict['loadbalancer'] = self._get_load_balancer_dict(
|
pool_dict['loadbalancer'] = self._get_load_balancer_dict(
|
||||||
pool_dict['loadbalancer_id'])
|
pool_dict['loadbalancer_id'])
|
||||||
if 'listener' not in pool_dict:
|
if 'listener' not in pool_dict:
|
||||||
self._get_listener_in_pool_dict(pool_dict)
|
self._get_listener_in_pool_dict(pool_dict, is_update)
|
||||||
return pool_dict
|
return pool_dict
|
||||||
|
|
||||||
def _get_hm_dict(self, hm_id):
|
def _get_hm_dict(self, hm_id, is_update):
|
||||||
if not hm_id:
|
if not hm_id:
|
||||||
return {}
|
return {}
|
||||||
db_hm = self.repositories.health_monitor.get(
|
db_hm = self.repositories.health_monitor.get(
|
||||||
@ -201,7 +203,7 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
# Get the pol object
|
# Get the pol object
|
||||||
if hm_dict.get('pool_id'):
|
if hm_dict.get('pool_id'):
|
||||||
hm_dict['pool'] = self._get_pool_dict(
|
hm_dict['pool'] = self._get_pool_dict(
|
||||||
hm_dict['pool_id'])
|
hm_dict['pool_id'], is_update)
|
||||||
return hm_dict
|
return hm_dict
|
||||||
|
|
||||||
def update_policy_dict(self, policy_dict, policy_obj, is_update=False):
|
def update_policy_dict(self, policy_dict, policy_obj, is_update=False):
|
||||||
@ -279,7 +281,8 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
member['id'] = member['member_id']
|
member['id'] = member['member_id']
|
||||||
if pool.get('healthmonitor'):
|
if pool.get('healthmonitor'):
|
||||||
pool['healthmonitor'] = self._get_hm_dict(
|
pool['healthmonitor'] = self._get_hm_dict(
|
||||||
pool['healthmonitor']['healthmonitor_id'])
|
pool['healthmonitor']['healthmonitor_id'],
|
||||||
|
is_update)
|
||||||
|
|
||||||
elif obj_type == 'Listener':
|
elif obj_type == 'Listener':
|
||||||
if 'l7policies' in obj_dict:
|
if 'l7policies' in obj_dict:
|
||||||
@ -292,12 +295,13 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
|
|
||||||
elif obj_type == 'Pool':
|
elif obj_type == 'Pool':
|
||||||
if 'listener' not in obj_dict:
|
if 'listener' not in obj_dict:
|
||||||
self._get_listener_in_pool_dict(obj_dict)
|
self._get_listener_in_pool_dict(obj_dict, is_update)
|
||||||
|
|
||||||
elif obj_type == 'Member':
|
elif obj_type == 'Member':
|
||||||
# Get the pool object
|
# Get the pool object
|
||||||
if obj_dict.get('pool_id'):
|
if obj_dict.get('pool_id'):
|
||||||
obj_dict['pool'] = self._get_pool_dict(obj_dict['pool_id'])
|
obj_dict['pool'] = self._get_pool_dict(
|
||||||
|
obj_dict['pool_id'], is_update)
|
||||||
obj_dict['loadbalancer'] = None
|
obj_dict['loadbalancer'] = None
|
||||||
if 'loadbalancer' in obj_dict['pool']:
|
if 'loadbalancer' in obj_dict['pool']:
|
||||||
obj_dict['loadbalancer'] = obj_dict['pool']['loadbalancer']
|
obj_dict['loadbalancer'] = obj_dict['pool']['loadbalancer']
|
||||||
@ -312,7 +316,8 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
elif obj_type == 'HealthMonitor':
|
elif obj_type == 'HealthMonitor':
|
||||||
# Get the pool object
|
# Get the pool object
|
||||||
if obj_dict.get('pool_id'):
|
if obj_dict.get('pool_id'):
|
||||||
obj_dict['pool'] = self._get_pool_dict(obj_dict['pool_id'])
|
obj_dict['pool'] = self._get_pool_dict(
|
||||||
|
obj_dict['pool_id'], is_update)
|
||||||
|
|
||||||
elif obj_type == 'L7Policy':
|
elif obj_type == 'L7Policy':
|
||||||
self.update_policy_dict(obj_dict, obj, is_update=is_update)
|
self.update_policy_dict(obj_dict, obj, is_update=is_update)
|
||||||
@ -416,8 +421,9 @@ class NSXOctaviaDriver(driver_base.ProviderDriver):
|
|||||||
def pool_update(self, old_pool, new_pool):
|
def pool_update(self, old_pool, new_pool):
|
||||||
old_dict = self.obj_to_dict(old_pool)
|
old_dict = self.obj_to_dict(old_pool)
|
||||||
new_dict = copy.deepcopy(old_dict)
|
new_dict = copy.deepcopy(old_dict)
|
||||||
new_dict.update(self.obj_to_dict(
|
new_pool_dict = self.obj_to_dict(
|
||||||
new_pool, is_update=True, project_id=old_dict.get('project_id')))
|
new_pool, is_update=True, project_id=old_dict.get('project_id'))
|
||||||
|
new_dict.update(new_pool_dict)
|
||||||
kw = {'old_pool': old_dict,
|
kw = {'old_pool': old_dict,
|
||||||
'new_pool': new_dict}
|
'new_pool': new_dict}
|
||||||
self.client.cast({}, 'pool_update', **kw)
|
self.client.cast({}, 'pool_update', **kw)
|
||||||
|
Loading…
x
Reference in New Issue
Block a user