Don't display non-tenant Floating IP in Floating IP project tab

Previously Floating IPs from all tenants are displayed when logged
in as a user with admin role and Neutron is enabled. Neutron API
returns resources from all tenants when the API is called with admin
role, so we need to call the API with additional filter parameter to
limit the results to a given tenant.

Conflicts:
	openstack_dashboard/api/neutron.py
(cherry picked from commit 3827a7e73a)

Closes-Bug: #1226224
Change-Id: I47ddf77cd3c5d4c6141a67cb32c22cc917b485e6
This commit is contained in:
Akihiro MOTOKI 2013-09-17 05:01:19 +09:00 committed by Julie Pichon
parent 29cb522f31
commit 3f81d70d4b
2 changed files with 16 additions and 7 deletions

View File

@ -122,10 +122,15 @@ class FloatingIpManager(network.FloatingIpManager):
in self.client.list_networks(**search_opts).get('networks')]
def list(self):
fips = self.client.list_floatingips().get('floatingips')
tenant_id = self.request.user.tenant_id
# In Neutron, list_floatingips returns Floating IPs from all tenants
# when the API is called with admin role, so we need to filter them
# with tenant_id.
fips = self.client.list_floatingips(tenant_id=tenant_id)
fips = fips.get('floatingips')
# Get port list to add instance_id to floating IP list
# instance_id is stored in device_id attribute
ports = port_list(self.request)
ports = port_list(self.request, tenant_id=tenant_id)
device_id_dict = SortedDict([(p['id'], p['device_id']) for p in ports])
for fip in fips:
if fip['port_id']:
@ -167,7 +172,8 @@ class FloatingIpManager(network.FloatingIpManager):
{'floatingip': update_dict})
def list_targets(self):
ports = port_list(self.request)
tenant_id = self.request.user.tenant_id
ports = port_list(self.request, tenant_id=tenant_id)
servers = nova.server_list(self.request)
server_dict = SortedDict([(s.id, s.name) for s in servers])
targets = []

View File

@ -165,8 +165,11 @@ class NetworkApiQuantumFloatingIpTests(test.APITestCase):
def test_floating_ip_list(self):
fips = self.api_q_floating_ips.list()
self.qclient.list_floatingips().AndReturn({'floatingips': fips})
self.qclient.list_ports().AndReturn({'ports': self.api_ports.list()})
filters = {'tenant_id': self.request.user.tenant_id}
self.qclient.list_floatingips(**filters) \
.AndReturn({'floatingips': fips})
self.qclient.list_ports(**filters) \
.AndReturn({'ports': self.api_ports.list()})
self.mox.ReplayAll()
rets = api.network.tenant_floating_ip_list(self.request)
@ -265,8 +268,8 @@ class NetworkApiQuantumFloatingIpTests(test.APITestCase):
target_ports = [(self._get_target_id(p),
self._get_target_name(p)) for p in ports
if not p['device_owner'].startswith('network:')]
self.qclient.list_ports().AndReturn({'ports': ports})
filters = {'tenant_id': self.request.user.tenant_id}
self.qclient.list_ports(**filters).AndReturn({'ports': ports})
servers = self.servers.list()
novaclient = self.stub_novaclient()
novaclient.servers = self.mox.CreateMockAnything()