def _add_dependencies(self, deps, path, fragment): if isinstance(fragment, dict): for key, value in fragment.items(): if key in ('DependsOn', 'Ref', 'Fn::GetAtt', 'get_attr', 'get_resource'): if key in ('Fn::GetAtt', 'get_attr'): res_name = value[0] res_list = [res_name] elif key == 'DependsOn' and isinstance(value, list): res_list = value else: res_list = [value] for res in res_list: try: target = self.stack[res] except KeyError: raise exception.InvalidTemplateReference( resource=res, key=path) if key == 'DependsOn' or target.strict_dependency: deps += (self, target) else: self._add_dependencies(deps, '%s.%s' % (path, key), value) elif isinstance(fragment, list): for index, item in enumerate(fragment): self._add_dependencies(deps, '%s[%d]' % (path, index), item)
def result(self): param_name = function.resolve(self.args) try: return self.parameters[param_name] except KeyError: raise exception.InvalidTemplateReference(resource=param_name, key='unknown')
def _resource(self, path='unknown'): resource_name = function.resolve(self._resource_name) try: return self.stack[resource_name] except KeyError: raise exception.InvalidTemplateReference(resource=resource_name, key=path)
def test_network_interface_error(self): 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))
def get_resource(res_name): if res_name not in stack: if res_name in stack.t.get(stack.t.RESOURCES): # The resource is conditionally defined, allow dependencies # on it return raise exception.InvalidTemplateReference(resource=res_name, key=self.name) return stack[res_name]
def get_resource(res_name): if res_name not in stack: if res_name in stack.defn.all_rsrc_names(): # The resource is conditionally defined, allow dependencies # on it return raise exception.InvalidTemplateReference(resource=res_name, key=self.name) res = stack[res_name] if getattr(res, 'strict_dependency', True): return res
def _add_dependencies(self, deps, head, fragment): if isinstance(fragment, dict): for key, value in fragment.items(): if key in ('DependsOn', 'Ref'): 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, key, value) elif isinstance(fragment, list): for item in fragment: self._add_dependencies(deps, head, item)
def get_resource(res_name): if res_name not in stack: raise exception.InvalidTemplateReference(resource=res_name, key=self.name) return stack[res_name]