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)
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)
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")
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