def delete_port(context, id): """Delete a port. : param context: neutron api request context : param id: UUID representing the port to delete. """ LOG.info("delete_port %s for tenant %s" % (id, context.tenant_id)) port = db_api.port_find(context, id=id, scope=db_api.ONE) if not port: raise exceptions.PortNotFound(net_id=id) backend_key = port["backend_key"] mac_address = netaddr.EUI(port["mac_address"]).value ipam_driver = ipam.IPAM_REGISTRY.get_strategy( port["network"]["ipam_strategy"]) ipam_driver.deallocate_mac_address(context, mac_address) ipam_driver.deallocate_ips_by_port( context, port, ipam_reuse_after=CONF.QUARK.ipam_reuse_after) net_driver = registry.DRIVER_REGISTRY.get_driver( port.network["network_plugin"]) net_driver.delete_port(context, backend_key, device_id=port["device_id"], mac_address=port["mac_address"]) with context.session.begin(): db_api.port_delete(context, port)
def delete_port(context, id): """Delete a port. : param context: neutron api request context : param id: UUID representing the port to delete. """ LOG.info("delete_port %s for tenant %s" % (id, context.tenant_id)) port = db_api.port_find(context, id=id, scope=db_api.ONE) if not port: raise n_exc.PortNotFound(port_id=id) if 'device_id' in port: # false is weird, but ignore that LOG.info("delete_port %s for tenant %s has device %s" % (id, context.tenant_id, port['device_id'])) backend_key = port["backend_key"] mac_address = netaddr.EUI(port["mac_address"]).value ipam_driver = _get_ipam_driver(port["network"], port=port) ipam_driver.deallocate_mac_address(context, mac_address) ipam_driver.deallocate_ips_by_port( context, port, ipam_reuse_after=CONF.QUARK.ipam_reuse_after) net_driver = _get_net_driver(port["network"], port=port) base_net_driver = _get_net_driver(port["network"]) net_driver.delete_port(context, backend_key, device_id=port["device_id"], mac_address=port["mac_address"], base_net_driver=base_net_driver) with context.session.begin(): db_api.port_delete(context, port)
def _allocate_db_port_undo(new_port, **kwargs): LOG.info("Rolling back database port...") if not new_port: return try: with context.session.begin(): db_api.port_delete(context, new_port) except Exception: LOG.exception("Couldn't rollback db port %s" % backend_port)
def _allocate_db_port_undo(new_port): LOG.info("Rolling back database port...") if not new_port: return try: with context.session.begin(): db_api.port_delete(context, new_port) except Exception: LOG.exception( "Couldn't rollback db port %s" % backend_port)
def delete_port(context, id): """Delete a port. : param context: neutron api request context : param id: UUID representing the port to delete. """ LOG.info("delete_port %s for tenant %s" % (id, context.tenant_id)) port = db_api.port_find(context, id=id, scope=db_api.ONE) if not port: raise exceptions.PortNotFound(net_id=id) backend_key = port["backend_key"] mac_address = netaddr.EUI(port["mac_address"]).value ipam_driver.deallocate_mac_address(context, mac_address) ipam_driver.deallocate_ip_address( context, port, ipam_reuse_after=CONF.QUARK.ipam_reuse_after) db_api.port_delete(context, port) net_driver.delete_port(context, backend_key)
def test_port_list_device_owner_found_returns_only_those(self): # create a network network = dict(name="public", tenant_id="fake", network_plugin="BASE") net_mod = db_api.network_create(self.context, **network) # create ports port1 = dict(network_id=net_mod["id"], backend_key="1", device_id="1", device_owner="Doge") port2 = dict(network_id=net_mod["id"], backend_key="1", device_id="1", device_owner=port1["device_owner"]) port3 = dict(network_id=net_mod["id"], backend_key="1", device_id="1", device_owner="network:dhcp") port_mod1 = db_api.port_create(self.context, **port1) port_mod2 = db_api.port_create(self.context, **port2) port_mod3 = db_api.port_create(self.context, **port3) res = db_api.port_find(self.context, scope=db_api.ALL, device_owner=port3["device_owner"]) self.assertTrue(len(res) == 1) self.assertTrue(res[0]["device_owner"] == port3["device_owner"]) res = db_api.port_find(self.context, scope=db_api.ALL, device_owner=port1["device_owner"]) self.assertTrue(len(res) == 2) self.assertTrue(res[0]["device_owner"] == res[1]["device_owner"] == port1["device_owner"]) db_api.network_delete(self.context, net_mod) db_api.port_delete(self.context, port_mod1) db_api.port_delete(self.context, port_mod2) db_api.port_delete(self.context, port_mod3)
def test_ports_sorted_by_created_at(self): # create a network network = dict(name="public", tenant_id="fake", network_plugin="BASE") net_mod = db_api.network_create(self.context, **network) # create ports port1 = dict(network_id=net_mod["id"], backend_key="1", device_id="1") port2 = dict(network_id=net_mod["id"], backend_key="1", device_id="1") port3 = dict(network_id=net_mod["id"], backend_key="1", device_id="1") port_mod1 = db_api.port_create(self.context, **port1) port_mod2 = db_api.port_create(self.context, **port2) port_mod3 = db_api.port_create(self.context, **port3) res = db_api.port_find(context=self.context, limit=None, sorts=['created_at'], marker_obj=None, fields=None, scope=db_api.ALL) self.assertTrue( res[0]["created_at"] < res[1]["created_at"] < res[2]['created_at']) self.assertTrue(res[0]['id'] == port_mod1['id']) self.assertTrue(res[1]['id'] == port_mod2['id']) self.assertTrue(res[2]['id'] == port_mod3['id']) db_api.network_delete(self.context, net_mod) db_api.port_delete(self.context, port_mod1) db_api.port_delete(self.context, port_mod2) db_api.port_delete(self.context, port_mod3)
def test_ports_sorted_by_created_at(self): # create a network network = dict(name="public", tenant_id="fake", network_plugin="BASE") net_mod = db_api.network_create(self.context, **network) # create ports port1 = dict(network_id=net_mod["id"], backend_key="1", device_id="1") port2 = dict(network_id=net_mod["id"], backend_key="1", device_id="1") port3 = dict(network_id=net_mod["id"], backend_key="1", device_id="1") port_mod1 = db_api.port_create(self.context, **port1) port_mod2 = db_api.port_create(self.context, **port2) port_mod3 = db_api.port_create(self.context, **port3) res = db_api.port_find(self.context, scope=db_api.ALL) self.assertTrue(res[0]["created_at"] < res[1]["created_at"] < res[2]["created_at"]) db_api.network_delete(self.context, net_mod) db_api.port_delete(self.context, port_mod1) db_api.port_delete(self.context, port_mod2) db_api.port_delete(self.context, port_mod3)