def get_instances_data(self): policy_targetid = self.tab_group.kwargs['policy_target_id'] filtered_instances = [] try: policytargets = client.pt_list(self.request, policy_target_group_id=policy_targetid) policy_target_ports = [x.port_id for x in policytargets] marker = self.request.GET.get( tables.InstancesTable._meta.pagination_param, None) instances, self._has_more = api.nova.server_list( self.request, search_opts={'marker': marker, 'paginate': True}) instances = [item for item in instances if not itables.is_deleting(item)] 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 except Exception: self._has_more = False error_message = _('Unable to get instances') exceptions.handle(self.request, error_message) filtered_instances = [] return filtered_instances
def get_instances_data(self): policy_targetid = self.tab_group.kwargs['policy_target_id'] filtered_instances = [] try: policytargets = client.pt_list( self.request, 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 # fix. Earlier, when paginate was set to True we were # retrieving instances in pages and were only processing # the first page. While pagination is required for # scaling to a large number of instances, we need to first # retrieve the instances in pages, then process them, # and then show the filtered list (filtered_instances) # in pages. instances, self._has_more = api.nova.server_list(self.request, search_opts={ 'marker': marker, 'paginate': False }) self._has_more = False instances = [ item for item in instances if not itables.is_deleting(item) ] # port_list for a given instance is not available # when it query immediately after member create, # So adding half sec sleep before port list query if policy_target_ports: time.sleep(0.5) for item in instances: 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 else: 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 except Exception: self._has_more = False error_message = _('Unable to get instances') exceptions.handle(self.request, error_message) filtered_instances = [] return filtered_instances
def get_instances_data(self): policy_targetid = self.tab_group.kwargs['policy_target_id'] filtered_instances = [] try: policytargets = client.pt_list(self.request, 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 # fix. Earlier, when paginate was set to True we were # retrieving instances in pages and were only processing # the first page. While pagination is required for # scaling to a large number of instances, we need to first # retrieve the instances in pages, then process them, # and then show the filtered list (filtered_instances) # in pages. instances, self._has_more = api.nova.server_list( self.request, search_opts={'marker': marker, 'paginate': False}) self._has_more = False instances = [item for item in instances if not itables.is_deleting(item)] # port_list for a given instance is not available # when it query immediately after member create, # So adding half sec sleep before port list query if policy_target_ports: time.sleep(0.5) for item in instances: 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 else: 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 except Exception: self._has_more = False error_message = _('Unable to get instances') exceptions.handle(self.request, error_message) filtered_instances = [] return filtered_instances
def delete(self, request, instance_id): url = reverse("horizon:project:policytargets:policy_targetdetails", kwargs={'policy_target_id': 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, port_id=port.id) if policytarget: pts.append(policytarget[0]) for pt in pts: client.pt_delete(request, pt.id) api.nova.server_delete(request, instance_id) LOG.debug('Deleted instance %s successfully' % instance_id) return http.HttpResponseRedirect(url) except Exception: msg = _('Failed to delete instance %s') % instance_id LOG.info(msg) exceptions.handle(request, msg, redirect=shortcuts.redirect)
def delete(self, request, instance_id): url = reverse("horizon:project:policytargets:policy_targetdetails", kwargs={'policy_target_id': 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) api.nova.server_delete(request, instance_id) LOG.debug('Deleted instance %s successfully' % instance_id) return http.HttpResponseRedirect(url) except Exception: msg = _('Failed to delete instance %s') % instance_id LOG.info(msg) exceptions.handle(request, msg, redirect=shortcuts.redirect)