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
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}
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