예제 #1
0
    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)
예제 #2
0
    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