Merge "Implement "IPAllocation" router ports allocated retrieval" into stable/victoria

This commit is contained in:
Zuul 2021-12-23 13:49:11 +00:00 committed by Gerrit Code Review
commit 3e8de4e1cb
2 changed files with 20 additions and 8 deletions

View File

@ -629,15 +629,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):
gateway_ip = str(cur_subnet['gateway_ip'])
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()
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,

View File

@ -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):