示例#1
0
    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)
示例#2
0
    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')
示例#3
0
文件: functions.py 项目: xglhjk6/heat
    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)
示例#4
0
文件: test_vpc.py 项目: vikomall/heat
    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))
示例#5
0
 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]
示例#6
0
 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
示例#7
0
 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)
示例#8
0
 def get_resource(res_name):
     if res_name not in stack:
         raise exception.InvalidTemplateReference(resource=res_name,
                                                  key=self.name)
     return stack[res_name]