-# vim: tabstop = 4 shiftwidth=4 softtabstop=4
+# vim: tabstop=4 shiftwidth=4 softtabstop=4
# Copyright 2010 United States Government as represented by the
# Administrator of the National Aeronautics and Space Administration.
'WatchRuleNotFound',
'StackExists',
'StackValidationFailed',
+ 'InvalidTemplateReference',
)
denied_errors = ('Forbidden', 'NotAuthorized')
'InvalidTenant': exc.HTTPForbidden,
'StackExists': exc.HTTPConflict,
'StackValidationFailed': exc.HTTPBadRequest,
+ 'InvalidTemplateReference': exc.HTTPBadRequest,
}
Exc = error_map.get(ex.exc_type, exc.HTTPInternalServerError)
def __str__(self):
return '%s "%s"' % (self.__class__.__name__, self.name)
- def _add_dependencies(self, deps, fragment):
+ def _add_dependencies(self, deps, head, fragment):
if isinstance(fragment, dict):
for key, value in fragment.items():
if key in ('DependsOn', 'Ref'):
- target = self.stack.resources[value]
+ try:
+ target = self.stack.resources[value]
+ except KeyError:
+ raise exception.InvalidTemplateReference(
+ resource=value,
+ key=head)
if key == 'DependsOn' or target.strict_dependency:
deps += (self, target)
elif key != 'Fn::GetAtt':
- self._add_dependencies(deps, value)
+ self._add_dependencies(deps, key, value)
elif isinstance(fragment, list):
for item in fragment:
- self._add_dependencies(deps, item)
+ self._add_dependencies(deps, head, item)
def add_dependencies(self, deps):
- self._add_dependencies(deps, self.t)
+ self._add_dependencies(deps, None, self.t)
deps += (self, None)
def keystone(self):
self.m.VerifyAll()
def test_network_interface_error(self):
- self.assertRaises(
- KeyError,
+ real_exception = self.assertRaises(
+ exception.InvalidTemplateReference,
self.create_stack,
self.test_template_error)
+ expected_exception = exception.InvalidTemplateReference(
+ resource='INVALID-REF-IN-TEMPLATE',
+ key='GroupSet')
+
+ self.assertEquals(str(expected_exception), str(real_exception))
class InternetGatewayTest(VPCTestBase):