summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorZuul <zuul@review.opendev.org>2022-05-11 12:34:17 +0000
committerGerrit Code Review <review@openstack.org>2022-05-11 12:34:17 +0000
commit47c66ba484ef5f5ed447624cb0308dc962e29762 (patch)
tree0ae925d3e9ae5bf3b55edbfcf6171efc8dda8cdc
parentd25fecedda0124ea9743ac259406f6accb11c64a (diff)
parent9e6ddb7a0a53173f62566d5e829ff3ea4527937c (diff)
downloadhorizon-47c66ba484ef5f5ed447624cb0308dc962e29762.tar.gz
Merge "Non-api filters not working with admin instance tab" into stable/ussuri
-rw-r--r--openstack_dashboard/dashboards/admin/instances/views.py28
1 files changed, 22 insertions, 6 deletions
diff --git a/openstack_dashboard/dashboards/admin/instances/views.py b/openstack_dashboard/dashboards/admin/instances/views.py
index 8ca198772..d8a6e2cb8 100644
--- a/openstack_dashboard/dashboards/admin/instances/views.py
+++ b/openstack_dashboard/dashboards/admin/instances/views.py
@@ -108,6 +108,12 @@ class AdminIndexView(tables.PagedTableMixin, tables.DataTableView):
exceptions.handle(self.request, ignore=True)
return {}
+ def _get_images_by_name(self, image_name):
+ result = api.glance.image_list_detailed(
+ self.request, filters={'name': image_name})
+ images = result[0]
+ return dict((image.id, image) for image in images)
+
def _get_flavors(self):
# Gather our flavors to correlate against IDs
try:
@@ -151,22 +157,32 @@ class AdminIndexView(tables.PagedTableMixin, tables.DataTableView):
self._needs_filter_first = False
- instances = self._get_instances(search_opts, sort_dir)
results = futurist_utils.call_functions_parallel(
- (self._get_images, [tuple(instances)]),
self._get_flavors,
self._get_tenants)
- image_dict, flavor_dict, tenant_dict = results
+ flavor_dict, tenant_dict = results
- non_api_filter_info = (
+ non_api_filter_info = [
('project', 'tenant_id', tenant_dict.values()),
- ('image_name', 'image', image_dict.values()),
('flavor_name', 'flavor', flavor_dict.values()),
- )
+ ]
+
+ filter_by_image_name = 'image_name' in search_opts
+ if filter_by_image_name:
+ image_dict = self._get_images_by_name(search_opts['image_name'])
+ non_api_filter_info.append(
+ ('image_name', 'image', image_dict.values())
+ )
+
if not views.process_non_api_filters(search_opts, non_api_filter_info):
self._more = False
return []
+ instances = self._get_instances(search_opts, sort_dir)
+
+ if not filter_by_image_name:
+ image_dict = self._get_images(tuple(instances))
+
# Loop through instances to get image, flavor and tenant info.
for inst in instances:
if hasattr(inst, 'image') and isinstance(inst.image, dict):