Deleted Stack Fix and ValidationError for DescribeStacks.

* stop backed from trying to iterate over empty list of deleted stacks.
  * Update DescribeStacks to throw ValidationError if stack name or id doesn't exist.
This commit is contained in:
Joseph Lawson 2014-10-23 14:39:15 -04:00
parent e67ef8f038
commit 90191675a2
2 changed files with 27 additions and 4 deletions

View File

@ -1,6 +1,26 @@
from __future__ import unicode_literals
from boto.exception import BotoServerError
from jinja2 import Template
class UnformattedGetAttTemplateException(Exception):
description = 'Template error: resource {0} does not support attribute type {1} in Fn::GetAtt'
status_code = 400
class ValidationError(BotoServerError):
def __init__(self, name_or_id):
template = Template(STACK_DOES_NOT_EXIST_RESPONSE)
super(ValidationError, self).__init__(status=400, reason='Bad Request',
body=template.render(name_or_id=name_or_id))
STACK_DOES_NOT_EXIST_RESPONSE = """<ErrorResponse xmlns="http://cloudformation.amazonaws.com/doc/2010-05-15/">
<Error>
<Type>Sender</Type>
<Code>ValidationError</Code>
<Message>Stack:{{ name_or_id }} does not exist</Message>
</Error>
<RequestId>cf4c737e-5ae2-11e4-a7c9-ad44eEXAMPLE</RequestId>
</ErrorResponse>
"""

View File

@ -5,6 +5,7 @@ from moto.core import BaseBackend
from .parsing import ResourceMap, OutputMap
from .utils import generate_stack_id
from .exceptions import ValidationError
class FakeStack(object):
@ -50,10 +51,12 @@ class CloudFormationBackend(BaseBackend):
for stack in stacks:
if stack.name == name_or_stack_id or stack.stack_id == name_or_stack_id:
return [stack]
if self.deleted_stacks:
deleted_stacks = self.deleted_stacks.values()
for stack in deleted_stacks:
if stack.stack_id == name_or_stack_id:
return [stack]
raise ValidationError(name_or_stack_id)
else:
return stacks