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:
parent
3ca8675caa
commit
d9e2259bbf
|
@ -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]
|
||||
|
|
|
@ -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,
|
||||
|
|
Loading…
Reference in New Issue