예제 #1
0
    def check_if_l2Dom_in_correct_ent(self, nuage_l2dom_id, nuage_netpart):
        nuagesubn = nuagelib.NuageSubnet()
        resp_subn = self.restproxy.rest_call(
            'GET', nuagesubn.get_resource(nuage_l2dom_id), '')
        if not nuagesubn.validate(resp_subn):
            nuagel2dom = nuagelib.NuageL2Domain()
            response = self.restproxy.rest_call(
                'GET', nuagel2dom.get_resource(nuage_l2dom_id), '')
            if not nuagel2dom.validate(response):
                raise restproxy.RESTProxyError(nuagel2dom.error_msg)
            else:
                if response[3][0]['parentID'] == nuage_netpart['id']:
                    return True
                return False
        else:
            req_params = {'zone_id': resp_subn[3][0]['parentID']}
            nuagezone = nuagelib.NuageZone(create_params=req_params)
            resp_zone = self.restproxy.rest_call('GET',
                                                 nuagezone.get_resource(), '')

            if not nuagezone.validate(resp_zone):
                raise restproxy.RESTProxyError(nuagezone.error_msg)

            req_params = {'domain_id': resp_zone[3][0]['parentID']}
            nuage_l3domain = nuagelib.NuageL3Domain(create_params=req_params)
            dom_resp = self.restproxy.rest_call('GET',
                                                nuage_l3domain.get_resource(),
                                                '')

            if not nuage_l3domain.validate(dom_resp):
                raise restproxy.RESTProxyError(nuage_l3domain.error_msg)
            if dom_resp[3][0]['parentID'] == nuage_netpart['id']:
                return True
            return False
예제 #2
0
def get_nuage_zone_by_id(restproxy_serv, id):
    req_params = {'zone_id': id}
    nuage_zone = nuagelib.NuageZone(create_params=req_params)
    zone = restproxy_serv.get(nuage_zone.get_resource(), required=True)[0]
    return {
        'nuage_zone_id': zone['ID'],
        'nuage_parent_id': zone['parentID'],
        'nuage_external_id': zone['externalID']
    }
예제 #3
0
def _get_nuage_domain_id_from_subnet(restproxy_serv, nuage_subnet_id):
    nuagesubn = nuagelib.NuageSubnet()
    l3subnet = restproxy_serv.get(nuagesubn.get_resource(nuage_subnet_id),
                                  required=True)[0]
    nuage_zone_id = l3subnet['parentID']
    req_params = {'zone_id': nuage_zone_id}
    nuagezone = nuagelib.NuageZone(create_params=req_params)
    zone = restproxy_serv.get(nuagezone.get_resource(), required=True)[0]
    return zone['parentID']
예제 #4
0
def get_first_zone_by_nuage_router_id(restproxy_serv, nuage_router_id):
    req_params = {'domain_id': nuage_router_id}
    nuage_zone = nuagelib.NuageZone(req_params)

    response = restproxy_serv.rest_call('GET', nuage_zone.list_resource(), '')
    if not nuage_zone.validate(response):
        raise restproxy.RESTProxyError(nuage_zone.error_msg)

    for (counter, zone) in enumerate(nuage_zone.zone_list(response)):
        if counter == 0:
            ret = {'nuage_zone_id': zone['ID']}
            return ret
예제 #5
0
def get_domain_id_by_nuage_subnet_id(restproxy_serv, nuage_subn_id,
                                     required=False):
    nuagel3domsub = nuagelib.NuageSubnet()
    nuage_subn = restproxy_serv.get(
        nuagel3domsub.get_resource(nuage_subn_id), required=required)
    if not nuage_subn:
        return

    params = {'zone_id': nuage_subn[0]['parentID']}
    nuagezone = nuagelib.NuageZone(create_params=params)
    nuage_zones = restproxy_serv.get(nuagezone.get_resource(),
                                     required=required)
    return nuage_zones[0]['parentID'] if nuage_zones else None
예제 #6
0
def get_nuage_zone_by_id(restproxy_serv, id):
    req_params = {'zone_id': id}
    nuage_zone = nuagelib.NuageZone(create_params=req_params)
    response = restproxy_serv.rest_call('GET', nuage_zone.get_resource(), '')
    if not nuage_zone.validate(response):
        raise restproxy.RESTProxyError(nuage_zone.error_msg)

    if len(response[3]) > 0:
        ret = {
            'nuage_zone_id': response[3][0]['ID'],
            'nuage_parent_id': response[3][0]['parentID']
        }

        return ret
예제 #7
0
 def _create_domain(self, req_params, extra_params):
     nuage_l3domain = nuagelib.NuageL3Domain(create_params=req_params,
                                             extra_params=extra_params)
     created_domain = self.restproxy.post(nuage_l3domain.post_resource(),
                                          nuage_l3domain.post_data())[0]
     req_params = {'domain_id': created_domain['ID']}
     nuage_zone = nuagelib.NuageZone(req_params)
     zone_list = self.restproxy.get(nuage_zone.list_resource())
     if not zone_list:
         self.delete_l3domain(created_domain['ID'])
         msg = ("Cannot find zone under the created domain {} on VSD. "
                "Delete the created domain".format(created_domain['ID']))
         raise restproxy.ResourceNotFoundException(msg)
     return created_domain, zone_list
예제 #8
0
def _get_nuage_domain_id_from_subnet(restproxy_serv, nuage_subnet_id):
    nuagesubn = nuagelib.NuageSubnet()
    nuage_subnet = restproxy_serv.rest_call(
        'GET', nuagesubn.get_resource(nuage_subnet_id), '')
    if not nuagesubn.validate(nuage_subnet):
        raise restproxy.RESTProxyError(nuagesubn.error_msg)
    nuage_zone_id = nuagesubn.get_parentzone(nuage_subnet)

    req_params = {'zone_id': nuage_zone_id}
    nuagezone = nuagelib.NuageZone(create_params=req_params)
    nuage_zone = restproxy_serv.rest_call('GET', nuagezone.get_resource(), '')
    if not nuagezone.validate(nuage_zone):
        raise restproxy.RESTProxyError(nuagezone.error_msg)
    nuage_domain_id = nuagezone.get_response_parentid(nuage_zone)

    return nuage_domain_id
예제 #9
0
 def check_if_l2_dom_in_correct_ent(self, nuage_l2dom_id, nuage_netpart):
     nuagesubn = nuagelib.NuageSubnet()
     try:
         subnet = self.restproxy.get(nuagesubn.get_resource(nuage_l2dom_id),
                                     required=True)[0]
     except restproxy.ResourceNotFoundException:
         nuagel2dom = nuagelib.NuageL2Domain()
         l2_dom = self.restproxy.get(
             nuagel2dom.get_resource(nuage_l2dom_id), required=True)[0]
         return l2_dom['parentID'] == nuage_netpart['id']
     else:
         req_params = {'zone_id': subnet['parentID']}
         nuagezone = nuagelib.NuageZone(create_params=req_params)
         zone = self.restproxy.get(nuagezone.get_resource(),
                                   required=True)[0]
         req_params = {'domain_id': zone['parentID']}
         nuage_l3domain = nuagelib.NuageL3Domain(create_params=req_params)
         l3_dom = self.restproxy.get(nuage_l3domain.get_resource(),
                                     required=True)[0]
         return l3_dom['parentID'] == nuage_netpart['id']
예제 #10
0
    def create_l3domain(self, neutron_router, router, net_partition,
                        tenant_name):
        req_params = {
            'net_partition_id': net_partition['id'],
            'name': neutron_router['id'],
            'templateID': net_partition['l3dom_tmplt_id'],
            'externalID': get_vsd_external_id(neutron_router['id'])
        }
        if router.get('nuage_router_template'):
            req_params['templateID'] = router['nuage_router_template']

        extra_params = {
            'description': neutron_router['name']
        }
        if 'rd' in router and router['rd']:
            extra_params['routeDistinguisher'] = router['rd']
        if 'rt' in router and router['rt']:
            extra_params['routeTarget'] = router['rt']
        if router.get('tunnel_type'):
            neutron_tunnel_type = router['tunnel_type']
            vsd_types = constants.VSD_TUNNEL_TYPES
            extra_params['tunnelType'] = vsd_types[neutron_tunnel_type]
        if 'ecmp_count' in router:
            extra_params['ECMPCount'] = router.get('ecmp_count')
        if ('nuage_backhaul_vnid' in router and
                router['nuage_backhaul_vnid']):
            extra_params['backHaulVNID'] = router['nuage_backhaul_vnid']
        if ('nuage_backhaul_rd' in router and
                router['nuage_backhaul_rd']):
            extra_params['backHaulRouteDistinguisher'] = (
                router['nuage_backhaul_rd'])
        if ('nuage_backhaul_rt' in router and
                router['nuage_backhaul_rt']):
            extra_params['backHaulRouteTarget'] = router['nuage_backhaul_rt']

        # PATEnabled & UnderlayEnabled
        pat_enabled, underlay_enabled = self._calculate_pat_and_underlay(
            router)
        extra_params['PATEnabled'] = pat_enabled
        extra_params['underlayEnabled'] = underlay_enabled

        router_dict = {}
        nuagel3domain, zone_list = self._create_domain(req_params,
                                                       extra_params)
        nuage_domain_id = nuagel3domain['ID']
        external_id = nuagel3domain['externalID']
        parent_id = nuagel3domain['parentID']
        router_dict['nuage_external_id'] = strip_cms_id(external_id)
        router_dict['nuage_parent_id'] = parent_id
        router_dict['nuage_domain_id'] = nuage_domain_id
        router_dict['nuage_template_id'] = nuagel3domain.get('templateID')
        router_dict['rt'] = nuagel3domain.get('routeTarget')
        router_dict['rd'] = nuagel3domain.get('routeDistinguisher')
        router_dict['ecmp_count'] = nuagel3domain.get('ECMPCount')
        router_dict['tunnel_type'] = nuagel3domain.get('tunnelType')
        router_dict['nuage_backhaul_vnid'] = nuagel3domain.get('backHaulVNID')
        router_dict['nuage_backhaul_rd'] = (
            nuagel3domain.get('backHaulRouteDistinguisher'))
        router_dict['nuage_backhaul_rt'] = (
            nuagel3domain.get('backHaulRouteTarget'))

        isolated_id = None
        shared_id = None

        if router.get('nuage_router_template'):
            for zone in zone_list:
                if (zone['name'] == TEMPLATE_ISOLATED_ZONE and
                        not zone['publicZone']):
                    isolated_id = zone['ID']
                elif (zone['name'] == TEMPLATE_SHARED_ZONE and
                      not zone['publicZone']):
                    shared_id = zone['ID']
                external_id_params = {
                    'zone_id': zone['ID']
                }
                external_id_zone = nuagelib.NuageZone(
                    create_params=external_id_params)
                helper.set_external_id_only(
                    self.restproxy,
                    resource=external_id_zone.get_resource(),
                    id=neutron_router['id'])
            if not isolated_id or not shared_id:
                msg = ("Mandatory zones %s or %s do not exist in VSD" % (
                    TEMPLATE_ISOLATED_ZONE, TEMPLATE_SHARED_ZONE))
                self.delete_l3domain(nuage_domain_id)
                raise restproxy.ResourceNotFoundException(msg)
            router_dict['nuage_def_zone_id'] = isolated_id
            router_dict['nuage_shared_zone_id'] = shared_id
            self._make_nuage_zone_shared(net_partition['id'], shared_id,
                                         neutron_router['tenant_id'])
        elif net_partition.get('isolated_zone', None):
            for zone in zone_list:
                if zone['name'] == net_partition['isolated_zone']:
                    isolated_id = zone['ID']
                if zone['name'] == net_partition['shared_zone']:
                    shared_id = zone['ID']
                external_id_params = {
                    'zone_id': zone['ID']
                }
                external_id_zone = nuagelib.NuageZone(
                    create_params=external_id_params)
                helper.set_external_id_only(
                    self.restproxy,
                    resource=external_id_zone.get_resource(),
                    id=neutron_router['id'])
            if not isolated_id or not shared_id:
                msg = "Default zones do not exist in VSD"
                self.delete_l3domain(nuage_domain_id)
                raise restproxy.ResourceNotFoundException(msg)

            router_dict['nuage_def_zone_id'] = isolated_id
            router_dict['nuage_shared_zone_id'] = shared_id
            # TODO(Ronak) - Handle exception here
            self._make_nuage_zone_shared(net_partition['id'], shared_id,
                                         neutron_router['tenant_id'])

        nuage_userid, nuage_groupid = \
            helper.create_usergroup(self.restproxy,
                                    neutron_router['tenant_id'],
                                    net_partition['id'],
                                    tenant_name)
        router_dict['nuage_userid'] = nuage_userid
        router_dict['nuage_groupid'] = nuage_groupid

        self._attach_nuage_group_to_zone(nuage_groupid,
                                         router_dict['nuage_def_zone_id'],
                                         neutron_router['tenant_id'])
        iacl_id, oacl_id = self._create_nuage_def_l3domain_acl(
            nuage_domain_id, neutron_router['id'])
        router_dict['iacl_id'] = iacl_id
        router_dict['oacl_id'] = oacl_id
        self._create_nuage_def_l3domain_adv_fwd_template(nuage_domain_id,
                                                         neutron_router['id'])
        return router_dict
예제 #11
0
    def create_router(self, neutron_router, router, params):
        net_partition = params['net_partition']
        req_params = {
            'net_partition_id': net_partition['id'],
            'name': neutron_router['id'],
            'templateID': net_partition['l3dom_tmplt_id'],
            'externalID': get_vsd_external_id(neutron_router['id'])
        }
        if router['nuage_router_template']:
            req_params['templateID'] = router['nuage_router_template']

        extra_params = {'description': neutron_router['name']}
        if 'rd' in router.keys() and router['rd']:
            extra_params['routeDistinguisher'] = router['rd']
        if 'rt' in router.keys() and router['rt']:
            extra_params['routeTarget'] = router['rt']
        if router.get('tunnel_type'):
            neutron_tunnel_type = router['tunnel_type']
            vsd_types = constants.VSD_TUNNEL_TYPES
            extra_params['tunnelType'] = vsd_types[neutron_tunnel_type]
        if 'ecmp_count' in router:
            extra_params['ECMPCount'] = router.get('ecmp_count')
        if ('nuage_backhaul_vnid' in router.keys()
                and router['nuage_backhaul_vnid']):
            extra_params['backHaulVNID'] = router['nuage_backhaul_vnid']
        if ('nuage_backhaul_rd' in router.keys()
                and router['nuage_backhaul_rd']):
            extra_params['backHaulRouteDistinguisher'] = (
                router['nuage_backhaul_rd'])
        if ('nuage_backhaul_rt' in router.keys()
                and router['nuage_backhaul_rt']):
            extra_params['backHaulRouteTarget'] = router['nuage_backhaul_rt']

        # PATEnabled
        extra_params['PATEnabled'] = self._nuage_pat_enabled_or_disabled(
            router, params)
        extra_params['underlayEnabled'] = extra_params['PATEnabled']

        router_dict = {}
        nuagel3domain = nuagelib.NuageL3Domain(create_params=req_params,
                                               extra_params=extra_params)

        response = self.restproxy.rest_call('POST',
                                            nuagel3domain.post_resource(),
                                            nuagel3domain.post_data())
        if not nuagel3domain.validate(response):
            if not nuagel3domain.resource_exists(response):
                code = nuagel3domain.get_error_code(response)
                raise restproxy.RESTProxyError(nuagel3domain.error_msg,
                                               error_code=code)
            response = self.restproxy.rest_call(
                'GET',
                nuagel3domain.get_resource_with_ext_id(),
                '',
                extra_headers=nuagel3domain.extra_headers_get())
            if not nuagel3domain.get_validate(response):
                raise restproxy.RESTProxyError(nuagel3domain.error_msg)

        nuage_domain_id = nuagel3domain.get_domainid(response)
        external_id = nuagel3domain.get_response_externalid(response)
        parent_id = nuagel3domain.get_response_parentid(response)
        router_dict['nuage_external_id'] = strip_cms_id(external_id)
        router_dict['nuage_parent_id'] = parent_id
        router_dict['nuage_domain_id'] = nuage_domain_id
        router_dict['rt'] = nuagel3domain.get_domain_rt(response)
        router_dict['rd'] = nuagel3domain.get_domain_rd(response)
        router_dict['ecmp_count'] = nuagel3domain.get_domain_ecmp_count(
            response)
        router_dict['tunnel_type'] = nuagel3domain.get_domain_tunnel_type(
            response)
        router_dict['nuage_backhaul_vnid'] = (
            nuagel3domain.get_domain_backhaul_vnid(response))
        router_dict['nuage_backhaul_rd'] = (
            nuagel3domain.get_domain_backhaul_rd(response))
        router_dict['nuage_backhaul_rt'] = (
            nuagel3domain.get_domain_backhaul_rt(response))

        req_params = {'domain_id': nuage_domain_id}
        nuage_zone = nuagelib.NuageZone(req_params)
        response = self.restproxy.rest_call('GET', nuage_zone.list_resource(),
                                            '')
        if not nuage_zone.validate(response):
            self.delete_router(nuage_domain_id)
            raise restproxy.RESTProxyError(nuage_zone.error_msg)

        isolated_id = None
        shared_id = None

        if router['nuage_router_template'] is not None:
            for zone in nuage_zone.zone_list(response):
                if (zone['name'] == TEMPLATE_ISOLATED_ZONE
                        and not zone['publicZone']):
                    isolated_id = zone['ID']
                elif (zone['name'] == TEMPLATE_SHARED_ZONE
                      and not zone['publicZone']):
                    shared_id = zone['ID']
                external_id_params = {'zone_id': zone['ID']}
                external_id_zone = nuagelib.NuageZone(
                    create_params=external_id_params)
                helper.set_external_id_only(
                    self.restproxy,
                    resource=external_id_zone.get_resource(),
                    id=neutron_router['id'])
            if not isolated_id or not shared_id:
                msg = ("Mandatory zones %s or %s do not exist in VSD" %
                       (TEMPLATE_ISOLATED_ZONE, TEMPLATE_SHARED_ZONE))
                self.delete_router(nuage_domain_id)
                raise restproxy.RESTProxyError(msg)
            router_dict['nuage_def_zone_id'] = isolated_id
            router_dict['nuage_shared_zone_id'] = shared_id
            self._make_nuage_zone_shared(net_partition['id'], shared_id,
                                         params['tenant_id'])
        elif net_partition.get('isolated_zone', None):
            for zone in nuage_zone.zone_list(response):
                if zone['name'] == net_partition['isolated_zone']:
                    isolated_id = zone['ID']
                if zone['name'] == net_partition['shared_zone']:
                    shared_id = zone['ID']
                external_id_params = {'zone_id': zone['ID']}
                external_id_zone = nuagelib.NuageZone(
                    create_params=external_id_params)
                helper.set_external_id_only(
                    self.restproxy,
                    resource=external_id_zone.get_resource(),
                    id=neutron_router['id'])
            if not isolated_id or not shared_id:
                msg = "Default zones do not exist in VSD"
                self.delete_router(nuage_domain_id)
                raise restproxy.RESTProxyError(msg)

            router_dict['nuage_def_zone_id'] = isolated_id
            router_dict['nuage_shared_zone_id'] = shared_id
            # TODO(Ronak) - Handle exception here
            self._make_nuage_zone_shared(net_partition['id'], shared_id,
                                         params['tenant_id'])
        # TODO(Divya) - the following else block seems redudant, see if can
        # be removed
        else:
            router_dict['nuage_def_zone_id'] = nuage_zone.get_isolated_zone_id(
                response)
            external_id_params = {'zone_id': router_dict['nuage_def_zone_id']}
            external_id_zone = nuagelib.NuageZone(
                create_params=external_id_params)
            helper.set_external_id_only(
                self.restproxy,
                resource=external_id_zone.get_resource(),
                id=neutron_router['id'])
            shared_id = nuage_zone.get_shared_zone_id(response)
            external_id_zone['zone_id'] = shared_id
            external_id_zone = nuagelib.NuageZone(
                create_params=external_id_params)
            helper.set_external_id_only(
                self.restproxy,
                resource=external_id_zone.get_resource(),
                id=neutron_router['id'])
            self._make_nuage_zone_shared(net_partition['id'], shared_id,
                                         params['tenant_id'])

        nuage_userid, nuage_groupid = \
            helper.create_usergroup(self.restproxy, params['tenant_id'],
                                    params['net_partition']['id'])
        router_dict['nuage_userid'] = nuage_userid
        router_dict['nuage_groupid'] = nuage_groupid

        self._attach_nuage_group_to_zone(nuage_groupid,
                                         router_dict['nuage_def_zone_id'],
                                         params['tenant_id'])
        iacl_id, oacl_id = self._create_nuage_def_l3domain_acl(
            nuage_domain_id, neutron_router['id'])
        router_dict['iacl_id'] = iacl_id
        router_dict['oacl_id'] = oacl_id
        self._create_nuage_def_l3domain_adv_fwd_template(
            nuage_domain_id, neutron_router['id'])
        return router_dict