def plug_interface(self, tenant_id, netw_id, portw_id, remote_interface_id): """ Attaches a remote interface to the specified port on the specified Virtual Network. :returns: None :raises: exception.NetworkNotFound :raises: exception.PortNotFound :raises: exception.AlreadyAttached (? should the network automatically unplug/replug) """ if not nvplib.check_tenant(self.controller, netw_id, tenant_id): raise exception.NetworkNotFound(net_id=netw_id) result = nvplib.plug_interface( self.controller, netw_id, portw_id, "VifAttachment", attachment=remote_interface_id ) LOG.debug("plug_interface() completed for %s: %s" % (tenant_id, result))
def plug_interface(self, tenant_id, netw_id, portw_id, remote_interface_id): """ Attaches a remote interface to the specified port on the specified Virtual Network. :returns: None :raises: exception.NetworkNotFound :raises: exception.PortNotFound :raises: exception.AlreadyAttached (? should the network automatically unplug/replug) """ if not nvplib.check_tenant(self.controller, netw_id, tenant_id): raise exception.NetworkNotFound(net_id=netw_id) result = nvplib.plug_interface(self.controller, netw_id, portw_id, "VifAttachment", attachment=remote_interface_id) LOG.debug("plug_interface() completed for %s: %s" % (tenant_id, result))
def create_port(self, context, port): """ Creates a port on the specified Virtual Network. Returns: {"id": uuid represeting the port. "network_id": uuid of network. "tenant_id": tenant_id "mac_address": mac address to use on this port. "admin_state_up": Sets admin state of port. if down, port does not forward packets. "status": dicates whether port is currently operational (limit values to "ACTIVE", "DOWN", "BUILD", and "ERROR"?) "fixed_ips": list of subnet ID's and IP addresses to be used on this port "device_id": identifies the device (e.g., virtual server) using this port. } :raises: exception.NetworkNotFound :raises: exception.StateInvalid """ # Set admin_state_up False since not created in NVP set port["port"]["admin_state_up"] = False # First we allocate port in quantum database try: quantum_db = super(NvpPluginV2, self).create_port(context, port) except Exception as e: raise e # Update fields obtained from quantum db port["port"].update(quantum_db) # We want port to be up in NVP port["port"]["admin_state_up"] = True params = {} params["max_lp_per_bridged_ls"] = \ self.nvp_opts["max_lp_per_bridged_ls"] params["port"] = port["port"] params["clusters"] = self.clusters tenant_id = self._get_tenant_id_for_create(context, port["port"]) try: port["port"], nvp_port_id = nvplib.create_port(tenant_id, **params) nvplib.plug_interface(self.clusters, port["port"]["network_id"], nvp_port_id, "VifAttachment", port["port"]["id"]) except Exception as e: # failed to create port in NVP delete port from quantum_db super(NvpPluginV2, self).delete_port(context, port["port"]["id"]) raise e d = {"port-id": port["port"]["id"], "port-op-status": port["port"]["status"]} LOG.debug("create_port() completed for tenant %s: %s" % (tenant_id, d)) # update port with admin_state_up True port_update = {"port": {"admin_state_up": True}} return super(NvpPluginV2, self).update_port(context, port["port"]["id"], port_update)
def create_port(self, context, port): """ Creates a port on the specified Virtual Network. Returns: {"id": uuid represeting the port. "network_id": uuid of network. "tenant_id": tenant_id "mac_address": mac address to use on this port. "admin_state_up": Sets admin state of port. if down, port does not forward packets. "status": dicates whether port is currently operational (limit values to "ACTIVE", "DOWN", "BUILD", and "ERROR") "fixed_ips": list of subnet ID's and IP addresses to be used on this port "device_id": identifies the device (e.g., virtual server) using this port. } :raises: exception.NetworkNotFound :raises: exception.StateInvalid """ tenant_id = self._get_tenant_id_for_create(context, port['port']) # Set admin_state_up False since not created in NVP set # TODO(salvatore-orlando) : verify whether subtransactions can help # us avoiding multiple operations on the db. This might also allow # us to use the same identifier for the NVP and the Quantum port # Set admin_state_up False since not created in NVP yet port["port"]["admin_state_up"] = False # First we allocate port in quantum database quantum_db = super(NvpPluginV2, self).create_port(context, port) # Update fields obtained from quantum db (eg: MAC address) port["port"].update(quantum_db) # We want port to be up in NVP port["port"]["admin_state_up"] = True port_data = port['port'] # Fetch the network and network binding from Quantum db network = self._get_network(context, port_data['network_id']) network_binding = nicira_db.get_network_binding( context.session, port_data['network_id']) max_ports = self.nvp_opts.max_lp_per_overlay_ls allow_extra_lswitches = False if (network_binding and network_binding.binding_type in (NetworkTypes.FLAT, NetworkTypes.VLAN)): max_ports = self.nvp_opts.max_lp_per_bridged_ls allow_extra_lswitches = True try: q_net_id = port_data['network_id'] cluster = self._find_target_cluster(port_data) selected_lswitch = self._handle_lswitch_selection( cluster, network, network_binding, max_ports, allow_extra_lswitches) lswitch_uuid = selected_lswitch['uuid'] lport = nvplib.create_lport(cluster, lswitch_uuid, port_data['tenant_id'], port_data['id'], port_data['name'], port_data['device_id'], port_data['admin_state_up'], port_data['mac_address'], port_data['fixed_ips']) # Get NVP ls uuid for quantum network nvplib.plug_interface(cluster, selected_lswitch['uuid'], lport['uuid'], "VifAttachment", port_data['id']) except nvp_exc.NvpNoMorePortsException as e: LOG.error(_("Number of available ports for network %s exhausted"), port_data['network_id']) super(NvpPluginV2, self).delete_port(context, port["port"]["id"]) raise e except Exception: # failed to create port in NVP delete port from quantum_db err_msg = _("An exception occured while plugging the interface " "in NVP for port %s") % port_data['id'] LOG.exception(err_msg) super(NvpPluginV2, self).delete_port(context, port["port"]["id"]) raise nvp_exc.NvpPluginException(err_desc=err_msg) LOG.debug(_("create_port completed on NVP for tenant %(tenant_id)s: " "(%(id)s)") % port_data) # update port on Quantum DB with admin_state_up True port_update = {"port": {"admin_state_up": True}} return super(NvpPluginV2, self).update_port(context, port["port"]["id"], port_update)
def create_port(self, context, port): """ Creates a port on the specified Virtual Network. Returns: {"id": uuid represeting the port. "network_id": uuid of network. "tenant_id": tenant_id "mac_address": mac address to use on this port. "admin_state_up": Sets admin state of port. if down, port does not forward packets. "status": dicates whether port is currently operational (limit values to "ACTIVE", "DOWN", "BUILD", and "ERROR"?) "fixed_ips": list of subnet ID's and IP addresses to be used on this port "device_id": identifies the device (e.g., virtual server) using this port. } :raises: exception.NetworkNotFound :raises: exception.StateInvalid """ # Set admin_state_up False since not created in NVP set port["port"]["admin_state_up"] = False # First we allocate port in quantum database try: quantum_db = super(NvpPluginV2, self).create_port(context, port) except Exception as e: raise e # Update fields obtained from quantum db port["port"].update(quantum_db) # We want port to be up in NVP port["port"]["admin_state_up"] = True params = {} params["max_lp_per_bridged_ls"] = \ self.nvp_opts["max_lp_per_bridged_ls"] params["port"] = port["port"] params["clusters"] = self.clusters tenant_id = self._get_tenant_id_for_create(context, port["port"]) try: port["port"], nvp_port_id = nvplib.create_port(tenant_id, **params) nvplib.plug_interface(self.clusters, port["port"]["network_id"], nvp_port_id, "VifAttachment", port["port"]["id"]) except Exception as e: # failed to create port in NVP delete port from quantum_db super(NvpPluginV2, self).delete_port(context, port["port"]["id"]) raise e d = { "port-id": port["port"]["id"], "port-op-status": port["port"]["status"] } LOG.debug("create_port() completed for tenant %s: %s" % (tenant_id, d)) # update port with admin_state_up True port_update = {"port": {"admin_state_up": True}} return super(NvpPluginV2, self).update_port(context, port["port"]["id"], port_update)