From cffcd56d4b58429a409b55fc1db792df3fbc24c7 Mon Sep 17 00:00:00 2001 From: ronak Date: Mon, 31 Mar 2014 18:09:42 -0700 Subject: [PATCH] Nuage Plugin: Delete router requires precommit checks There exist a case where deleting router from neutron without deleting router-interface deletes router from VSD but not from neutron. If router has an interface with subnet router deletion is not allowed. Needs to precheck this condition before deleting router from backend (VSD). Change-Id: I4ba7eff399acda0427505328355dbfb931d62587 Closes-Bug: #1298635 --- neutron/plugins/nuage/plugin.py | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/neutron/plugins/nuage/plugin.py b/neutron/plugins/nuage/plugin.py index 9821048ab..99bbe266d 100644 --- a/neutron/plugins/nuage/plugin.py +++ b/neutron/plugins/nuage/plugin.py @@ -31,6 +31,7 @@ from neutron.db import external_net_db from neutron.db import l3_db from neutron.db import models_v2 from neutron.db import quota_db # noqa +from neutron.extensions import l3 from neutron.extensions import portbindings from neutron.openstack.common import excutils from neutron.openstack.common import importutils @@ -608,6 +609,13 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2, ent_rtr_mapping = nuagedb.get_ent_rtr_mapping_by_rtrid(session, id) if ent_rtr_mapping: + filters = { + 'device_id': [id], + 'device_owner': [os_constants.DEVICE_OWNER_ROUTER_INTF] + } + ports = self.get_ports(context, filters) + if ports: + raise l3.RouterInUse(router_id=id) nuage_router_id = ent_rtr_mapping['nuage_router_id'] self.nuageclient.delete_router(nuage_router_id) router_zone = nuagedb.get_rtr_zone_mapping(session, id) -- 2.45.2