def create_vnffgd(self, context, vnffgd): template = vnffgd['vnffgd'] if 'vnffgd' not in template.get('template'): raise nfvo.VnffgdInvalidTemplate(template=template.get('template')) else: self.validate_tosca(template['template']['vnffgd']) temp = template['template']['vnffgd']['topology_template'] vnffg_name = list(temp['groups'].keys())[0] nfp_name = temp['groups'][vnffg_name]['members'][0] path = self._get_nfp_attribute(template['template'], nfp_name, 'path') prev_element = None known_forwarders = set() for element in path: if element.get('forwarder') in known_forwarders: if prev_element is not None and element.get('forwarder')\ != prev_element['forwarder']: raise nfvo.VnffgdDuplicateForwarderException( forwarder=element.get('forwarder')) elif prev_element is not None and element.get( 'capability') == prev_element['capability']: raise nfvo.VnffgdDuplicateCPException( cp=element.get('capability')) else: known_forwarders.add(element.get('forwarder')) prev_element = element return super(NfvoPlugin, self).create_vnffgd(context, vnffgd)
def validate_vnffgd_path(self, template): temp = template['vnffgd']['topology_template'] vnffg_name = list(temp['groups'].keys())[0] nfp_name = temp['groups'][vnffg_name]['members'][0] path = self._get_nfp_attribute(template, nfp_name, 'path') prev_element = None known_forwarders = set() for element in path: if element.get('forwarder') in known_forwarders: if prev_element is not None and element.get('forwarder') \ != prev_element['forwarder']: raise nfvo.VnffgdDuplicateForwarderException( forwarder=element.get('forwarder')) elif prev_element is not None and element.get( 'capability') == prev_element['capability']: raise nfvo.VnffgdDuplicateCPException( cp=element.get('capability')) else: known_forwarders.add(element.get('forwarder')) prev_element = element