'ValueError',
'InvalidTenant',
'StackNotFound',
+ 'StackExists',
)
if ex.exc_type in inval_param_errors:
'ValueError': client_error,
'StackNotFound': exc.HTTPNotFound,
'InvalidTenant': exc.HTTPForbidden,
+ 'StackExists': exc.HTTPConflict,
}
Exc = error_map.get(ex.exc_type, exc.HTTPInternalServerError)
class StackNotFound(OpenstackException):
message = _("The Stack (%(stack_name)s) could not be found.")
+
+
+class StackExists(OpenstackException):
+ message = _("The Stack (%(stack_name)s) already exists.")
logger.info('template is %s' % template)
if db_api.stack_get_by_name(context, stack_name):
- raise AttributeError('Stack already exists with that name')
+ raise exception.StackExists(stack_name=stack_name)
tmpl = parser.Template(template)
self.assertEqual(type(result),
exception.HeatInvalidParameterValueError)
+ def test_create_err_exists(self):
+ # Format a dummy request
+ stack_name = "wordpress"
+ template = {u'Foo': u'bar'}
+ json_template = json.dumps(template)
+ params = {'Action': 'CreateStack', 'StackName': stack_name,
+ 'TemplateBody': '%s' % json_template,
+ 'TimeoutInMinutes': 30,
+ 'Parameters.member.1.ParameterKey': 'InstanceType',
+ 'Parameters.member.1.ParameterValue': 'm1.xlarge'}
+ engine_parms = {u'InstanceType': u'm1.xlarge'}
+ engine_args = {'timeout_mins': u'30'}
+ dummy_req = self._dummy_GET_request(params)
+
+ # Insert an engine RPC error and ensure we map correctly to the
+ # heat exception type
+ self.m.StubOutWithMock(rpc, 'call')
+
+ rpc.call(dummy_req.context, self.topic,
+ {'method': 'create_stack',
+ 'args': {'stack_name': stack_name,
+ 'template': template,
+ 'params': engine_parms,
+ 'args': engine_args},
+ 'version': self.api_version}, None
+ ).AndRaise(rpc_common.RemoteError("StackExists"))
+
+ self.m.ReplayAll()
+
+ result = self.controller.create(dummy_req)
+
+ self.assertEqual(type(result),
+ exception.HeatInvalidParameterValueError)
+
def test_create_err_engine(self):
# Format a dummy request
stack_name = "wordpress"
req, tenant_id=self.tenant, body=body)
self.m.VerifyAll()
+ def test_create_err_existing(self):
+ stack_name = "wordpress"
+ template = {u'Foo': u'bar'}
+ parameters = {u'InstanceType': u'm1.xlarge'}
+ json_template = json.dumps(template)
+ body = {'template': template,
+ 'stack_name': stack_name,
+ 'parameters': parameters,
+ 'timeout_mins': 30}
+
+ req = self._post('/stacks', json.dumps(body))
+
+ self.m.StubOutWithMock(rpc, 'call')
+ rpc.call(req.context, self.topic,
+ {'method': 'create_stack',
+ 'args': {'stack_name': stack_name,
+ 'template': template,
+ 'params': parameters,
+ 'args': {'timeout_mins': 30}},
+ 'version': self.api_version},
+ None).AndRaise(rpc_common.RemoteError("StackExists"))
+ self.m.ReplayAll()
+
+ self.assertRaises(webob.exc.HTTPConflict,
+ self.controller.create,
+ req, tenant_id=self.tenant, body=body)
+ self.m.VerifyAll()
+
def test_create_err_engine(self):
stack_name = "wordpress"
template = {u'Foo': u'bar'}
self.ctx, 'wibble')
def test_stack_create_existing(self):
- self.assertRaises(AttributeError, self.man.create_stack,
+ self.assertRaises(exception.StackExists, self.man.create_stack,
self.ctx, self.stack_name, self.stack.t, {}, {})
def test_stack_by_name_tenants(self):