def get_port(self, context, id, fields=None): """ This method allows the user to retrieve a remote interface that is attached to this particular port. :returns: a mapping sequence with the following signature: {'port-id': uuid representing the port on specified quantum network 'attachment': uuid of the virtual interface bound to the port, None otherwise 'port-op-status': operational status of the port 'port-state': admin status of the port } :raises: exception.PortNotFound :raises: exception.NetworkNotFound """ quantum_db = super(NvpPluginV2, self).get_port(context, id, fields) port, cluster = ( nvplib.get_port_by_quantum_tag(self.clusters, quantum_db["network_id"], id)) quantum_db["admin_state_up"] = port["admin_status_enabled"] if port["_relations"]["LogicalPortStatus"]["fabric_status_up"]: quantum_db["status"] = constants.PORT_STATUS_ACTIVE else: quantum_db["status"] = constants.PORT_STATUS_DOWN LOG.debug("Port details for tenant %s: %s" % (context.tenant_id, quantum_db)) return quantum_db
def delete_port(self, context, id): """ Deletes a port on a specified Virtual Network, if the port contains a remote interface attachment, the remote interface is first un-plugged and then the port is deleted. :returns: None :raises: exception.PortInUse :raises: exception.PortNotFound :raises: exception.NetworkNotFound """ # TODO(salvatore-orlando): pass only actual cluster port, cluster = nvplib.get_port_by_quantum_tag( self.clusters.itervalues(), '*', id) if port is None: raise q_exc.PortNotFound(port_id=id) # TODO(bgh): if this is a bridged network and the lswitch we just got # back will have zero ports after the delete we should garbage collect # the lswitch. nvplib.delete_port(cluster, port) LOG.debug(_("delete_port() completed for tenant: %s"), context.tenant_id) return super(NvpPluginV2, self).delete_port(context, id)
def get_port(self, context, id, fields=None): """ This method allows the user to retrieve a remote interface that is attached to this particular port. :returns: a mapping sequence with the following signature: {'port-id': uuid representing the port on specified quantum network 'attachment': uuid of the virtual interface bound to the port, None otherwise 'port-op-status': operational status of the port 'port-state': admin status of the port } :raises: exception.PortNotFound :raises: exception.NetworkNotFound """ quantum_db = super(NvpPluginV2, self).get_port(context, id, fields) port, cluster = (nvplib.get_port_by_quantum_tag( self.clusters, quantum_db["network_id"], id)) quantum_db["admin_state_up"] = port["admin_status_enabled"] if port["_relations"]["LogicalPortStatus"]["fabric_status_up"]: quantum_db["status"] = constants.PORT_STATUS_ACTIVE else: quantum_db["status"] = constants.PORT_STATUS_DOWN LOG.debug("Port details for tenant %s: %s" % (context.tenant_id, quantum_db)) return quantum_db
def update_port(self, context, id, port): """ Updates the properties of a specific 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.StateInvalid :raises: exception.PortNotFound """ params = {} quantum_db = super(NvpPluginV2, self).get_port(context, id) port_nvp, cluster = ( nvplib.get_port_by_quantum_tag(self.clusters, quantum_db["network_id"], id)) LOG.debug(_("Update port request: %s"), params) params["cluster"] = cluster params["port"] = port["port"] params["port"]["id"] = quantum_db["id"] params["port"]["tenant_id"] = quantum_db["tenant_id"] result = nvplib.update_port(quantum_db["network_id"], port_nvp["uuid"], **params) LOG.debug(_("update_port() completed for tenant: %s"), context.tenant_id) return super(NvpPluginV2, self).update_port(context, id, port)
def update_port(self, context, id, port): """ Updates the properties of a specific 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.StateInvalid :raises: exception.PortNotFound """ params = {} quantum_db = super(NvpPluginV2, self).get_port(context, id) port_nvp, cluster = (nvplib.get_port_by_quantum_tag( self.clusters, quantum_db["network_id"], id)) LOG.debug("Update port request: %s" % (params)) params["cluster"] = cluster params["port"] = port["port"] params["port"]["id"] = quantum_db["id"] params["port"]["tenant_id"] = quantum_db["tenant_id"] result = nvplib.update_port(quantum_db["network_id"], port_nvp["uuid"], **params) LOG.debug("update_port() completed for tenant: %s" % context.tenant_id) return super(NvpPluginV2, self).update_port(context, id, port)
def delete_port(self, context, id): """ Deletes a port on a specified Virtual Network, if the port contains a remote interface attachment, the remote interface is first un-plugged and then the port is deleted. :returns: None :raises: exception.PortInUse :raises: exception.PortNotFound :raises: exception.NetworkNotFound """ port, cluster = nvplib.get_port_by_quantum_tag(self.clusters, '*', id) if port is None: raise exception.PortNotFound(port_id=id) # TODO(bgh): if this is a bridged network and the lswitch we just got # back will have zero ports after the delete we should garbage collect # the lswitch. nvplib.delete_port(cluster, port) LOG.debug("delete_port() completed for tenant: %s" % context.tenant_id) return super(NvpPluginV2, self).delete_port(context, id)