コード例 #1
0
    def validate(self):
        '''
        Validate that a parameter belongs to only one Parameter Group
        and that each parameter name references a valid parameter.
        '''
        LOG.debug('Validating Parameter Groups.')
        LOG.debug(self.parameter_names)
        if self.parameter_groups is not None:
            #Loop through groups and validate parameters
            grouped_parameters = []
            for group in self.parameter_groups:
                parameters = group.get(PARAMETERS)

                if parameters is None:
                    raise StackValidationFailed(
                        message=_('Parameters must be provided for '
                                  'each Parameter Group.'))

                for param in parameters:
                    #Check if param has been added to a previous group
                    if param in grouped_parameters:
                        raise StackValidationFailed(message=_(
                            'The %s parameter must be assigned to one '
                            'Parameter Group only.') % param)
                    else:
                        grouped_parameters.append(param)

                    #Check that grouped parameter references a valid Parameter
                    if param not in self.parameter_names:
                        raise StackValidationFailed(message=_(
                            'The Parameter name (%s) does not reference '
                            'an existing parameter.') % param)
コード例 #2
0
    def validate(self):
        '''
        http://docs.amazonwebservices.com/AWSCloudFormation/latest/\
        APIReference/API_ValidateTemplate.html
        '''
        # TODO(sdake) Should return line number of invalid reference

        # Check duplicate names between parameters and resources
        dup_names = set(self.parameters.keys()) & set(self.resources.keys())

        if dup_names:
            logger.debug("Duplicate names %s" % dup_names)
            raise StackValidationFailed(message="Duplicate names %s" %
                                        dup_names)

        for res in self:
            try:
                result = res.validate()
            except ServerError as ex:
                logger.exception(ex)
                raise ex
            except Exception as ex:
                logger.exception(ex)
                raise StackValidationFailed(message=str(ex))
            if result:
                raise StackValidationFailed(message=result)
コード例 #3
0
ファイル: parser.py プロジェクト: stavxyz/heat
    def validate(self):
        '''
        Validates the template.
        '''
        # TODO(sdake) Should return line number of invalid reference

        # Validate Parameter Groups
        parameter_groups = ParameterGroups(self.t)
        parameter_groups.validate()

        # Check duplicate names between parameters and resources
        dup_names = set(self.parameters.keys()) & set(self.keys())

        if dup_names:
            logger.debug(_("Duplicate names %s") % dup_names)
            raise StackValidationFailed(message=_("Duplicate names %s") %
                                        dup_names)

        for res in self.dependencies:
            try:
                result = res.validate()
            except exception.Error as ex:
                logger.exception(ex)
                raise ex
            except Exception as ex:
                logger.exception(ex)
                raise StackValidationFailed(
                    message=strutils.safe_decode(six.text_type(ex)))
            if result:
                raise StackValidationFailed(message=result)
コード例 #4
0
ファイル: parser.py プロジェクト: jordant/heat
    def validate(self):
        '''
        http://docs.amazonwebservices.com/AWSCloudFormation/latest/\
        APIReference/API_ValidateTemplate.html
        '''
        # TODO(sdake) Should return line number of invalid reference

        for res in self:
            try:
                result = res.validate()
            except Exception as ex:
                logger.exception(ex)
                raise StackValidationFailed(message=str(ex))
            if result:
                raise StackValidationFailed(message=result)
コード例 #5
0
    def validate(self):
        '''
        Validates the template.
        '''
        # TODO(sdake) Should return line number of invalid reference

        # validate overall template (top-level structure)
        self.t.validate()

        # Validate parameters
        self.parameters.validate(context=self.context)

        # Validate Parameter Groups
        parameter_groups = ParameterGroups(self.t)
        parameter_groups.validate()

        # Check duplicate names between parameters and resources
        dup_names = set(self.parameters.keys()) & set(self.keys())

        if dup_names:
            LOG.debug("Duplicate names %s" % dup_names)
            raise StackValidationFailed(message=_("Duplicate names %s") %
                                        dup_names)

        for res in self.dependencies:
            try:
                result = res.validate()
            except exception.HeatException as ex:
                LOG.info(ex)
                raise ex
            except Exception as ex:
                LOG.exception(ex)
                raise StackValidationFailed(
                    message=encodeutils.safe_decode(six.text_type(ex)))
            if result:
                raise StackValidationFailed(message=result)

            for val in self.outputs.values():
                snippet = val.get('Value', '')
                try:
                    function.validate(snippet)
                except Exception as ex:
                    reason = 'Output validation error: %s' % six.text_type(ex)
                    raise StackValidationFailed(message=reason)