diff --git a/neutron_lbaas/services/loadbalancer/plugin.py b/neutron_lbaas/services/loadbalancer/plugin.py index 1dca0f1b0..b115e0ca1 100644 --- a/neutron_lbaas/services/loadbalancer/plugin.py +++ b/neutron_lbaas/services/loadbalancer/plugin.py @@ -803,6 +803,12 @@ class LoadBalancerPluginv2(loadbalancerv2.LoadBalancerPluginBaseV2): return self.db.get_listener(context, id).to_api_dict() def delete_listener(self, context, id): + old_listener = self.db.get_listener(context, id) + if old_listener.l7_policies: + raise loadbalancerv2.EntityInUse( + entity_using=models.L7Policy.NAME, + id=old_listener.l7_policies[0].id, + entity_in_use=models.Listener.NAME) self.db.test_and_set_status(context, models.Listener, id, constants.PENDING_DELETE) listener_db = self.db.get_listener(context, id) diff --git a/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py b/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py index aa94747a8..cfc356df6 100644 --- a/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py +++ b/neutron_lbaas/tests/unit/db/loadbalancer/test_db_loadbalancerv2.py @@ -1374,6 +1374,16 @@ class LbaasListenerTests(ListenerTestBase): resp, body = self._get_loadbalancer_api(self.lb_id) self.assertEqual(0, len(body['loadbalancer']['listeners'])) + def test_delete_listener_with_l7policy(self): + with self.listener(loadbalancer_id=self.lb_id, + no_delete=True) as listener: + with self.l7policy(listener['listener']['id'], no_delete=True): + ctx = context.get_admin_context() + self.assertRaises( + loadbalancerv2.EntityInUse, + self.plugin.delete_listener, + ctx, listener['listener']['id']) + def test_show_listener(self): name = 'show_listener' expected_values = {'name': name,