]> review.fuel-infra Code Review - openstack-build/neutron-build.git/commitdiff
Check for ports in subnet before deleting it from Nuage VSD
authorronak <ronak.malav.shah@gmail.com>
Fri, 8 Aug 2014 19:13:16 +0000 (12:13 -0700)
committerronak <ronak.malav.shah@gmail.com>
Fri, 12 Sep 2014 17:56:43 +0000 (10:56 -0700)
There could exist a port in subnet in neutron in which case subnet delete
is not allowed. In the nuage's plugin code, this validation needs to
be handle prior to sending delete subnet request to backend.

Change-Id: Idd20d2f878a6274a012504108d01bd2237dc665a
Closes-bug: #1351522

neutron/plugins/nuage/plugin.py
neutron/tests/unit/nuage/test_nuage_plugin.py

index f0041e18ee9c2795a20731e6b419c0da0d522376..3068ed65f7640f908780f014348603b505cbe088 100644 (file)
@@ -689,6 +689,12 @@ class NuagePlugin(db_base_plugin_v2.NeutronDbPluginV2,
             super(NuagePlugin, self).delete_subnet(context, id)
             return self._delete_nuage_sharedresource(id)
 
+        filters = {'fixed_ips': {'subnet_id': [id]}}
+        ports = self.get_ports(context, filters)
+        for port in ports:
+            if port['device_owner'] != os_constants.DEVICE_OWNER_DHCP:
+                raise n_exc.SubnetInUse(subnet_id=id)
+
         subnet_l2dom = nuagedb.get_subnet_l2dom_by_id(context.session, id)
         if subnet_l2dom:
             try:
index 16c049a703a6328c541583d1a3e9e38c519eeda2..c06419cab5a9321685c076b6ecb1f32820d9dfee 100644 (file)
@@ -344,6 +344,20 @@ class TestNuageSubnetsV2(NuagePluginV2TestCase,
             subnet_res = subnet_req.get_response(self.api)
             self.assertEqual(exc.HTTPCreated.code, subnet_res.status_int)
 
+    def test_delete_subnet_port_exists_returns_409(self):
+        gateway_ip = '10.0.0.1'
+        cidr = '10.0.0.0/24'
+        res = self._create_network(fmt=self.fmt, name='net',
+                                   admin_state_up=True)
+        network = self.deserialize(self.fmt, res)
+        subnet = self._make_subnet(self.fmt, network, gateway_ip,
+                                   cidr, ip_version=4)
+        self._create_port(self.fmt,
+                          network['network']['id'])
+        req = self.new_delete_request('subnets', subnet['subnet']['id'])
+        res = req.get_response(self.api)
+        self.assertEqual(409, res.status_int)
+
 
 class TestNuagePluginPortBinding(NuagePluginV2TestCase,
                                  test_bindings.PortBindingsTestCase):