diff options
| author | Jenkins <jenkins@review.openstack.org> | 2012-02-15 17:13:07 +0000 |
|---|---|---|
| committer | Gerrit Code Review <review@openstack.org> | 2012-02-15 17:13:07 +0000 |
| commit | ab548e2e39daafb93ebcb4549a8dfe75c5b5ea94 (patch) | |
| tree | dbaad5b34326ee0c36baf19fb9760b3d6aa0608d /nova | |
| parent | 3c7a362763a6c6ba44570b61a1cc45d9a0f3abe4 (diff) | |
| parent | e88a2a616b6d3eda01ae739e542bec54ff82922f (diff) | |
| download | nova-ab548e2e39daafb93ebcb4549a8dfe75c5b5ea94.tar.gz nova-ab548e2e39daafb93ebcb4549a8dfe75c5b5ea94.tar.xz nova-ab548e2e39daafb93ebcb4549a8dfe75c5b5ea94.zip | |
Merge "Prevent Duplicate VLAN IDs"
Diffstat (limited to 'nova')
| -rw-r--r-- | nova/db/sqlalchemy/api.py | 7 | ||||
| -rw-r--r-- | nova/exception.py | 4 | ||||
| -rw-r--r-- | nova/tests/test_db_api.py | 8 |
3 files changed, 19 insertions, 0 deletions
diff --git a/nova/db/sqlalchemy/api.py b/nova/db/sqlalchemy/api.py index ed9286eff..1f4f2f88c 100644 --- a/nova/db/sqlalchemy/api.py +++ b/nova/db/sqlalchemy/api.py @@ -1984,9 +1984,16 @@ def network_count_reserved_ips(context, network_id): @require_admin_context def network_create_safe(context, values): + if values.get('vlan'): + if model_query(context, models.Network, read_deleted="no")\ + .filter_by(vlan=values['vlan'])\ + .first(): + raise exception.DuplicateVlan(vlan=values['vlan']) + network_ref = models.Network() network_ref['uuid'] = str(utils.gen_uuid()) network_ref.update(values) + try: network_ref.save() return network_ref diff --git a/nova/exception.py b/nova/exception.py index 9bb39b2f4..979703072 100644 --- a/nova/exception.py +++ b/nova/exception.py @@ -984,3 +984,7 @@ class SolidFireAPIStatusException(SolidFireAPIException): class SolidFireAPIDataException(SolidFireAPIException): message = _("Error in SolidFire API response: data=%(data)s") + + +class DuplicateVlan(Duplicate): + message = _("Detected existing vlan with id %(vlan)") diff --git a/nova/tests/test_db_api.py b/nova/tests/test_db_api.py index 121120dbf..3353ea737 100644 --- a/nova/tests/test_db_api.py +++ b/nova/tests/test_db_api.py @@ -146,6 +146,14 @@ class DbApiTestCase(test.TestCase): db_network = db.network_get(ctxt, network.id) self.assertEqual(network.uuid, db_network.uuid) + def test_network_create_with_duplicate_vlan(self): + ctxt = context.get_admin_context() + values1 = {'host': 'localhost', 'project_id': 'project1', 'vlan': 1} + values2 = {'host': 'something', 'project_id': 'project1', 'vlan': 1} + db.network_create_safe(ctxt, values1) + self.assertRaises(exception.DuplicateVlan, + db.network_create_safe, ctxt, values2) + def test_instance_update_with_instance_id(self): """ test instance_update() works when an instance id is passed """ ctxt = context.get_admin_context() |
