Set listeners back to ACTIVE upon pool/member action failures
This patch ensure the listeners are set back from PENDING_UPDATE to ACTIVE in case of member or pool update failure. Closes-Bug: #1956745 Change-Id: I95860ae305c3d0c10859afb972d000328e23d614changes/44/823544/6
parent
1ddaef119b
commit
4d01470f5e
|
@ -1356,7 +1356,9 @@ class OvnProviderHelper():
|
|||
pool_key = self._get_pool_key(pool[constants.ID])
|
||||
commands = []
|
||||
external_ids = copy.deepcopy(ovn_lb.external_ids)
|
||||
pool_listeners = []
|
||||
try:
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
if pool_key in ovn_lb.external_ids:
|
||||
commands.append(
|
||||
self.ovn_nbdb_api.db_remove('Load_Balancer', ovn_lb.uuid,
|
||||
|
@ -1365,7 +1367,6 @@ class OvnProviderHelper():
|
|||
commands.extend(
|
||||
self._refresh_lb_vips(ovn_lb.uuid, external_ids))
|
||||
# Remove Pool from Listener if it is associated
|
||||
listener_id = None
|
||||
for key, value in ovn_lb.external_ids.items():
|
||||
if (key.startswith(ovn_const.LB_EXT_IDS_LISTENER_PREFIX) and
|
||||
pool_key in value):
|
||||
|
@ -1374,7 +1375,6 @@ class OvnProviderHelper():
|
|||
self.ovn_nbdb_api.db_set(
|
||||
'Load_Balancer', ovn_lb.uuid,
|
||||
('external_ids', external_ids)))
|
||||
listener_id = key.split('_')[1]
|
||||
|
||||
pool_key_when_disabled = self._get_pool_key(pool[constants.ID],
|
||||
is_enabled=False)
|
||||
|
@ -1389,10 +1389,6 @@ class OvnProviderHelper():
|
|||
ovn_lb, pool[constants.LOADBALANCER_ID], external_ids)[0])
|
||||
self._execute_commands(commands)
|
||||
|
||||
if listener_id:
|
||||
status[constants.LISTENERS] = [
|
||||
{constants.ID: listener_id,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]
|
||||
except Exception:
|
||||
LOG.exception(ovn_const.EXCEPTION_MSG, "deletion of pool")
|
||||
status = {
|
||||
|
@ -1403,6 +1399,13 @@ class OvnProviderHelper():
|
|||
{constants.ID: pool[constants.LOADBALANCER_ID],
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
|
||||
return status
|
||||
|
||||
def pool_update(self, pool):
|
||||
|
@ -1433,7 +1436,10 @@ class OvnProviderHelper():
|
|||
p_key_to_remove = None
|
||||
p_key_to_add = {}
|
||||
|
||||
pool_listeners = []
|
||||
|
||||
try:
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
if pool[constants.ADMIN_STATE_UP]:
|
||||
if p_key_when_disabled in external_ids:
|
||||
p_key_to_add[pool_key] = external_ids[p_key_when_disabled]
|
||||
|
@ -1468,13 +1474,6 @@ class OvnProviderHelper():
|
|||
operating_status = constants.OFFLINE
|
||||
pool_status[constants.OPERATING_STATUS] = operating_status
|
||||
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
except Exception:
|
||||
LOG.exception(ovn_const.EXCEPTION_MSG, "update of pool")
|
||||
status = {
|
||||
|
@ -1485,6 +1484,13 @@ class OvnProviderHelper():
|
|||
{constants.ID: pool[constants.LOADBALANCER_ID],
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
|
||||
return status
|
||||
|
||||
def _add_member(self, member, ovn_lb, pool_key):
|
||||
|
@ -1540,9 +1546,11 @@ class OvnProviderHelper():
|
|||
|
||||
def member_create(self, member):
|
||||
new_member = None
|
||||
pool_listeners = []
|
||||
try:
|
||||
pool_key, ovn_lb = self._find_ovn_lb_by_pool_id(
|
||||
member[constants.POOL_ID])
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
new_member = self._add_member(member, ovn_lb, pool_key)
|
||||
pool = {constants.ID: member[constants.POOL_ID],
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE,
|
||||
|
@ -1557,13 +1565,6 @@ class OvnProviderHelper():
|
|||
constants.LOADBALANCERS: [
|
||||
{constants.ID: ovn_lb.name,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
except Exception:
|
||||
LOG.exception(ovn_const.EXCEPTION_MSG, "creation of member")
|
||||
status = {
|
||||
|
@ -1577,6 +1578,13 @@ class OvnProviderHelper():
|
|||
{constants.ID: ovn_lb.name,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
|
||||
if new_member and ovn_lb.health_check:
|
||||
operating_status = constants.ONLINE
|
||||
if not self._update_hm_members(ovn_lb, pool_key):
|
||||
|
@ -1616,9 +1624,11 @@ class OvnProviderHelper():
|
|||
operator_fault_string=msg)
|
||||
|
||||
def member_delete(self, member):
|
||||
pool_listeners = []
|
||||
try:
|
||||
pool_key, ovn_lb = self._find_ovn_lb_by_pool_id(
|
||||
member[constants.POOL_ID])
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
pool_status = self._remove_member(member, ovn_lb, pool_key)
|
||||
pool = {constants.ID: member[constants.POOL_ID],
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE,
|
||||
|
@ -1633,13 +1643,6 @@ class OvnProviderHelper():
|
|||
constants.LOADBALANCERS: [
|
||||
{constants.ID: ovn_lb.name,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
except Exception:
|
||||
LOG.exception(ovn_const.EXCEPTION_MSG, "deletion of member")
|
||||
status = {
|
||||
|
@ -1653,6 +1656,13 @@ class OvnProviderHelper():
|
|||
{constants.ID: ovn_lb.name,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
|
||||
return status
|
||||
|
||||
def _update_member(self, member, ovn_lb, pool_key):
|
||||
|
@ -1675,6 +1685,7 @@ class OvnProviderHelper():
|
|||
self._execute_commands(commands)
|
||||
|
||||
def member_update(self, member):
|
||||
pool_listeners = []
|
||||
try:
|
||||
pool_key, ovn_lb = self._find_ovn_lb_by_pool_id(
|
||||
member[constants.POOL_ID])
|
||||
|
@ -1688,6 +1699,7 @@ class OvnProviderHelper():
|
|||
constants.LOADBALANCERS: [
|
||||
{constants.ID: ovn_lb.name,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
self._update_member(member, ovn_lb, pool_key)
|
||||
if constants.ADMIN_STATE_UP in member:
|
||||
if member[constants.ADMIN_STATE_UP]:
|
||||
|
@ -1707,14 +1719,6 @@ class OvnProviderHelper():
|
|||
else:
|
||||
member_status[constants.OPERATING_STATUS] = (
|
||||
constants.OFFLINE)
|
||||
|
||||
pool_listeners = self._get_pool_listeners(ovn_lb, pool_key)
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
except Exception:
|
||||
LOG.exception(ovn_const.EXCEPTION_MSG, "update of member")
|
||||
status = {
|
||||
|
@ -1727,6 +1731,13 @@ class OvnProviderHelper():
|
|||
constants.LOADBALANCERS: [
|
||||
{constants.ID: ovn_lb.name,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE}]}
|
||||
|
||||
listener_status = []
|
||||
for listener in pool_listeners:
|
||||
listener_status.append(
|
||||
{constants.ID: listener,
|
||||
constants.PROVISIONING_STATUS: constants.ACTIVE})
|
||||
status[constants.LISTENERS] = listener_status
|
||||
return status
|
||||
|
||||
def _get_existing_pool_members(self, pool_id):
|
||||
|
|
|
@ -664,7 +664,8 @@ class TestOvnOctaviaBase(base.TestOVNFunctionalBase,
|
|||
'pools': [{'id': p.pool_id,
|
||||
'provisioning_status': 'DELETED'}],
|
||||
'loadbalancers': [{'id': p.loadbalancer_id,
|
||||
'provisioning_status': 'ACTIVE'}]
|
||||
'provisioning_status': 'ACTIVE'}],
|
||||
'listeners': []
|
||||
}
|
||||
if listener_id:
|
||||
pool_dict['listeners'] = [{'id': listener_id,
|
||||
|
|
Loading…
Reference in New Issue