summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJenkins <jenkins@review.openstack.org>2013-04-01 19:50:56 +0000
committerGerrit Code Review <review@openstack.org>2013-04-01 19:50:56 +0000
commit2f5168a92b3509aafa2d2905ab128f3857ddbcaa (patch)
treef2267d8973ce74b983ad1d69086e7750eb4832cb
parent0d8772977eb7e09c7ad404f32937999470b359b9 (diff)
parent8a80c4c0968a9deceaa6d99629c6d7f7889769e5 (diff)
downloadnova-2f5168a92b3509aafa2d2905ab128f3857ddbcaa.tar.gz
nova-2f5168a92b3509aafa2d2905ab128f3857ddbcaa.tar.xz
nova-2f5168a92b3509aafa2d2905ab128f3857ddbcaa.zip
Merge "Return proper error message when network conflicts"
-rw-r--r--nova/exception.py5
-rw-r--r--nova/network/manager.py10
-rw-r--r--nova/tests/network/test_manager.py31
3 files changed, 28 insertions, 18 deletions
diff --git a/nova/exception.py b/nova/exception.py
index 43f02b7cb..b3b3d1f1f 100644
--- a/nova/exception.py
+++ b/nova/exception.py
@@ -1083,6 +1083,11 @@ class DuplicateVlan(Duplicate):
message = _("Detected existing vlan with id %(vlan)d")
+class CidrConflict(NovaException):
+ message = _("There was a conflict when trying to complete your request.")
+ code = 409
+
+
class InstanceNotFound(NotFound):
message = _("Instance %(instance_id)s could not be found.")
diff --git a/nova/network/manager.py b/nova/network/manager.py
index b9c8efe44..ac413135a 100644
--- a/nova/network/manager.py
+++ b/nova/network/manager.py
@@ -1115,13 +1115,13 @@ class NetworkManager(manager.Manager):
subnets_v4.append(next_subnet)
subnet = next_subnet
else:
- raise ValueError(_('cidr already in use'))
+ raise exception.CidrConflict(_('cidr already in use'))
for used_subnet in used_subnets:
if subnet in used_subnet:
msg = _('requested cidr (%(cidr)s) conflicts with '
'existing supernet (%(super)s)')
- raise ValueError(msg % {'cidr': subnet,
- 'super': used_subnet})
+ raise exception.CidrConflict(
+ msg % {'cidr': subnet, 'super': used_subnet})
if used_subnet in subnet:
next_subnet = find_next(subnet)
if next_subnet:
@@ -1132,8 +1132,8 @@ class NetworkManager(manager.Manager):
msg = _('requested cidr (%(cidr)s) conflicts '
'with existing smaller cidr '
'(%(smaller)s)')
- raise ValueError(msg % {'cidr': subnet,
- 'smaller': used_subnet})
+ raise exception.CidrConflict(
+ msg % {'cidr': subnet, 'smaller': used_subnet})
networks = []
subnets = itertools.izip_longest(subnets_v4, subnets_v6)
diff --git a/nova/tests/network/test_manager.py b/nova/tests/network/test_manager.py
index c4ce649f0..f0d8e58a9 100644
--- a/nova/tests/network/test_manager.py
+++ b/nova/tests/network/test_manager.py
@@ -1309,11 +1309,12 @@ class CommonNetworkTestCase(test.TestCase):
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
'cidr': '192.168.2.9/25'}])
self.mox.ReplayAll()
- # ValueError: requested cidr (192.168.2.0/24) conflicts with
- # existing smaller cidr
+ # CidrConflict: requested cidr (192.168.2.0/24) conflicts with
+ # existing smaller cidr
args = (None, 'fake', '192.168.2.0/24', False, 1, 256, None, None,
None, None, None)
- self.assertRaises(ValueError, manager.create_networks, *args)
+ self.assertRaises(exception.CidrConflict,
+ manager.create_networks, *args)
def test_validate_cidrs_split_smaller_cidr_in_use(self):
manager = fake_network.FakeNetworkManager()
@@ -1361,10 +1362,11 @@ class CommonNetworkTestCase(test.TestCase):
self.mox.ReplayAll()
args = (None, 'fake', '192.168.2.0/24', False, 3, 64, None, None,
None, None, None)
- # ValueError: Not enough subnets avail to satisfy requested num_
- # networks - some subnets in requested range already
- # in use
- self.assertRaises(ValueError, manager.create_networks, *args)
+ # CidrConflict: Not enough subnets avail to satisfy requested num_
+ # networks - some subnets in requested range already
+ # in use
+ self.assertRaises(exception.CidrConflict,
+ manager.create_networks, *args)
def test_validate_cidrs_one_in_use(self):
manager = fake_network.FakeNetworkManager()
@@ -1380,10 +1382,11 @@ class CommonNetworkTestCase(test.TestCase):
manager.db.network_get_all(ctxt).AndReturn([{'id': 1,
'cidr': '192.168.0.0/24'}])
self.mox.ReplayAll()
- # ValueError: cidr already in use
+ # CidrConflict: cidr already in use
args = (None, 'fake', '192.168.0.0/24', False, 1, 256, None, None,
None, None, None)
- self.assertRaises(ValueError, manager.create_networks, *args)
+ self.assertRaises(exception.CidrConflict,
+ manager.create_networks, *args)
def test_validate_cidrs_too_many(self):
manager = fake_network.FakeNetworkManager()
@@ -1411,9 +1414,10 @@ class CommonNetworkTestCase(test.TestCase):
self.mox.ReplayAll()
args = (None, 'fake', '192.168.0.0/24', False, 1, 256, None, None,
None, None, None)
- # ValueError: requested cidr (192.168.0.0/24) conflicts
- # with existing supernet
- self.assertRaises(ValueError, manager.create_networks, *args)
+ # CidrConflict: requested cidr (192.168.0.0/24) conflicts
+ # with existing supernet
+ self.assertRaises(exception.CidrConflict,
+ manager.create_networks, *args)
def test_create_networks(self):
cidr = '192.168.0.0/24'
@@ -1433,7 +1437,8 @@ class CommonNetworkTestCase(test.TestCase):
self.mox.ReplayAll()
args = [None, 'foo', '192.168.0.0/24', None, 1, 256,
'fd00::/48', None, None, None, None, None]
- self.assertRaises(ValueError, manager.create_networks, *args)
+ self.assertRaises(exception.CidrConflict,
+ manager.create_networks, *args)
def test_create_networks_many(self):
cidr = '192.168.0.0/16'