From c934db1617941a4dac90013e4598557864eb17da Mon Sep 17 00:00:00 2001 From: ank Date: Fri, 27 Jan 2017 15:44:14 +0530 Subject: [PATCH] Member list to show ERRORED instances Change-Id: I1b1a659c2a6ce85e375d7892a54d998b3697265f closes-bug: #1482325 --- gbpui/panels/policytargets/tables.py | 13 ++++++------- gbpui/panels/policytargets/tabs.py | 13 ++++++++----- gbpui/panels/policytargets/workflows.py | 6 +++++- 3 files changed, 19 insertions(+), 13 deletions(-) diff --git a/gbpui/panels/policytargets/tables.py b/gbpui/panels/policytargets/tables.py index dc6ec33..aabf38e 100644 --- a/gbpui/panels/policytargets/tables.py +++ b/gbpui/panels/policytargets/tables.py @@ -144,13 +144,12 @@ class RemoveVMLink(tables.DeleteAction): self.table.kwargs['policy_target_id']}) try: pts = [] - for port in api.neutron.port_list(request, device_id=instance_id): - policytarget = client.pt_list(request, - tenant_id=request.user.tenant_id, port_id=port.id) - if policytarget: - pts.append(policytarget[0]) - for pt in pts: - client.pt_delete(request, pt.id) + instance = api.nova.server_get(request, instance_id) + metadata_pts = instance.metadata.get('pts', None) + if metadata_pts: + pts = metadata_pts.split(",") + for pt in pts: + client.pt_delete(request, pt) api.nova.server_delete(request, instance_id) LOG.debug('Deleted instance %s successfully' % instance_id) return http.HttpResponseRedirect(url) diff --git a/gbpui/panels/policytargets/tabs.py b/gbpui/panels/policytargets/tabs.py index 345188e..15b95f8 100644 --- a/gbpui/panels/policytargets/tabs.py +++ b/gbpui/panels/policytargets/tabs.py @@ -128,6 +128,7 @@ class InstancesTab(tabs.TableTab): tenant_id=self.request.user.tenant_id, policy_target_group_id=policy_targetid) policy_target_ports = [x.port_id for x in policytargets] + policy_target_ids = [p.id for p in policytargets] marker = self.request.GET.get( tables.InstancesTable._meta.pagination_param, None) # TODO(Sumit): Setting paginate to False is a temporary @@ -150,11 +151,13 @@ class InstancesTab(tabs.TableTab): if policy_target_ports: time.sleep(0.5) for item in instances: - for port in api.neutron.port_list(self.request, - device_id=item.id): - if port.id in policy_target_ports: - filtered_instances.append(item) - break + metadata_pts = item.metadata.get('pts', None) + if metadata_pts: + pts = metadata_pts.split(",") + for pt in pts: + if pt in policy_target_ids: + filtered_instances.append(item) + break except Exception: self._has_more = False error_message = _('Unable to get instances') diff --git a/gbpui/panels/policytargets/workflows.py b/gbpui/panels/policytargets/workflows.py index 8518154..2a5d036 100644 --- a/gbpui/panels/policytargets/workflows.py +++ b/gbpui/panels/policytargets/workflows.py @@ -582,6 +582,7 @@ class LaunchInstance(workflows.Workflow): else: instance_name = context['name'] + str(count) nics = [] + pts = [] for ptg_id in context['group_id']: values = ptg_id.split(":") ptg_id = values[0] @@ -604,6 +605,8 @@ class LaunchInstance(workflows.Workflow): break ep = client.pt_create(request, **args) nics.append({'port-id': ep.port_id}) + pts.append(ep.id) + meta_data = {'pts': ','.join(pts)} api.nova.server_create(request, instance_name, image_id, @@ -618,7 +621,8 @@ class LaunchInstance(workflows.Workflow): instance_count=1, admin_pass=context['admin_pass'], disk_config=context.get('disk_config'), - config_drive=context.get('config_drive')) + config_drive=context.get('config_drive'), + meta=meta_data) count += 1 return True except Exception as e: