def port_set_attachment(port_id, net_id, new_interface_id): # confirm network exists network_get(net_id) session = get_session() port = port_get(port_id, net_id) if new_interface_id != "": # We are setting, not clearing, the attachment-id if port['interface_id']: raise q_exc.PortInUse(net_id=net_id, port_id=port_id, att_id=port['interface_id']) try: port = session.query(models.Port).\ filter_by(interface_id=new_interface_id).\ one() raise q_exc.AlreadyAttached(net_id=net_id, port_id=port_id, att_id=new_interface_id, att_port_id=port['uuid']) except exc.NoResultFound: # this is what should happen pass port.interface_id = new_interface_id session.merge(port) session.flush() return port
def plug_interface(controller, network, port, type, attachment=None): uri = "/ws.v1/lswitch/" + network + "/lport/" + port + "/attachment" lport_obj = {} if attachment: lport_obj["vif_uuid"] = attachment lport_obj["type"] = type try: resp_obj = do_single_request("PUT", uri, jsonutils.dumps(lport_obj), controller=controller) except NvpApiClient.ResourceNotFound as e: LOG.error("Port or Network not found, Error: %s" % str(e)) raise exception.PortNotFound(port_id=port, net_id=network) except NvpApiClient.Conflict as e: LOG.error("Conflict while making attachment to port, " "Error: %s" % str(e)) raise exception.AlreadyAttached(att_id=attachment, port_id=port, net_id=network, att_port_id="UNKNOWN") except NvpApiClient.NvpApiException as e: raise exception.QuantumException() result = jsonutils.dumps(resp_obj) return result
def validate_attachment(self, tenant_id, network_id, port_id, remote_interface_id): for port in db.port_list(network_id): if port['interface_id'] == remote_interface_id: raise exc.AlreadyAttached(net_id=network_id, port_id=port_id, att_id=port['interface_id'], att_port_id=port['uuid'])
def port_set_attachment_by_id(port_id, new_interface_id): session = get_session() port = port_get_by_id(port_id) if new_interface_id != "": if port['interface_id']: raise q_exc.PortInUse(port_id=port_id, att_id=port['interface_id']) try: port = session.query( models.Port).filter_by(interface_id=new_interface_id).one() raise q_exc.AlreadyAttached(port_id=port_id, att_id=new_interface_id, att_port_id=port['uuid']) except exc.NoResultFound: pass port.interface_id = new_interface_id session.merge(port) session.flush() return port