Browse Source

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

changes/72/825472/1
Zuul 4 months ago committed by Gerrit Code Review
parent
commit
20befc858a
  1. 13
      neutron/db/db_base_plugin_v2.py
  2. 15
      neutron/objects/ports.py

13
neutron/db/db_base_plugin_v2.py

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

15
neutron/objects/ports.py

@ -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…
Cancel
Save