Topology filter out non tenant ports

This change filters out ports presented to the topology view which
are connected to networks which are not visible to the tenant.  Such
ports can be present when an admin creates an instance and ties and instance
into two networks.

Change-Id: Ib0e7ea38b42b580a65455c344f100e5aad67954e
Closes-bug: #1494358
(cherry picked from commit 42ae3dbf05)
This commit is contained in:
eric 2015-09-10 09:26:13 -06:00 committed by Eric Peterson
parent 3ca8675caa
commit d9e2259bbf
2 changed files with 14 additions and 5 deletions

View File

@ -161,6 +161,9 @@ class NetworkTopologyTests(test.TestCase):
del exp_net['url']
self.assertEqual(expect_net_urls, data['networks'])
valid_network_ids = [net.id for net in tenant_networks]
if router_enable:
valid_network_ids = [net.id for net in self.networks.list()]
# ports
expect_port_urls = [
{'id': port.id,
@ -171,7 +174,8 @@ class NetworkTopologyTests(test.TestCase):
'status': port.status.title(),
'original_status': port.status,
'url': '/project/networks/ports/%s/detail' % port.id}
for port in self.ports.list()]
for port in self.ports.list()
if port.network_id in valid_network_ids]
if router_enable:
# fake port for router1 gateway (router1 on ext_net)
router1 = routers[0]

View File

@ -328,12 +328,15 @@ class JSONView(View):
self.add_resource_url('horizon:project:routers:detail', routers)
return routers
def _get_ports(self, request):
def _get_ports(self, request, networks):
try:
neutron_ports = api.neutron.port_list(request)
except Exception:
neutron_ports = []
# we should filter out ports connected to non tenant networks
# which they have no visibility to
tenant_network_ids = [network['id'] for network in networks]
ports = [{'id': port.id,
'network_id': port.network_id,
'device_id': port.device_id,
@ -342,7 +345,8 @@ class JSONView(View):
'status': self.trans.port[port.status],
'original_status': port.status}
for port in neutron_ports
if port.device_owner != 'network:router_ha_interface']
if port.device_owner != 'network:router_ha_interface'
and port.network_id in tenant_network_ids]
self.add_resource_url('horizon:project:networks:ports:detail',
ports)
return ports
@ -369,9 +373,10 @@ class JSONView(View):
ports.append(fake_port)
def get(self, request, *args, **kwargs):
networks = self._get_networks(request)
data = {'servers': self._get_servers(request),
'networks': self._get_networks(request),
'ports': self._get_ports(request),
'networks': networks,
'ports': self._get_ports(request, networks),
'routers': self._get_routers(request)}
self._prepare_gateway_ports(data['routers'], data['ports'])
json_string = json.dumps(data, cls=LazyTranslationEncoder,