Merge "Convert Port to OVO in db/ipam_pluggable_backend.py"

This commit is contained in:
Zuul 2019-01-18 21:02:12 +00:00 committed by Gerrit Code Review
commit 60d25a06b1
2 changed files with 11 additions and 13 deletions

View File

@ -20,17 +20,16 @@ from neutron_lib.api.definitions import portbindings
from neutron_lib import constants from neutron_lib import constants
from neutron_lib.db import api as db_api from neutron_lib.db import api as db_api
from neutron_lib import exceptions as n_exc from neutron_lib import exceptions as n_exc
from neutron_lib.objects import utils as obj_utils
from neutron_lib.plugins import constants as plugin_consts from neutron_lib.plugins import constants as plugin_consts
from neutron_lib.plugins import directory from neutron_lib.plugins import directory
from oslo_db import exception as db_exc from oslo_db import exception as db_exc
from oslo_log import log as logging from oslo_log import log as logging
from oslo_utils import excutils from oslo_utils import excutils
from sqlalchemy import and_
from neutron.common import ipv6_utils from neutron.common import ipv6_utils
from neutron.db import ipam_backend_mixin from neutron.db import ipam_backend_mixin
from neutron.db import models_v2
from neutron.ipam import driver from neutron.ipam import driver
from neutron.ipam import exceptions as ipam_exc from neutron.ipam import exceptions as ipam_exc
from neutron.objects import ports as port_obj from neutron.objects import ports as port_obj
@ -506,11 +505,10 @@ class IpamPluggableBackend(ipam_backend_mixin.IpamBackendMixin):
# will be available for neutron # will be available for neutron
with context.session.begin(subtransactions=True): with context.session.begin(subtransactions=True):
network_id = subnet['network_id'] network_id = subnet['network_id']
port_qry = context.session.query(models_v2.Port) ports = port_obj.Port.get_objects(
ports = port_qry.filter( context, network_id=network_id,
and_(models_v2.Port.network_id == network_id, device_owner=obj_utils.NotIn(
~models_v2.Port.device_owner.in_( constants.ROUTER_INTERFACE_OWNERS_SNAT))
constants.ROUTER_INTERFACE_OWNERS_SNAT)))
updated_ports = [] updated_ports = []
ipam_driver = driver.Pool.get_instance(None, context) ipam_driver = driver.Pool.get_instance(None, context)
factory = ipam_driver.get_address_request_factory() factory = ipam_driver.get_address_request_factory()
@ -518,12 +516,12 @@ class IpamPluggableBackend(ipam_backend_mixin.IpamBackendMixin):
ip = {'subnet_id': subnet['id'], ip = {'subnet_id': subnet['id'],
'subnet_cidr': subnet['cidr'], 'subnet_cidr': subnet['cidr'],
'eui64_address': True, 'eui64_address': True,
'mac': port['mac_address']} 'mac': port.mac_address}
ip_request = factory.get_request(context, port, ip) ip_request = factory.get_request(context, port, ip)
try: try:
ip_address = ipam_subnet.allocate(ip_request) ip_address = ipam_subnet.allocate(ip_request)
allocated = port_obj.IPAllocation( allocated = port_obj.IPAllocation(
context, network_id=network_id, port_id=port['id'], context, network_id=network_id, port_id=port.id,
ip_address=ip_address, subnet_id=subnet['id']) ip_address=ip_address, subnet_id=subnet['id'])
# Do the insertion of each IP allocation entry within # Do the insertion of each IP allocation entry within
# the context of a nested transaction, so that the entry # the context of a nested transaction, so that the entry
@ -532,10 +530,10 @@ class IpamPluggableBackend(ipam_backend_mixin.IpamBackendMixin):
# already opens a nested transaction, we don't need to do # already opens a nested transaction, we don't need to do
# it explicitly here. # it explicitly here.
allocated.create() allocated.create()
updated_ports.append(port['id']) updated_ports.append(port.id)
except db_exc.DBReferenceError: except db_exc.DBReferenceError:
LOG.debug("Port %s was deleted while updating it with an " LOG.debug("Port %s was deleted while updating it with an "
"IPv6 auto-address. Ignoring.", port['id']) "IPv6 auto-address. Ignoring.", port.id)
LOG.debug("Reverting IP allocation for %s", ip_address) LOG.debug("Reverting IP allocation for %s", ip_address)
# Do not fail if reverting allocation was unsuccessful # Do not fail if reverting allocation was unsuccessful
try: try:
@ -546,7 +544,7 @@ class IpamPluggableBackend(ipam_backend_mixin.IpamBackendMixin):
except ipam_exc.IpAddressAlreadyAllocated: except ipam_exc.IpAddressAlreadyAllocated:
LOG.debug("Port %s got IPv6 auto-address in a concurrent " LOG.debug("Port %s got IPv6 auto-address in a concurrent "
"create or update port request. Ignoring.", "create or update port request. Ignoring.",
port['id']) port.id)
return updated_ports return updated_ports
def allocate_subnet(self, context, network, subnet, subnetpool_id): def allocate_subnet(self, context, network, subnet, subnetpool_id):

View File

@ -38,7 +38,7 @@ def count(obj_cls, context, **kwargs):
def _kwargs_to_filters(**kwargs): def _kwargs_to_filters(**kwargs):
retain_classes = (list, set, obj_utils.StringMatchingFilterObj) retain_classes = (list, set, obj_utils.FilterObj)
return {k: v if isinstance(v, retain_classes) else [v] return {k: v if isinstance(v, retain_classes) else [v]
for k, v in kwargs.items()} for k, v in kwargs.items()}