]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Nuage Plugin: Delete router requires precommit checks
authorronak <ronak.malav.shah@gmail.com>
Tue, 1 Apr 2014 01:09:42 +0000 (18:09 -0700)
committerronak <ronak.malav.shah@gmail.com>
Tue, 15 Apr 2014 22:20:52 +0000 (15:20 -0700)
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

index 9821048ab9324d8d1a927f829d8b50d9a53ca3e6..99bbe266de2c582adeb039503c2cfedcebd17c99 100644 (file)
@@ -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)