diff --git a/ovn_octavia_provider/helper.py b/ovn_octavia_provider/helper.py index 187dc88a..3016dab3 100644 --- a/ovn_octavia_provider/helper.py +++ b/ovn_octavia_provider/helper.py @@ -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): diff --git a/ovn_octavia_provider/tests/functional/base.py b/ovn_octavia_provider/tests/functional/base.py index 0406345a..a92c4eab 100644 --- a/ovn_octavia_provider/tests/functional/base.py +++ b/ovn_octavia_provider/tests/functional/base.py @@ -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,