Merge "Implement "IPAllocation" router ports allocated retrieval" into stable/ussuri
This commit is contained in:
commit
20befc858a
|
@ -627,15 +627,12 @@ class NeutronDbPluginV2(db_base_plugin_common.DbBasePluginCommon,
|
|||
# a subnet-update and a router-interface-add operation are
|
||||
# executed concurrently
|
||||
if cur_subnet and not ipv6_utils.is_ipv6_pd_enabled(s):
|
||||
with db_api.CONTEXT_READER.using(context):
|
||||
# TODO(electrocucaracha): Look a solution for Join in OVO
|
||||
ipal = models_v2.IPAllocation
|
||||
alloc_qry = context.session.query(ipal.port_id)
|
||||
alloc_qry = alloc_qry.join("port", "routerport")
|
||||
gateway_ip = str(cur_subnet['gateway_ip'])
|
||||
allocated = alloc_qry.filter(
|
||||
ipal.ip_address == gateway_ip,
|
||||
ipal.subnet_id == cur_subnet['id']).first()
|
||||
with db_api.CONTEXT_READER.using(context):
|
||||
allocated = port_obj.IPAllocation.get_alloc_routerports(
|
||||
context, cur_subnet['id'], gateway_ip=gateway_ip,
|
||||
first=True)
|
||||
|
||||
if allocated and allocated.port_id:
|
||||
raise exc.GatewayIpInUse(
|
||||
ip_address=gateway_ip,
|
||||
|
|
|
@ -223,6 +223,21 @@ class IPAllocation(base.NeutronDbObject):
|
|||
alloc_obj = super(IPAllocation, cls)._load_object(context, alloc)
|
||||
alloc_obj.delete()
|
||||
|
||||
@classmethod
|
||||
def get_alloc_routerports(cls, context, subnet_id, gateway_ip=None,
|
||||
first=False):
|
||||
alloc_qry = context.session.query(cls.db_model.port_id)
|
||||
alloc_qry = alloc_qry.join(
|
||||
l3.RouterPort, l3.RouterPort.port_id == cls.db_model.port_id)
|
||||
alloc_qry = alloc_qry.filter(cls.db_model.subnet_id == subnet_id)
|
||||
if gateway_ip:
|
||||
alloc_qry = alloc_qry.filter(cls.db_model.ip_address == gateway_ip)
|
||||
|
||||
if first:
|
||||
return alloc_qry.first()
|
||||
else:
|
||||
return alloc_qry.all()
|
||||
|
||||
|
||||
@base.NeutronObjectRegistry.register
|
||||
class PortDNS(base.NeutronDbObject):
|
||||
|
|
Loading…
Reference in New Issue