Beispiel #1
0
    def get_subnet_by_netpart(self, netpart_id):
        nuagel2dom = nuagelib.NuageL2Domain({'net_partition_id': netpart_id})
        l2_doms = self.restproxy.get(nuagel2dom.get_all_resources_in_ent(),
                                     required=True)
        res = []
        for l2dom in l2_doms:
            # backend_l2domain for domain linked to shared infrastructure
            l2_backend_dom = l2dom
            shared_resource = l2dom['associatedSharedNetworkResourceID']
            if shared_resource:
                # find backend l2dom
                l2_backend_doms = self.restproxy.get(
                    nuagel2dom.get_resource(shared_resource), required=True)
                l2_backend_dom = l2_backend_doms[0]
            np_dict = dict()
            np_dict['name'] = l2dom['name']
            np_dict['ID'] = l2dom['ID']
            np_dict['net_partition_id'] = netpart_id
            np_dict['subnet_os_id'] = strip_cms_id(l2dom['externalID'])
            np_dict['dhcp_managed'] = l2_backend_dom['DHCPManaged']
            np_dict['IPType'] = l2_backend_dom['IPType']
            np_dict['ipv4_cidr'] = (str(
                netaddr.IPNetwork("{}/{}".format(l2_backend_dom['address'],
                                                 l2_backend_dom['netmask'])))
                                    if l2_backend_dom.get('address') else "")
            np_dict['IPv6Address'] = l2_backend_dom['IPv6Address']
            np_dict['ipv4_gateway'] = self.get_gw_from_dhcp_options(
                l2_backend_dom['ID'])
            np_dict['IPv6Gateway'] = l2_backend_dom['IPv6Gateway']
            np_dict['enableDHCPv4'] = l2_backend_dom['enableDHCPv4']
            np_dict['enableDHCPv6'] = l2_backend_dom['enableDHCPv6']

            res.append(np_dict)
        return res
Beispiel #2
0
def get_l2domain_np_id(restproxy_serv, l2dom_id):
    req_params = {
        'domain_id': l2dom_id
    }
    nuage_l2_domain = nuagelib.NuageL2Domain(create_params=req_params)
    return restproxy_serv.get(nuage_l2_domain.get_resource(l2dom_id),
                              required=True)[0]['parentID']
def delete_resources_created_for_l2dom_providernet(restproxy_serv, l2domid):
    nuagel2domain = nuagelib.NuageL2Domain()
    # Get bridge vport on given l2domain
    bridge_vports = restproxy_serv.rest_call(
        'GET', nuagel2domain.get_all_vports(l2domid), '',
        nuagel2domain.extra_headers_vport_get())
    if not nuagel2domain.validate(bridge_vports):
        raise restproxy.RESTProxyError(nuagel2domain.error_msg)

    # Delete bridge interface and bridge vport if it is subnet created for
    # provider net
    if bridge_vports and bridge_vports[VSD_RESP_OBJ]:
        nuage_vport = nuagelib.NuageVPort()
        bridge_vport = bridge_vports[VSD_RESP_OBJ][0]

        bridge_iface = restproxy_serv.rest_call(
            'GET', nuage_vport.post_bridge_interface(bridge_vport['ID']),
            '')
        if not nuage_vport.validate(bridge_iface):
            raise restproxy.RESTProxyError(nuage_vport.error_msg)

        if bridge_iface and bridge_iface[VSD_RESP_OBJ]:
            bridge_iface_id = bridge_iface[VSD_RESP_OBJ][0]['ID']
            restproxy_serv.rest_call(
                'DELETE',
                nuage_vport.del_bridge_interface(bridge_iface_id),
                '')

        # Delete bridge vport
        nuage_vport = nuagelib.NuageVPort({'vport_id': bridge_vport['ID']})
        restproxy_serv.delete(nuage_vport.delete_resource())

        # Delete vlan obj on gateway port
        delete_vlan_for_gw_port(restproxy_serv, bridge_vport)
    def get_subnet_by_netpart(self, netpart_id):
        nuagel2dom = nuagelib.NuageL2Domain({'net_partition_id': netpart_id})
        l2_doms = self.restproxy.get(nuagel2dom.get_all_resources_in_ent(),
                                     required=True)
        res = []
        for l2dom in l2_doms:
            np_dict = dict()
            np_dict['name'] = l2dom['name']
            np_dict['ID'] = l2dom['ID']
            np_dict['subnet_os_id'] = strip_cms_id(l2dom['externalID'])
            np_dict['dhcp_managed'] = l2dom['DHCPManaged']
            np_dict['IPType'] = l2dom['IPType']
            np_dict['ipv4_cidr'] = \
                str(netaddr.IPNetwork("{}/{}".format(l2dom['address'],
                                                     l2dom['netmask'])))\
                if l2dom.get('address') else ""
            np_dict['IPv6Address'] = l2dom['IPv6Address']
            np_dict['ipv4_gateway'] = \
                self.get_gw_from_dhcp_options(l2dom['ID'])
            np_dict['IPv6Gateway'] = l2dom['IPv6Gateway']
            np_dict['net_partition_id'] = netpart_id
            np_dict['enableDHCPv4'] = l2dom['enableDHCPv4']
            np_dict['enableDHCPv6'] = l2dom['enableDHCPv6']

            res.append(np_dict)
        return res
    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
 def update_l2domain(self, nuage_l2dom_id, **kwargs):
     # Generate payload for the update
     data = self._gen_payload_l2domain_and_template(**kwargs)
     if data:
         nuage_l2domain = nuagelib.NuageL2Domain()
         self.restproxy.put(nuage_l2domain.put_resource(nuage_l2dom_id),
                            data)
    def update_subnet(self, neutron_subnet, params):
        type = constants.NETWORK_TYPE_L3
        new_name = neutron_subnet.get('name')
        if params['type']:
            type = constants.NETWORK_TYPE_L2

        nuagedhcpoptions = dhcpoptions.NuageDhcpOptions(self.restproxy)
        nuagedhcpoptions.update_nuage_dhcp(neutron_subnet,
                                           parent_id=params['parent_id'],
                                           network_type=type)

        if type == constants.NETWORK_TYPE_L2 and 'dhcp_ip' in params:
            nuagel2domtemplate = nuagelib.NuageL2DomTemplate()
            if neutron_subnet.get('enable_dhcp'):
                # Enable dhcpmanaged on the l2domain template
                net = params['net']
                data = {
                    "DHCPManaged": neutron_subnet['enable_dhcp'],
                    "address": str(net.ip),
                    "netmask": str(net.netmask),
                    "gateway": params['dhcp_ip'],
                }
                response = self.restproxy.rest_call(
                    'PUT', nuagel2domtemplate.put_resource(params['type']),
                    data)
            else:
                # Disable dhcpmanaged on the l2domain template
                response = self.restproxy.rest_call(
                    'PUT', nuagel2domtemplate.put_resource(params['type']),
                    {'DHCPManaged': False})
            if not nuagel2domtemplate.validate(response):
                raise restproxy.RESTProxyError(nuagel2domtemplate.error_msg)
        if new_name:
            # update the description on the VSD for this subnet if required
            # If a subnet is updated from horizon, we get the name of the
            # subnet aswell in the subnet dict for update.
            if type == constants.NETWORK_TYPE_L2:
                nuagel2domain = nuagelib.NuageL2Domain()
                l2dom = self.restproxy.rest_call(
                    'GET', nuagel2domain.get_resource(params['parent_id']), '')
                if not nuagel2domain.validate(l2dom):
                    raise restproxy.RESTProxyError(nuagel2domain.error_msg)
                if nuagel2domain.get_description(l2dom) != new_name:
                    response = self.restproxy.rest_call(
                        'PUT', nuagel2domain.put_resource(params['parent_id']),
                        {'description': neutron_subnet['name']})
                    if not nuagel2domain.validate(response):
                        raise restproxy.RESTProxyError(nuagel2domain.error_msg)
            else:
                nuagesubn = nuagelib.NuageSubnet()
                l3dom = self.restproxy.rest_call(
                    'GET', nuagesubn.get_resource(params['parent_id']), '')
                if not nuagesubn.validate(l3dom):
                    raise restproxy.RESTProxyError(nuagesubn.error_msg)
                if nuagesubn.get_description(l3dom) != new_name:
                    response = self.restproxy.rest_call(
                        'PUT', nuagesubn.put_resource(params['parent_id']),
                        {'description': neutron_subnet['name']})
                    if not nuagesubn.validate(response):
                        raise restproxy.RESTProxyError(nuagesubn.error_msg)
Beispiel #8
0
 def vms_on_l2domain(self, l2dom_id):
     nuagel2dom = nuagelib.NuageL2Domain()
     response = self.restproxy.rest_call(
         'GET',
         nuagel2dom.vm_get_resource(l2dom_id),
         '')
     return nuagel2dom.vm_exists(response)
def get_nuage_subnet(restproxy_serv, subnet_mapping):
    if subnet_mapping is None:
        return None
    nuage_subnet_id = subnet_mapping["nuage_subnet_id"]
    if subnet_mapping['nuage_l2dom_tmplt_id']:
        resource_class = nuagelib.NuageL2Domain()
    else:
        resource_class = nuagelib.NuageSubnet()
    subnets = restproxy_serv.get(resource_class.get_resource(nuage_subnet_id))
    return subnets[0] if subnets else None
 def update_l2domain_for_stack_exchange(self, mapping, **data):
     nuagel2domtmplt = nuagelib.NuageL2DomTemplate()
     self.restproxy.put(
         nuagel2domtmplt.put_resource(mapping['nuage_l2dom_tmplt_id']),
         data)
     # update the description for l2domain
     nuagel2dom = nuagelib.NuageL2Domain()
     if data.get('description'):
         l2dom_data = {'description': data['description']}
         self.restproxy.put(
             nuagel2dom.put_resource(mapping['nuage_subnet_id']),
             l2dom_data)
Beispiel #11
0
def get_l2domain_np_id(restproxy_serv, l2dom_id):
    req_params = {'domain_id': l2dom_id}
    nuage_l2_domain = nuagelib.NuageL2Domain(create_params=req_params)
    response = restproxy_serv.rest_call('GET',
                                        nuage_l2_domain.get_resource(l2dom_id),
                                        '')

    if not nuage_l2_domain.validate(response):
        raise restproxy.RESTProxyError(nuage_l2_domain.error_msg)

    if response[3]:
        return response[3][0]['parentID']
Beispiel #12
0
 def nuage_vports_on_l2domain(self, l2dom_id, pnet_binding):
     nuagel2dom = nuagelib.NuageL2Domain()
     if pnet_binding:
         response = self.restproxy.rest_call(
             'GET',
             nuagel2dom.get_all_vports(l2dom_id),
             '',
             extra_headers=(
                 nuagel2dom.extra_headers_host_and_vm_vport_get()))
     else:
         response = self.restproxy.rest_call(
             'GET', nuagel2dom.get_all_vports(l2dom_id), '')
     return nuagel2dom.get_validate(response)
 def get_nuage_cidr(self, nuage_subnetid):
     nuagesubn = nuagelib.NuageSubnet()
     response = self.restproxy.rest_call(
         'GET', nuagesubn.get_resource(nuage_subnetid), '')
     if not nuagesubn.validate(response):
         nuagel2dom = nuagelib.NuageL2Domain()
         response = self.restproxy.rest_call(
             'GET', nuagel2dom.get_resource(nuage_subnetid), '')
         if not nuagel2dom.validate(response):
             raise restproxy.RESTProxyError(nuagel2dom.error_msg)
         return nuagel2dom.get_cidr_info(response)
     else:
         return nuagesubn.get_cidr_info(response)
 def get_subnet_by_netpart(self, netpart_id):
     nuagel2dom = nuagelib.NuageL2Domain({'net_partition_id': netpart_id})
     response = self.restproxy.rest_call(
         'GET', nuagel2dom.get_all_resources_in_ent(), '')
     if not nuagel2dom.validate(response):
         raise restproxy.RESTProxyError(nuagel2dom.error_msg)
     res = []
     for l2dom in nuagel2dom.get_response_objlist(response):
         np_dict = dict()
         np_dict['domain_name'] = l2dom['name']
         np_dict['domain_id'] = l2dom['ID']
         np_dict['subnet_os_id'] = strip_cms_id(l2dom['externalID'])
         res.append(np_dict)
     return res
Beispiel #15
0
def get_nuage_subnet(restproxy_serv, subnet_mapping):
    if subnet_mapping is None:
        return None
    params = {'externalID': get_vsd_external_id(subnet_mapping["subnet_id"])}
    nuage_subnet_id = subnet_mapping["nuage_subnet_id"]
    if subnet_mapping['nuage_l2dom_tmplt_id']:
        resource_class = nuagelib.NuageL2Domain(create_params=params)
    else:
        resource_class = nuagelib.NuageSubnet(create_params=params)
    try:
        response = restproxy_serv.get(
            resource_class.get_resource(nuage_subnet_id))
        return response[0]
    except restproxy.RESTProxyError:
        return None
 def get_gateway_ip_for_advsub(self, vsd_subnet):
     LOG.debug("vsdclient.get_gateway_ip_for_advsub() called")
     if vsd_subnet['type'] == constants.SUBNET:
         return vsd_subnet['gateway']
     else:
         nuagel2dom = nuagelib.NuageL2Domain()
         dhcpoptions = self.restproxy.get(
             nuagel2dom.dhcp_get_resource(vsd_subnet['ID']))
         # dhcp_port_exist will exist in case for adv. subnet when it is
         # set via rest call on VSD
         gw_ip = None
         for dhcpoption in dhcpoptions:
             if dhcpoption['type'] == constants.DHCP_ROUTER_OPTION:
                 gw_ip = nuagel2dom.get_gwIp_set_via_dhcp(dhcpoption)
         return gw_ip
    def attach_nuage_group_to_nuagenet(self, tenant, nuage_npid,
                                       nuage_subnetid, shared):
        nuage_uid, nuage_gid = helper.create_usergroup(self.restproxy, tenant,
                                                       nuage_npid)
        nuagesubn = nuagelib.NuageSubnet()
        nuagegroup = nuagelib.NuageGroup()

        if shared:
            # Get the id for grp 'everybody'
            params = {'net_partition_id': nuage_npid}
            nuagegroup = nuagelib.NuageGroup(create_params=params)
            response = self.restproxy.rest_call(
                'GET', nuagegroup.list_resource(), '',
                nuagegroup.extra_headers_get_for_everybody())
            if not nuagegroup.validate(response):
                raise restproxy.RESTProxyError(nuagegroup.error_msg)
            nuage_all_groupid = nuagegroup.get_groupid(response)

        response = self.restproxy. \
            rest_call('GET', nuagesubn.get_resource(nuage_subnetid),
                      '')
        if not nuagesubn.validate(response):
            nuagel2dom = nuagelib.NuageL2Domain()
            response = self.restproxy. \
                rest_call('GET', nuagel2dom.get_resource(nuage_subnetid),
                          '')
            if not nuagel2dom.validate(response):
                raise restproxy.RESTProxyError(nuagel2dom.error_msg)
            if shared:
                self.create_permission(nuage_subnetid,
                                       nuage_all_groupid,
                                       tenant,
                                       perm_on='l2domains')
            else:
                self.create_permission(nuage_subnetid,
                                       nuage_gid,
                                       tenant,
                                       perm_on='l2domains')
            return nuage_uid, nuage_gid
        else:
            if shared:
                self.create_permission(nuagesubn.get_parentzone(response),
                                       nuage_all_groupid, tenant)
            else:
                self.create_permission(nuagesubn.get_parentzone(response),
                                       nuage_gid, tenant)
            return nuage_uid, nuage_gid
 def get_l2domain_by_ext_id_and_cidr(self, subnet):
     params = {
         'externalID': helper.get_subnet_external_id(subnet),
         'cidr': netaddr.IPNetwork(subnet['cidr']),
         'ip_type': subnet['ip_version']
     }
     nuagel2domain = nuagelib.NuageL2Domain(create_params=params)
     l2domain = self.restproxy.get(
         nuagel2domain.get_all_resources(),
         extra_headers=nuagel2domain.extra_headers_ext_id_and_cidr_get())
     if l2domain:
         return l2domain[0]
     else:
         msg = ("Cannot find subnet with externalID {} and cidr {}"
                " in L2domains on VSD").format(params['externalID'],
                                               params['cidr'])
         raise restproxy.ResourceNotFoundException(msg)
    def detach_nuage_group_to_nuagenet(self, tenants, nuage_subnetid, shared):
        nuagesubn = nuagelib.NuageSubnet()

        response = self.restproxy.rest_call(
            'GET', nuagesubn.get_resource(nuage_subnetid), '')
        if not nuagesubn.validate(response):
            nuagel2dom = nuagelib.NuageL2Domain()
            response = self.restproxy.rest_call(
                'GET', nuagel2dom.get_resource(nuage_subnetid), '')
            if not nuagel2dom.validate(response):
                # This is the case where the VSD-Managed subnet is deleted
                # from VSD first and then neutron subnet-delete operation
                # is performed from openstack
                # for both l2/l3 case we'll return form here
                return
            params = {'l2dom_id': nuage_subnetid}
            nuagepermission = nuagelib.NuagePermission(create_params=params)
            resource = nuagepermission.get_resource_by_l2dom_id()
        else:
            zone_id = nuagesubn.get_parentzone(response)
            params = {'zone_id': zone_id}
            nuagepermission = nuagelib.NuagePermission(create_params=params)
            resource = nuagepermission.get_resource_by_zone_id()
            nuage_dom = helper.get_nuage_domain_by_zoneid(
                self.restproxy, zone_id)

            if nuage_dom['externalID']:
                # The perm. attached to the zone when the router is deleted
                # from openstack
                return

        response = self.restproxy.rest_call('GET', resource, '')
        if not nuagepermission.validate(response):
            if response[0] == constants.RES_NOT_FOUND:
                return
            raise restproxy.RESTProxyError(nuagepermission.error_msg,
                                           nuagepermission.vsd_error_code)

        permissions = response[3]
        if shared:
            tenants.append("Everybody")
        for permission in permissions:
            if permission['permittedEntityName'] in tenants:
                self.restproxy.delete(
                    nuagepermission.delete_resource(permission['ID']))
Beispiel #20
0
def get_l2domain_fields_for_pg(restproxy_serv, l2dom_id, fields):
    """This method will fetch an l2domain even if it is MARKED_FOR_DELETION.

    Policygroup code actulally needs this because it is the only way to find
    the netpartition for a given policygroup when the policygroup is part of
    such a marked l2domain.
    """
    nuage_l2_domain = nuagelib.NuageL2Domain()

    response = restproxy_serv._get_ignore_marked_for_deletion(
        nuage_l2_domain.get_resource(l2dom_id))

    l2dom = {}
    if response:
        for field in fields:
            l2dom[field] = response[0][field]

    return l2dom
    def detach_nuage_group_to_nuagenet(self, tenants, nuage_subnetid, shared):
        nuagesubn = nuagelib.NuageSubnet()

        try:
            subnet = self.restproxy.get(nuagesubn.get_resource(nuage_subnetid),
                                        required=True)[0]
        except restproxy.ResourceNotFoundException:
            nuagel2dom = nuagelib.NuageL2Domain()
            try:
                self.restproxy.get(nuagel2dom.get_resource(nuage_subnetid),
                                   required=True)
            except restproxy.ResourceNotFoundException:
                # This is the case where the VSD-Managed subnet is deleted
                # from VSD first and then neutron subnet-delete operation
                # is performed from openstack
                # for both l2/l3 case we'll return form here
                return
            params = {'l2dom_id': nuage_subnetid}
            nuagepermission = nuagelib.NuagePermission(create_params=params)
            resource = nuagepermission.get_resource_by_l2dom_id()
        else:
            zone_id = subnet['parentID']
            params = {'zone_id': zone_id}
            nuagepermission = nuagelib.NuagePermission(create_params=params)
            resource = nuagepermission.get_resource_by_zone_id()
            nuage_dom = helper.get_nuage_domain_by_zoneid(
                self.restproxy, zone_id)
            if nuage_dom['externalID']:
                # The perm. attached to the zone when the router is deleted
                # from openstack
                return
        try:
            permissions = self.restproxy.get(resource, required=True)
        except restproxy.ResourceNotFoundException as e:
            if e.code == constants.RES_NOT_FOUND:
                return
            raise nuagepermission.get_rest_proxy_error()

        if shared:
            tenants.append("Everybody")
        for permission in permissions:
            if permission['permittedEntityName'] in tenants:
                self.restproxy.delete(
                    nuagepermission.delete_resource(permission['ID']))
 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']
Beispiel #23
0
def get_subnet_by_externalID(restproxy_serv, subnet_id):
    req_params = {'externalID': get_vsd_external_id(subnet_id)}
    nuage_subnet = None
    nuage_l2_domain = nuagelib.NuageL2Domain(create_params=req_params)
    response = restproxy_serv.rest_call('GET',
                                        nuage_l2_domain.get_all_resources(),
                                        '',
                                        nuage_l2_domain.extra_headers_get())

    if nuage_l2_domain.get_validate(response):
        nuage_subnet = nuage_l2_domain.get_response_obj(response)
        nuage_subnet['type'] = constants.L2DOMAIN
    else:
        nuage_domainsubn = nuagelib.NuageSubnet(create_params=req_params)
        response = restproxy_serv.rest_call(
            'GET', nuage_domainsubn.get_all_resources(), '',
            nuage_l2_domain.extra_headers_get())
        if nuage_domainsubn.get_validate(response):
            nuage_subnet = nuage_domainsubn.get_response_obj(response)
            nuage_subnet['type'] = constants.SUBNET
    return nuage_subnet
    def delete_subnet(self, id):
        params = {'externalID': get_vsd_external_id(id)}
        nuagel2domain = nuagelib.NuageL2Domain(create_params=params)
        response = self.restproxy.rest_call(
            'GET',
            nuagel2domain.get_resource_with_ext_id(),
            '',
            extra_headers=nuagel2domain.extra_headers_get())

        if nuagel2domain.get_validate(response):
            nuagel2domtemplates = nuagelib.NuageL2DomTemplate()
            template_id = nuagel2domain.get_template_id(response)
            resp_temp = self.restproxy.rest_call(
                'GET', nuagel2domtemplates.get_resource(template_id), '')
            if not nuagel2domtemplates.validate(resp_temp):
                raise restproxy.RESTProxyError(nuagel2domtemplates.error_msg)
            l2domain_id = nuagel2domain.get_domainid(response)

            try:
                # Delete bridge_interface and bridge vport if it is subnet
                # created for providernet
                pnet_helper.delete_resources_created_for_l2dom_providernet(
                    self.restproxy, l2domain_id)
                # delete subnet
                l2dom_delete_response = self.restproxy.rest_call(
                    'DELETE', nuagel2domain.delete_resource(l2domain_id), '')
                if not nuagel2domain.delete_validate(l2dom_delete_response):
                    code = nuagel2domain.get_error_code(l2dom_delete_response)
                    raise restproxy.RESTProxyError(nuagel2domain.error_msg,
                                                   error_code=code)
            except Exception:
                raise

            if response[3][0]['name'] == resp_temp[3][0]['name']:
                try:
                    self.restproxy.rest_call(
                        'DELETE',
                        nuagel2domtemplates.delete_resource(template_id), '')
                except Exception:
                    raise
    def attach_nuage_group_to_nuagenet(self, tenant, nuage_npid,
                                       nuage_subnetid, shared, tenant_name):
        nuage_uid, nuage_gid = helper.create_usergroup(self.restproxy, tenant,
                                                       nuage_npid, tenant_name)
        nuagesubn = nuagelib.NuageSubnet()

        if shared:
            # Get the id for grp 'everybody'
            params = {'net_partition_id': nuage_npid}
            nuagegroup = nuagelib.NuageGroup(create_params=params)
            groups = self.restproxy.get(
                nuagegroup.list_resource(),
                extra_headers=nuagegroup.extra_headers_get_for_everybody(),
                required=True)
            nuage_all_groupid = groups[0]['ID'] if groups else None
        try:
            subnet = self.restproxy.get(nuagesubn.get_resource(nuage_subnetid),
                                        required=True)[0]
        except restproxy.ResourceNotFoundException:
            nuagel2dom = nuagelib.NuageL2Domain()
            self.restproxy.get(nuagel2dom.get_resource(nuage_subnetid),
                               required=True)
            if shared:
                self.create_permission(nuage_subnetid,
                                       nuage_all_groupid,
                                       tenant,
                                       perm_on='l2domains')
            else:
                self.create_permission(nuage_subnetid,
                                       nuage_gid,
                                       tenant,
                                       perm_on='l2domains')
            return nuage_uid, nuage_gid
        else:
            if shared:
                self.create_permission(subnet['parentID'], nuage_all_groupid,
                                       tenant)
            else:
                self.create_permission(subnet['parentID'], nuage_gid, tenant)
            return nuage_uid, nuage_gid
    def delete_subnet(self, l2dom_id, mapping):
        nuagel2domain = nuagelib.NuageL2Domain()
        l2dom = self.restproxy.get(nuagel2domain.get_resource(l2dom_id))[0]
        nuagel2domtemplate = nuagelib.NuageL2DomTemplate()
        if l2dom:
            template_id = l2dom['templateID']
            template = self.restproxy.get(
                nuagel2domtemplate.get_resource(template_id))[0]
            l2domain_id = l2dom['ID']

            # delete subnet
            self.restproxy.delete(nuagel2domain.delete_resource(l2domain_id))

            if template and l2dom['name'] == template['name']:
                self.restproxy.delete(
                    nuagel2domtemplate.delete_resource(template_id))

        elif mapping and mapping['nuage_l2dom_tmplt_id']:
            # Delete hanging l2dom_template
            self.restproxy.delete(
                nuagel2domtemplate.delete_resource(
                    mapping['nuage_l2dom_tmplt_id']))
Beispiel #27
0
def get_nuage_vport_by_neutron_id(restproxy_serv, params, required=True):
    req_params = {'externalID': get_vsd_external_id(params['neutron_port_id'])}
    l2domid = params.get('l2dom_id')
    l3domid = params.get('l3dom_id')
    vports = ''

    if l2domid:
        nuagel2domain = nuagelib.NuageL2Domain(create_params=req_params)
        vports = restproxy_serv.get(
            nuagel2domain.get_all_vports(l2domid),
            extra_headers=nuagel2domain.extra_headers_get())

    if not vports and l3domid:
        nuagel3domsub = nuagelib.NuageSubnet(create_params=req_params)
        vports = restproxy_serv.get(
            nuagel3domsub.get_all_vports(l3domid),
            extra_headers=nuagel3domsub.extra_headers_get())

    if not vports and required:
        raise restproxy.ResourceNotFoundException(
            "vport for port '%s' not found" % params['neutron_port_id'])
    return vports[0] if vports else None
    def create_subnet(self, ipv4_subnet, ipv6_subnet, params):
        subnet = ipv4_subnet or ipv6_subnet
        req_params = {
            'net_partition_id': params['netpart_id'],
            'name': helper.get_subnet_name(subnet)
        }
        ext_params = {
            'externalID': helper.get_subnet_external_id(subnet),
            'DHCPManaged': True,
            'dualStackDynamicIPAllocation': False
        }

        if ipv4_subnet:
            net = netaddr.IPNetwork(ipv4_subnet['cidr'])
            ext_params.update({
                'address': str(net.ip),
                'netmask': str(net.netmask),
                'gateway': params['dhcp_ip'],
                'IPType': constants.IPV4,
                'enableDHCPv4': ipv4_subnet['enable_dhcp']
            })
        elif ipv6_subnet:
            net = netaddr.IPNetwork(ipv6_subnet['cidr'])
            ext_params.update({
                'IPv6Address': str(net.cidr),
                'IPv6Gateway': params['dhcpv6_ip'],
                'IPType': constants.IPV6,
                'enableDHCPv6': ipv6_subnet['enable_dhcp']
            })
        if ipv4_subnet and ipv6_subnet:
            params.update({'network_id': subnet['network_id']})
            ext_params.update(
                helper.get_subnet_update_data(ipv4_subnet=ipv4_subnet,
                                              ipv6_subnet=ipv6_subnet,
                                              params=params))
        if not ext_params.get('description'):
            ext_params['description'] = helper.get_subnet_description(subnet)

        nuagel2domtmplt = nuagelib.NuageL2DomTemplate(create_params=req_params,
                                                      extra_params=ext_params)
        nuagel2domtemplate = self.restproxy.post(
            nuagel2domtmplt.post_resource(),
            nuagel2domtmplt.post_data(),
            on_res_exists=self.restproxy.retrieve_by_ext_id_and_cidr)[0]

        l2dom_tmplt_id = nuagel2domtemplate['ID']

        req_params['template'] = l2dom_tmplt_id
        req_params['externalID'] = ext_params['externalID']

        ext_params = {
            'address': ext_params.get('address'),
            'IPv6Address': ext_params.get('IPv6Address'),
            'description': ext_params['description'],
            'IPType': ext_params['IPType'],
            'ingressReplicationEnabled': params['ingressReplicationEnabled']
        }

        if (params.get('tunnelType') == constants.VSD_TUNNEL_TYPES['MPLS']):
            ext_params['l2EncapType'] = constants.VSD_TUNNEL_TYPES['MPLS']

        nuagel2domain = nuagelib.NuageL2Domain(create_params=req_params,
                                               extra_params=ext_params)
        try:
            l2domain = self.restproxy.post(
                nuagel2domain.post_resource(),
                nuagel2domain.post_data(),
                on_res_exists=self.restproxy.retrieve_by_ext_id_and_cidr)[0]
        except Exception:
            self.restproxy.delete(
                nuagel2domtmplt.delete_resource(nuagel2domtemplate['ID']))
            raise

        l2domain_id = l2domain['ID']
        subnet_dict = {
            'nuage_l2template_id': l2dom_tmplt_id,
            'nuage_l2domain_id': l2domain_id,
            'nuage_external_id': strip_cms_id(l2domain['externalID']),
            'nuage_parent_id': l2domain['parentID']
        }

        nuagedhcpoptions = dhcpoptions.NuageDhcpOptions(self.restproxy)
        if ipv4_subnet:
            nuagedhcpoptions.create_nuage_dhcp(
                ipv4_subnet,
                parent_id=l2domain_id,
                network_type=constants.NETWORK_TYPE_L2)
        if ipv6_subnet:
            nuagedhcpoptions.create_nuage_dhcp(
                ipv6_subnet,
                parent_id=l2domain_id,
                network_type=constants.NETWORK_TYPE_L2)

        nuage_userid, nuage_groupid = helper.create_usergroup(
            self.restproxy, params['tenant_id'], params['netpart_id'],
            params.get('tenant_name'))
        subnet_dict['nuage_userid'] = nuage_userid
        subnet_dict['nuage_groupid'] = nuage_groupid

        self._attach_nuage_group_to_l2domain(nuage_groupid, l2domain_id,
                                             params['netpart_id'],
                                             params.get('shared'),
                                             params['tenant_id'])
        self._create_nuage_def_l2domain_acl(
            l2domain_id, subnet, allow_non_ip=params['allow_non_ip'])
        self._create_nuage_def_l2domain_adv_fwd_template(l2domain_id, subnet)

        return subnet_dict
 def get_subnet_by_id(self, nuage_id):
     nuagel2dom = nuagelib.NuageL2Domain()
     return self.restproxy.get(nuagel2dom.get_resource(nuage_id),
                               required=True)[0]
 def get_gw_from_dhcp_options(self, nuage_id):
     l2domain = nuagelib.NuageL2Domain()
     dhcpoptions = self.restproxy.get(l2domain.dhcp_get_resource(nuage_id))
     for dhcpoption in dhcpoptions:
         if dhcpoption['type'] == constants.DHCP_ROUTER_OPTION:
             return l2domain.get_gwIp_set_via_dhcp(dhcpoption)