Beispiel #1
0
    def _policy_to_acl_criteria(self, context, template_db, nfp_name,
                                vnf_mapping):
        template = template_db.template['vnffgd']['topology_template']
        nfp = template['node_templates'][nfp_name]
        try:
            policy = nfp['properties']['policy']
        except KeyError:
            raise nfvo.NfpPolicyNotFoundException(policy=nfp)

        if 'type' in policy:
            if policy['type'] != 'ACL':
                raise nfvo.NfpPolicyTypeError(type=policy['type'])

        if 'criteria' not in policy:
            raise nfvo.NfpPolicyCriteriaError(error="Missing criteria in "
                                              "policy")
        match = dict()
        for criteria in policy['criteria']:
            for key, val in criteria.items():
                if key in MATCH_CRITERIA:
                    match.update(
                        self._convert_criteria(context, key, val, vnf_mapping))
                else:
                    raise nfvo.NfpPolicyCriteriaError(error="Unsupported "
                                                      "criteria: "
                                                      "{}".format(key))
        return match
Beispiel #2
0
    def _convert_criteria(self, context, criteria, value, vnf_mapping):
        """Method is used to convert criteria to proper db value from template

        :param context: SQL session context
        :param criteria: input criteria name
        :param value: input value
        :param vnf_mapping: mapping of VNFD to VNF instances
        :return: converted dictionary
        """

        if criteria.endswith('_range'):
            prefix = criteria[:-6]
            criteria_min = prefix + "_min"
            criteria_max = prefix + "_max"
            try:
                min_val, max_val = value.split('-')
            except ValueError:
                raise nfvo.NfpPolicyCriteriaError(error="Range missing or "
                                                  "incorrect for "
                                                  "%s".format(criteria))
            return {criteria_min: int(min_val), criteria_max: int(max_val)}

        elif criteria.endswith('_name'):
            prefix = criteria[:-5]
            vnf_id = list(vnf_mapping.values())[0]
            new_value = self._vim_resource_name_to_id(context, prefix, value,
                                                      vnf_id)
            new_name = prefix + "_id"
            return {new_name: new_value}

        else:
            return {criteria: value}
Beispiel #3
0
    def _policy_to_acl_criteria(self, context, template_db, nfp_name,
                                vnf_mapping):
        template = template_db.template['vnffgd']['topology_template']
        nfp = template['node_templates'][nfp_name]
        try:
            policy = nfp['properties']['policy']
        except KeyError:
            raise nfvo.NfpPolicyNotFoundException(policy=nfp)

        if 'type' in policy:
            if policy['type'] != 'ACL':
                raise nfvo.NfpPolicyTypeError(type=policy['type'])

        if 'criteria' not in policy:
            raise nfvo.NfpPolicyCriteriaError(
                error="Missing criteria in policy")
        validation_list = []
        for item in policy['criteria']:
            if item.get('name') is None:
                LOG.warning('The unnamed classifier approach'
                            ' will be deprecated in subsequent'
                            ' releases')
                validation_list.append(item)
            else:
                validation_list.append(item['classifier'])

        self._validate_criteria(validation_list)

        classifiers = []
        for criteria in policy['criteria']:
            match = dict()
            if criteria.get('name') is None:
                criteria_dict = criteria.copy()
            else:
                criteria_dict = criteria['classifier'].copy()
            for key, val in criteria_dict.items():
                if key in MATCH_CRITERIA:
                    match.update(
                        self._convert_criteria(context, key, val, vnf_mapping))
                else:
                    raise nfvo.NfpPolicyCriteriaError(error="Unsupported "
                                                      "criteria: "
                                                      "{}".format(key))
            classifiers.append({'name': criteria.get('name'), 'match': match})

        return classifiers