From: Liang Chen Date: Wed, 12 Jun 2013 13:47:05 +0000 (+0800) Subject: fix an CFN API and AWS error mapping X-Git-Tag: 2014.1~492^2 X-Git-Url: https://review.fuel-infra.org/gitweb?a=commitdiff_plain;h=7b9c2312cd323c0cfc80f86c0385ff2c9f8e5daf;p=openstack-build%2Fheat-build.git fix an CFN API and AWS error mapping StackExists should return AlreadyExists, not InvalidParameterValue Fixes bug #1188473 Change-Id: Ia969cddc1b61caa13f4f70bcc29f3160595a779b --- diff --git a/heat/api/aws/exception.py b/heat/api/aws/exception.py index 462163c5..a75463e2 100644 --- a/heat/api/aws/exception.py +++ b/heat/api/aws/exception.py @@ -204,6 +204,15 @@ class HeatThrottlingError(HeatAPIException): explanation = "Request was denied due to request throttling" +class AlreadyExistsError(HeatAPIException): + ''' + Resource with the name requested already exists + ''' + code = 400 + title = 'AlreadyExists' + explanation = "Resource with the name requested already exists" + + # Not documented in the AWS docs, authentication failure errors class HeatAccessDeniedError(HeatAPIException): ''' @@ -252,17 +261,19 @@ def map_remote_error(ex): 'ResourceNotAvailable', 'PhysicalResourceNotFound', 'WatchRuleNotFound', - 'StackExists', 'StackValidationFailed', 'InvalidTemplateReference', 'UnknownUserParameter', ) denied_errors = ('Forbidden', 'NotAuthorized') + already_exists_errors = ('StackExists') if ex.exc_type in inval_param_errors: return HeatInvalidParameterValueError(detail=ex.value) elif ex.exc_type in denied_errors: return HeatAccessDeniedError(detail=ex.value) + elif ex.exc_type in already_exists_errors: + return AlreadyExistsError(detail=ex.value) else: # Map everything else to internal server error for now return HeatInternalFailureError(detail=ex.value) diff --git a/heat/tests/test_api_cfn_v1.py b/heat/tests/test_api_cfn_v1.py index 130d2682..eafff5ff 100644 --- a/heat/tests/test_api_cfn_v1.py +++ b/heat/tests/test_api_cfn_v1.py @@ -597,7 +597,7 @@ class CfnStackControllerTest(HeatTestCase): result = self.controller.create(dummy_req) self.assertEqual(type(result), - exception.HeatInvalidParameterValueError) + exception.AlreadyExistsError) self.m.VerifyAll() def test_create_err_engine(self):