From a77d13fdc4a9de2b3ebd0ecfc83e59325f2f3754 Mon Sep 17 00:00:00 2001 From: asarfaty Date: Sun, 7 Feb 2021 10:44:32 +0200 Subject: [PATCH] NSX|P: Fix octavia delete cascade with multiple listeners Delete cascade calls each listener delete separatly while the loadbalancer still holds all the listeners. This cause the GW policy resources for listeners allowed cidrs to not be deleted. This patch calls the code directly with no listeners to ensure deletion. Change-Id: I212ce9642939bf1875d1b4549a0e271a20b58552 --- .../services/lbaas/nsx_p/implementation/loadbalancer_mgr.py | 2 ++ vmware_nsx/tests/unit/services/lbaas/test_nsxp_driver.py | 3 +++ 2 files changed, 5 insertions(+) diff --git a/vmware_nsx/services/lbaas/nsx_p/implementation/loadbalancer_mgr.py b/vmware_nsx/services/lbaas/nsx_p/implementation/loadbalancer_mgr.py index 87a8fd54cf..9627305a49 100644 --- a/vmware_nsx/services/lbaas/nsx_p/implementation/loadbalancer_mgr.py +++ b/vmware_nsx/services/lbaas/nsx_p/implementation/loadbalancer_mgr.py @@ -222,6 +222,8 @@ class EdgeLoadBalancerManagerFromDict(base_mgr.NsxpLoadbalancerBaseManager): def delete_cascade(self, context, lb, completor): """Delete all backend and DB resources of this loadbalancer""" + p_utils.set_allowed_cidrs_fw(self.core_plugin, + context, lb, []) self.delete(context, lb, completor) diff --git a/vmware_nsx/tests/unit/services/lbaas/test_nsxp_driver.py b/vmware_nsx/tests/unit/services/lbaas/test_nsxp_driver.py index f978cb9ca9..748708c767 100644 --- a/vmware_nsx/tests/unit/services/lbaas/test_nsxp_driver.py +++ b/vmware_nsx/tests/unit/services/lbaas/test_nsxp_driver.py @@ -535,6 +535,8 @@ class TestEdgeLbaasV2Loadbalancer(BaseTestEdgeLbaasV2): lb_service = {'id': LB_SERVICE_ID} with mock.patch.object(lb_utils, 'get_router_from_network', return_value=ROUTER_ID),\ + mock.patch.object(self.core_plugin, 'get_floatingips' + ) as mock_get_floatingips, \ mock.patch.object(self.service_client, 'update_customized', side_effect=n_exc.BadRequest(resource='', msg='') ) as service_update,\ @@ -543,6 +545,7 @@ class TestEdgeLbaasV2Loadbalancer(BaseTestEdgeLbaasV2): mock.patch.object(self.service_client, 'delete' ) as mock_delete_lb_service: + mock_get_floatingips.return_value = [] self.edge_driver.loadbalancer.delete_cascade( self.context, self.lb_dict, self.completor)