Exemplo n.º 1
0
    def _validate_redirect_target_rule_priority(priority):
        try:
            val = int(priority)
        except (ValueError, TypeError):
            message = _("Invalid value for priority.")
            raise nuage_exc.NuageAPIException(msg=message)

        # VSD requires port number 0 not valid
        if 0 <= val <= 999999999:
            return
        else:
            message = _("Priority should be >=0 and <= 999999999")
            raise nuage_exc.NuageAPIException(msg=message)
Exemplo n.º 2
0
 def wrapped(*args, **kwargs):
     try:
         return fn(*args, **kwargs)
     except RESTProxyError as ex:
         _, _, tb = sys.exc_info()
         six.reraise(nuage_exc.NuageAPIException,
                     nuage_exc.NuageAPIException(msg=ex.message), tb)
Exemplo n.º 3
0
 def wrapped(*args, **kwargs):
     try:
         return fn(*args, **kwargs)
     except Exception as ex:
         if isinstance(ex, n_exc.NeutronException):
             raise
         et, ei, tb = sys.exc_info()
         raise nuage_exc.NuageAPIException, \
             nuage_exc.NuageAPIException(msg=ex), tb
    def delete_nuage_gateway_vport(self, context, nuage_vport_id,
                                   def_netpart_id):
        # Get the gw interface and vport info
        tenant_id = context.tenant_id
        resp = self.get_gateway_vport(context, tenant_id, None, nuage_vport_id)
        if not resp:
            return

        nuage_subnet_id = resp['nuage_subnet_id']
        subnet_info = nuagedb.get_subnet_info_by_nuage_id(
            context.session, nuage_subnet_id)
        if not subnet_info:
            raise nuage_exc.NuageAPIException(
                msg='No subnet info could not be retrieved')

        # Delete the interface and vport
        if resp['vport_type'] == constants.BRIDGE_VPORT_TYPE:
            if resp['interface']:
                # Delete interface
                gw_helper.delete_nuage_interface(self.restproxy,
                                                 resp['interface'],
                                                 constants.BRIDGE_VPORT_TYPE)
                LOG.debug("Deleted bridge interface %s", resp['interface'])
        elif resp['vport_type'] == constants.HOST_VPORT_TYPE:
            if resp['interface']:
                # Delete the policygroup and interface
                gw_helper.delete_nuage_interface(self.restproxy,
                                                 resp['interface'],
                                                 constants.HOST_VPORT_TYPE)
                LOG.debug("Deleted host interface %s", resp['interface'])

        # Delete the vport
        # if 'vport_type' is not None, then 'vport_id' is not None
        gw_helper.delete_nuage_vport(self.restproxy, resp['vport_id'])
        LOG.debug("Deleted vport %s", resp['vport_id'])
        # Remove Ent/Tenant permissions
        perms = self._get_ent_permissions(resp['vlanid'])
        if perms and perms['permittedEntityType'] == 'enterprise':
            netpart_id = perms['permittedEntityID']
        else:
            netpart_id = def_netpart_id
        if netpart_id != def_netpart_id:
            perm = gw_helper.get_tenant_perm(self.restproxy, resp['vlanid'])
            if perm:
                num_grps = self.remove_tenant_perm(resp['vlanid'],
                                                   perm['permittedEntityName'],
                                                   netpart_id)
                if num_grps == 0:
                    # Remove permissions for the enterprise if it exists
                    self.remove_ent_perm(resp['vlanid'])
                    LOG.debug("Deleted ent perissions on vlan %s",
                              resp['vlanid'])
        else:
            LOG.debug("Preserving ent permissions on default netpartition")
Exemplo n.º 5
0
    def wrapped(*args, **kwargs):
        try:
            return fn(*args, **kwargs)

        except RESTProxyError as e:
            _, _, tb = sys.exc_info()
            if e.code:  # there is a clear error code -> Bad request (400)
                # Reason we overwrite any VSD http error code to 400 is
                # that we don't want to reflect VSD behavior directly in
                # Neutron. E.g. 404 in Neutron refers to Neutron entity
                # not found ; we don't want VSD entity not found to be
                # reported same way. At least, that decision was made in
                # early days of Nuage.
                six.reraise(nuage_exc.NuageBadRequest,
                            nuage_exc.NuageBadRequest(msg=str(e)), tb)
            else:  # there is not --> Nuage API error (leading to 500)
                six.reraise(nuage_exc.NuageAPIException,
                            nuage_exc.NuageAPIException(msg=str(e)), tb)
    def get_gateway_vports(self, context, tenant_id, netpart_id, filters):
        subnet_id = filters['subnet'][0]
        nuage_subnet_id = filters['nuage_subnet_id'][0]
        # Get the nuage l2domain/subnet corresponding to neutron subnet
        # nuage_subnet_id passed in filters by plugin

        subnet_info = nuagedb.get_subnet_info_by_nuage_id(
            context.session, nuage_subnet_id)
        if not subnet_info:
            raise nuage_exc.NuageAPIException(
                msg='No subnet info could be retrieved')

        subnet_type = subnet_info['subnet_type']

        if 'id' in filters:
            # This is to get vport by id
            vport = gw_helper.get_nuage_vport(self.restproxy, filters['id'][0])

            # Return an empty list for neutronclient get_res_by_id_or_name()
            if not vport:
                return []

            if vport['parentID'] != nuage_subnet_id:
                return []

            vport_list = [vport]
        elif 'name' in filters:
            # This is to get vport by name
            vport = gw_helper.get_nuage_vport_by_name(self.restproxy,
                                                      nuage_subnet_id,
                                                      filters['name'][0],
                                                      subnet_type)

            # Return an empty list for neutronclient get_res_by_id_or_name()
            if not vport:
                return []

            if vport['parentID'] != nuage_subnet_id:
                return []

            vport_list = [vport]
        else:
            if subnet_type == constants.SUBNET:
                # Get all host/bridge vports
                vport_list = gw_helper.get_vports_for_subnet(
                    self.restproxy, nuage_subnet_id)
            else:
                # Get all host/bridge vports
                vport_list = gw_helper.get_vports_for_l2domain(
                    self.restproxy, nuage_subnet_id)

        resp_list = []
        for vport in vport_list:
            vport_type = vport['type']
            resp = dict()
            if vport_type in [
                    constants.HOST_VPORT_TYPE, constants.BRIDGE_VPORT_TYPE
            ]:
                resp['vport_id'] = vport['ID']
                resp['vport_type'] = vport_type
                resp['vport_name'] = vport['name']
                # Get the host/bridge interface
                nuage_interface = gw_helper.get_interface_by_vport(
                    self.restproxy, vport['ID'], vport_type)

                resp['port_id'] = None
                if nuage_interface:
                    resp['interface'] = nuage_interface['ID']
                    resp['port_id'] = strip_cms_id(
                        nuage_interface['externalID'])

                resp['subnet_id'] = subnet_id

                if not vport['VLANID']:
                    # Skip this vport as it does not have any vlan.
                    # This should never happen as if vport is created a vlan
                    # is always associated with it
                    continue

                # Get the gw interface
                nuage_vlan = gw_helper.get_gateway_port_vlan(
                    self.restproxy, vport['VLANID'])

                resp['nuage_vlan_id'] = nuage_vlan['ID']
                resp['gateway'] = nuage_vlan['gatewayID']
                resp['gatewayport'] = nuage_vlan['parentID']
                resp['value'] = nuage_vlan['value']

                resp_list.append(resp)

        if tenant_id:
            updated_vport_list = []
            for vport in resp_list:
                ent_perm = gw_helper.get_ent_permission_on_vlan(
                    self.restproxy, vport['nuage_vlan_id'])
                if ent_perm:
                    vlan_perm = self._check_tenant_perm(
                        vport['nuage_vlan_id'], tenant_id,
                        ent_perm['permittedEntityID'])
                    if vlan_perm:
                        updated_vport_list.append(vport)
            return updated_vport_list

        return resp_list