Skip to content

Commit

Permalink
Merge "[VNC OpenStack] Filter port list with network back-ref" into R3.2
Browse files Browse the repository at this point in the history
  • Loading branch information
Zuul authored and opencontrail-ci-admin committed Feb 13, 2017
2 parents 18d14b7 + 085f457 commit 5e6c3f7
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions src/config/vnc_openstack/vnc_openstack/neutron_plugin_db.py
Expand Up @@ -3892,25 +3892,36 @@ def port_list(self, context=None, filters=None):

port_objs = []
if filters.get('device_id'):
back_ref_ids = filters.get('device_id')
if filters.get('network_id'):
back_ref_ids += filters.get('network_id')
# Get all VM port
port_objs_filtered_by_device_id =\
self._virtual_machine_interface_list(
obj_uuids=filters.get('id'),
back_ref_id=filters.get('device_id'))
back_ref_id=back_ref_ids)

port_objs_filtered_by_device_id = []
founded_device_ids = set()
for vmi_obj in self._virtual_machine_interface_list(
obj_uuids=filters.get('id'),
back_ref_id=back_ref_ids):
for device_ref in vmi_obj.get_virtual_machine_refs() or [] +\
vmi_obj.get_logical_router_back_refs() or []:
if device_ref['uuid'] in filters.get('device_id'):
port_objs_filtered_by_device_id.append(vmi_obj)
founded_device_ids.add(device_ref['uuid'])

# If some device ids not yet found look to router interfaces
found_device_ids = set(
vm_ref['uuid']
for vmi_obj in port_objs_filtered_by_device_id
for vm_ref in vmi_obj.get_virtual_machine_refs() or [])
not_found_device_ids = set(filters.get('device_id')) -\
found_device_ids
founded_device_ids
if not_found_device_ids:
# Port has a back_ref to logical router, so need to read in
# logical routers based on device ids
router_objs = self._logical_router_list(
obj_uuids=list(not_found_device_ids),
parent_id=project_ids,
back_ref_id=filters.get('network_id'),
fields=['virtual_machine_interface_back_refs'])
router_port_ids = [
vmi_ref['uuid']
Expand All @@ -3921,8 +3932,7 @@ def port_list(self, context=None, filters=None):
# Read all logical router ports and add it to the list
if router_port_ids:
port_objs.extend(self._virtual_machine_interface_list(
obj_uuids=router_port_ids,
parent_id=project_ids))
obj_uuids=router_port_ids, parent_id=project_ids))

# Filter it with project ids if there are.
if project_ids:
Expand All @@ -3933,7 +3943,8 @@ def port_list(self, context=None, filters=None):
else:
port_objs = self._virtual_machine_interface_list(
obj_uuids=filters.get('id'),
parent_id=project_ids)
parent_id=project_ids,
back_ref_id=filters.get('network_id'))

neutron_ports = self._port_list(port_objs)

Expand All @@ -3949,9 +3960,6 @@ def port_list(self, context=None, filters=None):
not self._port_fixed_ips_is_present(filters['fixed_ips'],
neutron_port['fixed_ips'])):
continue
if not self._filters_is_present(filters,'network_id',
neutron_port['network_id']):
continue

ret_list.append(neutron_port)
return ret_list
Expand Down

0 comments on commit 5e6c3f7

Please sign in to comment.