def describe_stack_resource(self): stack_name = self._get_param('StackName') stack = self.cloudformation_backend.get_stack(stack_name) logical_resource_id = self._get_param('LogicalResourceId') if not stack: msg = ('Unable to find CloudFormation stack "%s" in region %s' % (stack_name, aws_stack.get_region())) if aws_stack.get_region() != self.region: msg = '%s/%s' % (msg, self.region) LOG.warning(msg) response = aws_responses.flask_error_response( msg, code=404, error_type='ResourceNotFoundException') return 404, response.headers, response.data for stack_resource in stack.stack_resources: # Note: Line below has been patched # if stack_resource.logical_resource_id == logical_resource_id: if stack_resource and stack_resource.logical_resource_id == logical_resource_id: resource = stack_resource break else: raise ValidationError(logical_resource_id) template = self.response_template( responses.DESCRIBE_STACK_RESOURCE_RESPONSE_TEMPLATE) return template.render(stack=stack, resource=resource)
def cf_describe_stack_events(self): stack_name = self._get_param('StackName') stack = self.cloudformation_backend.get_stack(stack_name) if not stack: raise ValidationError(stack_name, message='Unable to find stack "%s" in region %s' % (stack_name, aws_stack.get_region())) return cf_describe_stack_events_orig(self)
def cf_describe_stack_events(self): stack_name = self._get_param('StackName') backend = self.cloudformation_backend stack = backend.get_stack(stack_name) if not stack: # Also return stack events for deleted stacks, specified by stack name stack = ([stk for id, stk in backend.deleted_stacks.items() if stk.name == stack_name] or [0])[0] if not stack: raise ValidationError(stack_name, message='Unable to find stack "%s" in region %s' % (stack_name, aws_stack.get_region())) template = self.response_template(responses.DESCRIBE_STACK_EVENTS_RESPONSE) return template.render(stack=stack)
def describe_stack_resource(self): stack_name = self._get_param('StackName') stack = self.cloudformation_backend.get_stack(stack_name) logical_resource_id = self._get_param('LogicalResourceId') for stack_resource in stack.stack_resources: # Note: Line below has been patched # if stack_resource.logical_resource_id == logical_resource_id: if stack_resource and stack_resource.logical_resource_id == logical_resource_id: resource = stack_resource break else: raise ValidationError(logical_resource_id) template = self.response_template( responses.DESCRIBE_STACK_RESOURCE_RESPONSE_TEMPLATE) return template.render(stack=stack, resource=resource)