From 9f7595aa0f464dc7344e0639951ea731dcfbeca5 Mon Sep 17 00:00:00 2001 From: John Garbutt Date: Tue, 28 Feb 2012 18:14:25 +0000 Subject: Fixes bug 942549 Ensure a more meaninful error is reported when an aggregate is created in a non-exsistent availability zone. Change-Id: I15ea6c884bb6f326df1d88019ee0ecf070196d1e --- nova/api/openstack/compute/contrib/aggregates.py | 3 ++- nova/tests/api/openstack/compute/contrib/test_aggregates.py | 11 +++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/nova/api/openstack/compute/contrib/aggregates.py b/nova/api/openstack/compute/contrib/aggregates.py index ea90a57d7..583fe1b51 100644 --- a/nova/api/openstack/compute/contrib/aggregates.py +++ b/nova/api/openstack/compute/contrib/aggregates.py @@ -72,7 +72,8 @@ class AggregateController(object): try: aggregate = self.api.create_aggregate(context, name, avail_zone) - except exception.AggregateNameExists: + except (exception.AggregateNameExists, + exception.InvalidAggregateAction): LOG.exception(_("Cannot create aggregate with name %(name)s and " "availability zone %(avail_zone)s") % locals()) raise exc.HTTPConflict diff --git a/nova/tests/api/openstack/compute/contrib/test_aggregates.py b/nova/tests/api/openstack/compute/contrib/test_aggregates.py index 6c8bc5a2f..080cf8428 100644 --- a/nova/tests/api/openstack/compute/contrib/test_aggregates.py +++ b/nova/tests/api/openstack/compute/contrib/test_aggregates.py @@ -87,6 +87,17 @@ class AggregateTestCase(test.TestCase): {"name": "test", "availability_zone": "nova1"}}) + def test_create_with_incorrect_availability_zone(self): + def stub_create_aggregate(context, name, availability_zone): + raise exception.InvalidAggregateAction + self.stubs.Set(self.controller.api, "create_aggregate", + stub_create_aggregate) + + self.assertRaises(exc.HTTPConflict, self.controller.create, + self.req, {"aggregate": + {"name": "test", + "availability_zone": "nova_bad"}}) + def test_create_with_no_aggregate(self): self.assertRaises(exc.HTTPBadRequest, self.controller.create, self.req, {"foo": -- cgit