def test_request_list_get_filter_project(self): """Test 'get_filter[Project] of index'""" view = views.IndexView() view.request = None filter_option = { "filter_field": "tenant_id", "filter_string": "project-a", "result": {"tenant_id": "7a867af0702c435981cfb970998b2337"} } # Create a filter condition. views.IndexView._get_filter_field(). \ AndReturn(filter_option["filter_field"]) views.IndexView._get_filter_string(). \ AndReturn(filter_option["filter_string"]) filters_result = filter_option['result'] # Create a project name. project_data = [Tenant(self, fixture.PROJECT_GET_DATA, loaded=True)] keystone.tenant_list(None). \ AndReturn([project_data, False]) self.mox.ReplayAll() self.assertEqual(view.get_filters(), filters_result)
def _test_index(self, instanceless_volumes=False): volumes = self.cinder_volumes.list() if instanceless_volumes: for volume in volumes: volume.attachments = [] cinder.volume_list_paged(IsA(http.HttpRequest), sort_dir="desc", marker=None, paginate=True, search_opts={'all_tenants': True})\ .AndReturn([volumes, False, False]) cinder.volume_snapshot_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True }).AndReturn([]) if not instanceless_volumes: api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}) \ .AndReturn([self.servers.list(), False]) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(INDEX_URL) self.assertTemplateUsed(res, 'admin/volumes/index.html') volumes = res.context['volumes_table'].data self.assertItemsEqual(volumes, self.cinder_volumes.list())
def get_data(self): tenants = [] domain_context = self.request.session.get('domain_context', None) if policy.check((("identity", "identity:list_projects"),), self.request): try: tenants, _more = keystone_api.tenant_list( self.request, domain=domain_context, paginate=False) except Exception: exceptions.handle(self.request, _("Unable to retrieve project list.")) elif policy.check((("identity", "identity:list_user_projects"),), self.request): try: tenants, _more = keystone_api.tenant_list( self.request, user=self.request.user.id, paginate=False, admin=False) except Exception: exceptions.handle(self.request, _("Unable to retrieve project information.")) else: msg = \ _("Insufficient privilege level to view project information.") messages.info(self.request, msg) return tenants
def test_index(self): cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).AndReturn(self.cinder_volumes.list()) api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}) \ .AndReturn([self.servers.list(), False]) cinder.volume_type_list(IsA(http.HttpRequest)).\ AndReturn(self.volume_types.list()) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) cinder.volume_snapshot_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volume_snapshots.list()) cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) keystone.tenant_list(IsA(http.HttpRequest)). \ AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(reverse('horizon:admin:volumes:index')) self.assertTemplateUsed(res, 'admin/volumes/index.html') volumes = res.context['volumes_table'].data self.assertItemsEqual(volumes, self.cinder_volumes.list())
def _test_index_paginated(self, marker, sort_dir, volumes, url, has_more, has_prev): vol_snaps = self.cinder_volume_snapshots.list() server = self.servers.first() cinder.volume_list_paged(IsA(http.HttpRequest), sort_dir=sort_dir, marker=marker, paginate=True, search_opts={'all_tenants': True}) \ .AndReturn([volumes, has_more, has_prev]) api.cinder.volume_snapshot_list( IsA(http.HttpRequest), search_opts=None).AndReturn(vol_snaps) api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}, detailed=False) \ .AndReturn([self.servers.list(), False]) api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(urlunquote(url)) self.assertTemplateUsed(res, 'horizon/common/_data_table_view.html') self.assertEqual(res.status_code, 200) self.mox.UnsetStubs() return res
def _test_edit_volume_type_access(self, exception=False): volume_type = self.cinder_volume_types.list()[2] volume_type.id = u'1' keystone.tenant_list(IsA(http.HttpRequest)).AndReturn( [self.tenants.list(), False]) type_access = self.cinder_type_access.list() formData = {'member': [u'3'], 'volume_type_id': volume_type.id} volume_type = cinder.volume_type_get(IsA( http.HttpRequest), volume_type.id).AndReturn(volume_type) cinder.volume_type_access_list(IsA(http.HttpRequest), volume_type.id).AndReturn(type_access) cinder.volume_type_add_project_access(IsA(http.HttpRequest), volume_type.id, u'3') if exception: cinder.volume_type_remove_project_access( IsA(http.HttpRequest), volume_type.id, u'1')\ .AndRaise(exceptions.BadRequest()) else: cinder.volume_type_remove_project_access(IsA(http.HttpRequest), volume_type.id, u'1') self.mox.ReplayAll() url = reverse('horizon:admin:volume_types:edit_access', args=[volume_type.id]) res = self.client.post(url, formData) self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, INDEX_URL)
def _test_index_paginated(self, marker, sort_dir, volumes, url, has_more, has_prev): vol_snaps = self.cinder_volume_snapshots.list() server = self.servers.first() cinder.volume_list_paged(IsA(http.HttpRequest), sort_dir=sort_dir, marker=marker, paginate=True, search_opts={'all_tenants': True}) \ .AndReturn([volumes, has_more, has_prev]) api.cinder.volume_snapshot_list( IsA(http.HttpRequest), search_opts=None).AndReturn(vol_snaps) api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}, detailed=False) \ .AndReturn([self.servers.list(), False]) api.nova.server_get(IsA(http.HttpRequest), server.id).AndReturn(server) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(urlunquote(url)) self.assertTemplateUsed(res, 'horizon/common/_data_table_view.html') self.assertEqual(res.status_code, 200) self.mox.UnsetStubs() return res
def _test_index(self, instanceless_volumes=False): volumes = self.cinder_volumes.list() if instanceless_volumes: for volume in volumes: volume.attachments = [] cinder.volume_list_paged(IsA(http.HttpRequest), sort_dir="desc", marker=None, paginate=True, search_opts={'all_tenants': True})\ .AndReturn([volumes, False, False]) cinder.volume_snapshot_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).AndReturn([]) if not instanceless_volumes: api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}) \ .AndReturn([self.servers.list(), False]) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(INDEX_URL) self.assertTemplateUsed(res, 'admin/volumes/index.html') volumes = res.context['volumes_table'].data self.assertItemsEqual(volumes, self.cinder_volumes.list())
def test_snapshot_tab(self): cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn([self.servers.list(), False]) cinder.volume_type_list(IsA(http.HttpRequest)).\ AndReturn(self.volume_types.list()) keystone.tenant_list(IsA(http.HttpRequest)). \ AndReturn([self.tenants.list(), False]) cinder.volume_snapshot_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}). \ AndReturn(self.cinder_volume_snapshots.list()) cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) keystone.tenant_list(IsA(http.HttpRequest)). \ AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(reverse('horizon:admin:volumes:snapshots_tab')) self.assertEqual(res.status_code, 200) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html')
def get_data(self): default_filters = {'all_tenants': True} filters = self.get_filters(default_filters.copy()) filter_first = getattr(settings, 'FILTER_DATA_FIRST', {}) volumes = [] self.table.needs_filter_first = False if filter_first.get('admin.volumes', False) and \ len(filters) == len(default_filters): self.table.needs_filter_first = True return volumes if 'project' in filters: # Keystone returns a tuple ([],false) where the first element is # tenant list that's why the 0 is hardcoded below tenants = keystone.tenant_list(self.request)[0] tenant_ids = [ t.id for t in tenants if t.name == filters['project'] ] if not tenant_ids: return [] del filters['project'] for id in tenant_ids: filters['project_id'] = id volumes += self._get_volumes(search_opts=filters) else: volumes = self._get_volumes(search_opts=filters) attached_instance_ids = self._get_attached_instance_ids(volumes) instances = self._get_instances(search_opts={'all_tenants': True}, instance_ids=attached_instance_ids) volume_ids_with_snapshots = self._get_volumes_ids_with_snapshots( search_opts={'all_tenants': True}) self._set_volume_attributes(volumes, instances, volume_ids_with_snapshots) # Gather our tenants to correlate against IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = OrderedDict([(t.id, t) for t in tenants]) for volume in volumes: tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) volume.tenant_name = getattr(tenant, "name", None) return volumes
def get_data(self): default_filters = {'all_tenants': True} filters = self.get_filters(default_filters.copy()) filter_first = getattr(settings, 'FILTER_DATA_FIRST', {}) volumes = [] self.table.needs_filter_first = False if filter_first.get('admin.volumes', False) and \ len(filters) == len(default_filters): self.table.needs_filter_first = True return volumes if 'project' in filters: # Keystone returns a tuple ([],false) where the first element is # tenant list that's why the 0 is hardcoded below tenants = keystone.tenant_list(self.request)[0] tenant_ids = [t.id for t in tenants if t.name == filters['project']] if not tenant_ids: return [] del filters['project'] for id in tenant_ids: filters['project_id'] = id volumes += self._get_volumes(search_opts=filters) else: volumes = self._get_volumes(search_opts=filters) attached_instance_ids = self._get_attached_instance_ids(volumes) instances = self._get_instances(search_opts={'all_tenants': True}, instance_ids=attached_instance_ids) volume_ids_with_snapshots = self._get_volumes_ids_with_snapshots( search_opts={'all_tenants': True}) self._set_volume_attributes( volumes, instances, volume_ids_with_snapshots) # Gather our tenants to correlate against IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = OrderedDict([(t.id, t) for t in tenants]) for volume in volumes: tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) volume.tenant_name = getattr(tenant, "name", None) return volumes
def test_index(self): cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}) \ .AndReturn([self.servers.list(), False]) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(reverse('horizon:admin:volumes:index')) self.assertTemplateUsed(res, 'admin/volumes/index.html') volumes = res.context['volumes_table'].data self.assertItemsEqual(volumes, self.cinder_volumes.list())
def __init__(self, request, *args, **kwargs): super(AddProjectAction, self).__init__(request, *args, **kwargs) default_role_field_name = self.get_default_role_field_name() self.fields[default_role_field_name] = forms.CharField(required=False) self.fields[default_role_field_name].initial = "member" field_name = self.get_member_field_name("member") self.fields[field_name] = forms.MultipleChoiceField(required=False) share_type_id = self.initial["id"] # Get list of existing projects try: projects, __ = keystone.tenant_list(request) except Exception: err_msg = _("Unable to get list of projects.") exceptions.handle(request, err_msg) # Get list of projects with access to this Share Type try: share_type = manila.share_type_get(request, share_type_id) self.share_type_name = share_type.name projects_initial = manila.share_type_access_list(request, share_type) except Exception: err_msg = _("Unable to get information about share type access.") exceptions.handle(request, err_msg) self.fields[field_name].choices = [(project.id, project.name or project.id) for project in projects] self.fields[field_name].initial = [pr.project_id for pr in projects_initial] self.projects_initial = set(self.fields[field_name].initial)
def get_volumes_data(self): volumes = self._get_volumes(search_opts={'all_tenants': True}) attached_instance_ids = self._get_attached_instance_ids(volumes) instances = self._get_instances(search_opts={'all_tenants': True}, instance_ids=attached_instance_ids) volume_ids_with_snapshots = self._get_volumes_ids_with_snapshots( search_opts={'all_tenants': True}) self._set_volume_attributes(volumes, instances, volume_ids_with_snapshots) # Gather our tenants to correlate against IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = OrderedDict([(t.id, t) for t in tenants]) for volume in volumes: tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) volume.tenant_name = getattr(tenant, "name", None) return volumes
def get_data(self): sort_dir = self.request.GET.get('sort_dir', 'asc') opts = { 'include_disabled': True, 'sort_dir': sort_dir, } marker = self.request.GET.get( tables.PackageDefinitionsTable._meta.pagination_param, None) opts = self.get_filters(opts) packages = [] page_size = utils.get_page_size(self.request) with api.handled_exceptions(self.request): packages, extra = pkg_api.package_list( self.request, marker=marker, filters=opts, paginate=True, page_size=page_size) if sort_dir == 'asc': self._more = extra else: packages = list(reversed(packages)) self._prev = extra if packages: if sort_dir == 'asc': backward_marker = packages[0].id opts['sort_dir'] = 'desc' else: backward_marker = packages[-1].id opts['sort_dir'] = 'asc' __, extra = pkg_api.package_list( self.request, filters=opts, paginate=True, marker=backward_marker, page_size=0) if sort_dir == 'asc': self._prev = extra else: self._more = extra # Add information about project tenant for admin user if self.request.user.is_superuser: tenants = [] try: tenants, _more = keystone.tenant_list(self.request) except Exception: exceptions.handle(self.request, _("Unable to retrieve project list.")) tenent_name_by_id = {tenant.id: tenant.name for tenant in tenants} for i, p in enumerate(packages): packages[i].tenant_name = tenent_name_by_id.get(p.owner_id) else: current_tenant = self.request.session['token'].tenant for i, package in enumerate(packages): if package.owner_id == current_tenant['id']: packages[i].tenant_name = current_tenant['name'] else: packages[i].tenant_name = _('UNKNOWN') return packages
def __init__(self, request, *args, **kwargs): super(AddProjectAction, self).__init__(request, *args, **kwargs) default_role_field_name = self.get_default_role_field_name() self.fields[default_role_field_name] = forms.CharField(required=False) self.fields[default_role_field_name].initial = 'member' field_name = self.get_member_field_name('member') self.fields[field_name] = forms.MultipleChoiceField(required=False) share_type_id = self.initial['id'] # Get list of existing projects try: projects, __ = keystone.tenant_list(request) except Exception: err_msg = _('Unable to get list of projects.') exceptions.handle(request, err_msg) # Get list of projects with access to this Share Type try: share_type = manila.share_type_get(request, share_type_id) self.share_type_name = share_type.name projects_initial = manila.share_type_access_list( request, share_type) except Exception: err_msg = _('Unable to get information about share type access.') exceptions.handle(request, err_msg) self.fields[field_name].choices = [(project.id, project.name or project.id) for project in projects] self.fields[field_name].initial = [ pr.project_id for pr in projects_initial ] self.projects_initial = set(self.fields[field_name].initial)
def get_volumes_data(self): volumes = self._get_volumes(search_opts={'all_tenants': True}) attached_instance_ids = self._get_attached_instance_ids(volumes) instances = self._get_instances(search_opts={'all_tenants': True}, instance_ids=attached_instance_ids) volume_ids_with_snapshots = self._get_volumes_ids_with_snapshots( search_opts={'all_tenants': True}) self._set_volume_attributes( volumes, instances, volume_ids_with_snapshots) # Gather our tenants to correlate against IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = OrderedDict([(t.id, t) for t in tenants]) for volume in volumes: tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) volume.tenant_name = getattr(tenant, "name", None) return volumes
def test_index(self): cinder.volume_list_paged( IsA(http.HttpRequest), sort_dir="desc", marker=None, paginate=True, search_opts={"all_tenants": True} ).AndReturn([self.cinder_volumes.list(), False, False]) cinder.volume_snapshot_list(IsA(http.HttpRequest), search_opts={"all_tenants": True}).AndReturn([]) api.nova.server_list(IsA(http.HttpRequest), search_opts={"all_tenants": True}).AndReturn( [self.servers.list(), False] ) keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(INDEX_URL) self.assertTemplateUsed(res, "admin/volumes/index.html") volumes = res.context["volumes_table"].data self.assertItemsEqual(volumes, self.cinder_volumes.list())
def get_volume_snapshots_data(self): if api.base.is_service_enabled(self.request, 'volume'): try: snapshots = cinder.volume_snapshot_list(self.request, ) volumes = cinder.volume_list(self.request, ) volumes = dict((v.id, v) for v in volumes) except Exception: snapshots = [] volumes = {} exceptions.handle(self.request, _("Unable to retrieve " "volume snapshots.")) try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = dict([(t.id, t) for t in tenants]) for snapshot in snapshots: volume = volumes.get(snapshot.volume_id) tenant_id = getattr(volume, 'os-vol-tenant-attr:tenant_id', None) tenant = tenant_dict.get(tenant_id, None) snapshot._volume = volume snapshot.tenant_name = getattr(tenant, "name", None) snapshot.host_name = getattr(volume, 'os-vol-host-attr:host', None) else: snapshots = [] return snapshots
def get_data(self): sort_dir = self.request.GET.get('sort_dir', 'asc') opts = { 'include_disabled': True, 'sort_dir': sort_dir, } marker = self.request.GET.get( tables.PackageDefinitionsTable._meta.pagination_param, None) opts = self.get_filters(opts) packages = [] page_size = utils.get_page_size(self.request) with api.handled_exceptions(self.request): packages, extra = pkg_api.package_list( self.request, marker=marker, filters=opts, paginate=True, page_size=page_size) if sort_dir == 'asc': self._more = extra else: packages = list(reversed(packages)) self._prev = extra if packages: if sort_dir == 'asc': backward_marker = packages[0].id opts['sort_dir'] = 'desc' else: backward_marker = packages[-1].id opts['sort_dir'] = 'asc' __, extra = pkg_api.package_list( self.request, filters=opts, paginate=True, marker=backward_marker, page_size=0) if sort_dir == 'asc': self._prev = extra else: self._more = extra # Add information about project tenant for admin user if self.request.user.is_superuser: tenants = [] try: tenants, _more = keystone.tenant_list(self.request) except Exception: exceptions.handle(self.request, _("Unable to retrieve project list.")) tenent_name_by_id = {tenant.id: tenant.name for tenant in tenants} for i, p in enumerate(packages): packages[i].tenant_name = tenent_name_by_id.get(p.owner_id) else: current_tenant = self.request.session['token'].tenant for i, package in enumerate(packages): if package.owner_id == current_tenant['id']: packages[i].tenant_name = current_tenant['name'] else: packages[i].tenant_name = _('UNKNOWN') return packages
def test_snapshots_tab(self): cinder.volume_snapshot_list(IsA(http.HttpRequest), search_opts={"all_tenants": True}).AndReturn( self.cinder_volume_snapshots.list() ) cinder.volume_list(IsA(http.HttpRequest), search_opts={"all_tenants": True}).AndReturn( self.cinder_volumes.list() ) keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(reverse("horizon:admin:volumes:snapshots_tab")) self.assertEqual(res.status_code, 200) self.assertTemplateUsed(res, "horizon/common/_detail_table.html") snapshots = res.context["volume_snapshots_table"].data self.assertItemsEqual(snapshots, self.cinder_volume_snapshots.list())
def get_volume_snapshots_data(self): if api.base.is_service_enabled(self.request, "volume"): try: snapshots = cinder.volume_snapshot_list(self.request, search_opts={"all_tenants": True}) volumes = cinder.volume_list(self.request, search_opts={"all_tenants": True}) volumes = dict((v.id, v) for v in volumes) except Exception: snapshots = [] volumes = {} exceptions.handle(self.request, _("Unable to retrieve " "volume snapshots.")) # Gather our tenants to correlate against volume IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _("Unable to retrieve volume project information.") exceptions.handle(self.request, msg) tenant_dict = dict([(t.id, t) for t in tenants]) for snapshot in snapshots: volume = volumes.get(snapshot.volume_id) tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) snapshot._volume = volume snapshot.tenant_name = getattr(tenant, "name", None) snapshot.host_name = getattr(volume, "os-vol-host-attr:host", None) else: snapshots = [] return sorted(snapshots, key=lambda snapshot: snapshot.tenant_name)
def overview(request): excluded_tenants = ['services', 'service', 'admin', 'demo'] c = trinityclient(request) hardwares_list = c.hardwares_list() clusters_list = c.clusters_list() tenants_list, more = keystone.tenant_list(request) clusters_detail = c.clusters_detail() tenant_name_list = [tenant.name for tenant in tenants_list] for i in range(len(clusters_detail)): if clusters_detail[i]['cluster'] in tenant_name_list: clusters_detail[i].update({'status': 'Active'}) else: clusters_detail[i].update({'status': 'No tenant'}) for tenant in tenants_list: if tenant.name not in clusters_list and tenant.name not in excluded_tenants: clusters_detail.append({ 'cluster': tenant.name, 'status': 'Active' }) data = [] for cluster in clusters_detail: datum = DictToObject(hardwares_list, cluster, default_keys=['cluster', 'status'], default_value=0) data.append(datum) return data
def __init__(self, request, *args, **kwargs): super(EditTypeAccessForm, self).__init__(request, *args, **kwargs) err_msg = _('Unable to retrieve volume type access list.') self.fields["member"] = forms.MultipleChoiceField( required=False, widget=forms.ThemableCheckboxSelectMultiple()) # Get list of available projects. try: all_projects, has_more = keystone.tenant_list(request) except Exception: exceptions.handle(request, err_msg) projects_list = [(project.id, project.name) for project in all_projects] self.fields["member"].choices = projects_list volume_type_id = self.initial.get('volume_type_id') volume_type_access = [] try: if volume_type_id: volume_type = cinder.volume_type_get(request, volume_type_id) if not volume_type.is_public: volume_type_access = [ project.project_id for project in cinder.volume_type_access_list(request, volume_type_id)] except Exception: exceptions.handle(request, err_msg) self.fields["member"].initial = volume_type_access
def __init__(self, request, *args, **kwargs): super(EditTypeAccessForm, self).__init__(request, *args, **kwargs) err_msg = _('Unable to retrieve volume type access list.') self.fields["member"] = forms.MultipleChoiceField( required=False, widget=forms.ThemableCheckboxSelectMultiple()) # Get list of available projects. try: all_projects, has_more = keystone.tenant_list(request) except Exception: exceptions.handle(request, err_msg) projects_list = [(project.id, project.name) for project in all_projects] self.fields["member"].choices = projects_list volume_type_id = self.initial.get('volume_type_id') volume_type_access = [] try: if volume_type_id: volume_type = cinder.volume_type_get(request, volume_type_id) if not volume_type.is_public: volume_type_access = [ project.project_id for project in cinder.volume_type_access_list( request, volume_type_id) ] except Exception: exceptions.handle(request, err_msg) self.fields["member"].initial = volume_type_access
def get_data(self): needs_gs = False if cinder.is_volume_service_enabled(self.request): try: marker, sort_dir = self._get_marker() snapshots, self._has_more_data, self._has_prev_data = \ cinder.volume_snapshot_list_paged( self.request, paginate=True, marker=marker, sort_dir=sort_dir, search_opts={'all_tenants': True}) volumes = cinder.volume_list(self.request, search_opts={'all_tenants': True}) volumes = dict((v.id, v) for v in volumes) except Exception: snapshots = [] volumes = {} exceptions.handle(self.request, _("Unable to retrieve " "volume snapshots.")) needs_gs = any( getattr(snapshot, 'group_snapshot_id', None) for snapshot in snapshots) if needs_gs: try: group_snapshots = cinder.group_snapshot_list( self.request, search_opts={'all_tenants': True}) group_snapshots = dict( (gs.id, gs) for gs in group_snapshots) except Exception: group_snapshots = {} exceptions.handle(self.request, _("Unable to retrieve group snapshots.")) # Gather our tenants to correlate against volume IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve project ' 'information of volume snapshots.') exceptions.handle(self.request, msg) tenant_dict = dict((t.id, t) for t in tenants) for snapshot in snapshots: volume = volumes.get(snapshot.volume_id) if needs_gs: group_snapshot = group_snapshots.get( snapshot.group_snapshot_id) snapshot.group_snapshot = group_snapshot else: snapshot.group_snapshot = None tenant_id = snapshot.project_id tenant = tenant_dict.get(tenant_id, None) snapshot._volume = volume snapshot.tenant_name = getattr(tenant, "name", None) snapshot.host_name = getattr(volume, 'os-vol-host-attr:host', None) else: snapshots = [] return snapshots
def get_data(self): needs_gs = False if cinder.is_volume_service_enabled(self.request): try: marker, sort_dir = self._get_marker() snapshots, self._has_more_data, self._has_prev_data = \ cinder.volume_snapshot_list_paged( self.request, paginate=True, marker=marker, sort_dir=sort_dir, search_opts={'all_tenants': True}) volumes = cinder.volume_list( self.request, search_opts={'all_tenants': True}) volumes = dict((v.id, v) for v in volumes) except Exception: snapshots = [] volumes = {} exceptions.handle(self.request, _("Unable to retrieve " "volume snapshots.")) needs_gs = any(getattr(snapshot, 'group_snapshot_id', None) for snapshot in snapshots) if needs_gs: try: group_snapshots = cinder.group_snapshot_list( self.request, search_opts={'all_tenants': True}) group_snapshots = dict((gs.id, gs) for gs in group_snapshots) except Exception: group_snapshots = {} exceptions.handle(self.request, _("Unable to retrieve group snapshots.")) # Gather our tenants to correlate against volume IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve project ' 'information of volume snapshots.') exceptions.handle(self.request, msg) tenant_dict = dict((t.id, t) for t in tenants) for snapshot in snapshots: volume = volumes.get(snapshot.volume_id) if needs_gs: group_snapshot = group_snapshots.get( snapshot.group_snapshot_id) snapshot.group_snapshot = group_snapshot else: snapshot.group_snapshot = None tenant_id = snapshot.project_id tenant = tenant_dict.get(tenant_id, None) snapshot._volume = volume snapshot.tenant_name = getattr(tenant, "name", None) snapshot.host_name = getattr( volume, 'os-vol-host-attr:host', None) else: snapshots = [] return snapshots
def test_snapshots_tab(self): cinder.volume_snapshot_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}). \ AndReturn(self.cinder_volume_snapshots.list()) cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) keystone.tenant_list(IsA(http.HttpRequest)). \ AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(reverse('horizon:admin:volumes:snapshots_tab')) self.assertEqual(res.status_code, 200) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') snapshots = res.context['volume_snapshots_table'].data self.assertItemsEqual(snapshots, self.cinder_volume_snapshots.list())
def _task_get_tenants(): # Gather our tenants to correlate against IDs try: tmp_tenants, __ = keystone.tenant_list(self.request) tenants.extend(tmp_tenants) tenant_dict.update([(t.id, t) for t in tenants]) except Exception: msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg)
def test_delete_volume_type(self): volume_type = self.volume_types.first() formData = {"action": "volume_types__delete__%s" % volume_type.id} cinder.volume_list(IsA(http.HttpRequest), search_opts={"all_tenants": True}).AndReturn(self.volumes.list()) api.nova.server_list(IsA(http.HttpRequest), search_opts={"all_tenants": True}).AndReturn( [self.servers.list(), False] ) cinder.volume_type_list(IsA(http.HttpRequest)).AndReturn(self.volume_types.list()) cinder.volume_type_delete(IsA(http.HttpRequest), str(volume_type.id)) keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.post(reverse("horizon:admin:volumes:index"), formData) redirect = reverse("horizon:admin:volumes:index") self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, redirect)
def _test_index_paginated(self, marker, sort_dir, volumes, url, has_more, has_prev): cinder.volume_list_paged( IsA(http.HttpRequest), sort_dir=sort_dir, marker=marker, paginate=True, search_opts={"all_tenants": True} ).AndReturn([volumes, has_more, has_prev]) api.nova.server_list(IsA(http.HttpRequest), search_opts={"all_tenants": True}).AndReturn( [self.servers.list(), False] ) keystone.tenant_list(IsA(http.HttpRequest)).AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(url) self.assertTemplateUsed(res, "admin/volumes/index.html") self.assertEqual(res.status_code, 200) self.mox.UnsetStubs() return res
def test_snapshots_tab(self): cinder.volume_snapshot_list_paged( IsA(http.HttpRequest), paginate=True, marker=None, sort_dir='desc', search_opts={'all_tenants': True},).AndReturn( [self.cinder_volume_snapshots.list(), False, False]) cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) keystone.tenant_list(IsA(http.HttpRequest)). \ AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(reverse('horizon:admin:volumes:snapshots_tab')) self.assertEqual(res.status_code, 200) self.assertTemplateUsed(res, 'horizon/common/_detail_table.html') snapshots = res.context['volume_snapshots_table'].data self.assertItemsEqual(snapshots, self.cinder_volume_snapshots.list())
def _task_get_tenants(): # Gather our tenants to correlate against IDs try: tmp_tenants, __ = keystone.tenant_list(self.request) tenants.extend(tmp_tenants) tenant_dict.update([(t.id, t) for t in tenants]) except Exception: msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg)
def _get_project_id(self, project_name): project_list, has_more_data = keystone.tenant_list(self.request) project_id = 0 for project_row in project_list: if project_name == project_row.name: project_id = project_row.id break return project_id
def test_snapshots_tab(self): cinder.volume_snapshot_list_paged( IsA(http.HttpRequest), paginate=True, marker=None, sort_dir='desc', search_opts={'all_tenants': True},).AndReturn( [self.cinder_volume_snapshots.list(), False, False]) cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) keystone.tenant_list(IsA(http.HttpRequest)). \ AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() url = reverse('horizon:admin:volumes:snapshots_tab') res = self.client.get(urlunquote(url)) self.assertEqual(res.status_code, 200) self.assertTemplateUsed(res, 'admin/volumes/index.html') snapshots = res.context['volume_snapshots_table'].data self.assertItemsEqual(snapshots, self.cinder_volume_snapshots.list())
def get_volumes_data(self): volumes = [] search_opts = {'all_tenants': True} prev_marker = self.request.GET.get( volumes_tables.VolumesTable._meta.prev_pagination_param) if prev_marker is not None: sort_dir = 'asc' marker = prev_marker else: sort_dir = 'desc' marker = self.request.GET.get( volumes_tables.VolumesTable._meta.pagination_param) search_opts['sort_dir']=sort_dir search_opts['marker']=marker page_size = utils.get_page_size(self.request) or getattr(settings, 'API_RESULT_LIMIT', 1000) search_opts['limit']=page_size + 1 volumes = self._get_volumes(search_opts) self._prev = False self._more = False if len(volumes) > page_size: volumes.pop() self._more = True if marker is not None: self._prev = True elif sort_dir == 'asc' and marker is not None: self._more = True elif marker is not None: self._prev = True if prev_marker is not None: volumes = sorted(volumes, key=attrgetter('created_at'), reverse=True) instances = self._get_instances(search_opts={'all_tenants': True}) volume_ids_with_snapshots = self._get_volumes_ids_with_snapshots( search_opts={'all_tenants': True}) self._set_volume_attributes( volumes, instances, volume_ids_with_snapshots) # Gather our tenants to correlate against IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = SortedDict([(t.id, t) for t in tenants]) for volume in volumes: tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) volume.tenant_name = getattr(tenant, "name", None) return volumes
def _get_tenant_list(self): if not hasattr(self, "_tenants"): try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve instance project information.') exceptions.handle(self.request, msg) tenant_dict = SortedDict([(t.id, t) for t in tenants]) self._tenants = tenant_dict return self._tenants
def _test_snapshots_index_paginated(self, marker, sort_dir, snapshots, url, has_more, has_prev): cinder.volume_snapshot_list_paged( IsA(http.HttpRequest), paginate=True, marker=marker, sort_dir=sort_dir, search_opts={'all_tenants': True}) \ .AndReturn([snapshots, has_more, has_prev]) cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).\ AndReturn(self.cinder_volumes.list()) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.get(url) self.assertTemplateUsed(res, 'admin/volumes/index.html') self.assertEqual(res.status_code, 200) self.mox.UnsetStubs() return res
def preload_all_tenants(self): """Preloads all teannts into dictionary. It's more effective to preload all tenants, rather the fetching many tenants by separate API get calls. """ tenants, more = keystone.tenant_list(self._request) # Cache all tenants on right indexes, this is more effective than to # obtain large number of tenants one by one by keystone.tenant_get for t in tenants: self._tenants[t.id] = t
def set_tenant_name_to_objects(request, objects): try: tenants, has_more = keystone.tenant_list(request) except Exception: tenants = [] msg = _('Unable to retrieve share project information.') exceptions.handle(request, msg) tenant_dict = dict([(t.id, t) for t in tenants]) for obj in objects: tenant_id = getattr(obj, "project_id", None) tenant = tenant_dict.get(tenant_id, None) obj.tenant_name = getattr(tenant, "name", None)
def test_delete_volume_type(self): volume_type = self.volume_types.first() formData = {'action': 'volume_types__delete__%s' % volume_type.id} cinder.volume_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}).AndReturn(self.volumes.list()) api.nova.server_list(IsA(http.HttpRequest), search_opts={ 'all_tenants': True}) \ .AndReturn([self.servers.list(), False]) cinder.volume_type_list(IsA(http.HttpRequest)).\ AndReturn(self.volume_types.list()) cinder.volume_type_delete(IsA(http.HttpRequest), str(volume_type.id)) keystone.tenant_list(IsA(http.HttpRequest)) \ .AndReturn([self.tenants.list(), False]) self.mox.ReplayAll() res = self.client.post(reverse('horizon:admin:volumes:index'), formData) redirect = reverse('horizon:admin:volumes:index') self.assertNoFormErrors(res) self.assertRedirectsNoFollow(res, redirect)
def get_data(self): summary = api.cloudkittyclient(self.request).report.get_summary( groupby=['tenant_id'], all_tenants=True)['summary'] tenants, _ = api_keystone.tenant_list(self.request) tenants = {tenant.id: tenant.name for tenant in tenants} summary.append({ 'tenant_id': 'ALL', 'rate': sum([float(item['rate']) for item in summary]), }) summary = api.identify(summary, key='tenant_id') for tenant in summary: tenant['name'] = tenants.get(tenant.id, '-') summary[-1]['name'] = 'Cloud Total' return summary
def __init__(self, request, *args, **kwargs): super(CreateShareNetworkForm, self).__init__(request, *args, **kwargs) net_choices = neutron.network_list(request) subnet_choices = neutron.subnet_list(request) self.fields['neutron_net_id'].choices = [(' ', ' ')] + \ [(choice.id, choice.name_or_id) for choice in net_choices] self.fields['neutron_subnet_id'].choices = [(' ', ' ')] + \ [(choice.id, choice.name_or_id) for choice in subnet_choices] tenants, has_more = keystone.tenant_list(request) self.fields['project'].choices = [(' ', ' ')] + \ [(choice.id, choice.name) for choice in tenants]
def get_project_list(request): """ Get a list of projects :param request: the request which the dashboard is using :return: list with projects """ try: # admin = True (all projects), admin = False (user projects) response_text = keystone.tenant_list(request, admin=True) except Exception as exc: response_text = '[]' exceptions.handle(request, _(exc.message)) projects_list = [] projects = response_text[0] # Iterate projects for project in projects: projects_list.append((project.id, project.name)) return projects_list
def get_volumes_total(self): self._prev = False volumes = self._get_volumes() instances = self._get_instances() self._set_attachments_string(volumes, instances) try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = SortedDict([(t.id, t) for t in tenants]) for volume in volumes: tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) volume.tenant_name = getattr(tenant, "name", None) return volumes
def set_project_name_to_objects(request, objects): global PROJECTS, TIME try: # NOTE(vponomaryov): we will use saved values making lots of requests # in short period of time. 'memoized' is not suitable here now = timeutils.now() if TIME is None: TIME = now if not PROJECTS or now > TIME + 20: projects, has_more = keystone.tenant_list(request) PROJECTS = {t.id: t for t in projects} TIME = now except Exception: msg = _('Unable to retrieve list of projects.') exceptions.handle(request, msg) for obj in objects: project_id = getattr(obj, "project_id", None) project = PROJECTS.get(project_id, None) obj.project_name = getattr(project, "name", None)
def get_data(self): if cinder.is_volume_service_enabled(self.request): try: marker, sort_dir = self._get_marker() snapshots, self._has_more_data, self._has_prev_data = \ cinder.volume_snapshot_list_paged( self.request, paginate=True, marker=marker, sort_dir=sort_dir, search_opts={'all_tenants': True}) volumes = cinder.volume_list( self.request, search_opts={'all_tenants': True}) volumes = dict((v.id, v) for v in volumes) except Exception: snapshots = [] volumes = {} exceptions.handle(self.request, _("Unable to retrieve " "volume snapshots.")) # Gather our tenants to correlate against volume IDs try: tenants, has_more = keystone.tenant_list(self.request) except Exception: tenants = [] msg = _('Unable to retrieve volume project information.') exceptions.handle(self.request, msg) tenant_dict = dict([(t.id, t) for t in tenants]) for snapshot in snapshots: volume = volumes.get(snapshot.volume_id) tenant_id = getattr(volume, 'os-vol-tenant-attr:tenant_id', None) tenant = tenant_dict.get(tenant_id, None) snapshot._volume = volume snapshot.tenant_name = getattr(tenant, "name", None) snapshot.host_name = getattr( volume, 'os-vol-host-attr:host', None) else: snapshots = [] return sorted(snapshots, key=lambda snapshot: snapshot.tenant_name or '')
def get_volumes_data(self): volumes = self._get_volumes(search_opts={'all_tenants': 1}) instances = self._get_instances() self._set_id_if_nameless(volumes, instances) self._set_attachments_string(volumes, instances) # Gather our tenants to correlate against IDs try: tenants = keystone.tenant_list(self.request, admin=True) except: tenants = [] msg = _('Unable to retrieve volume tenant information.') exceptions.handle(self.request, msg) tenant_dict = SortedDict([(t.id, t) for t in tenants]) for volume in volumes: tenant_id = getattr(volume, "os-vol-tenant-attr:tenant_id", None) tenant = tenant_dict.get(tenant_id, None) volume.tenant_name = getattr(tenant, "name", None) return volumes
def delete(self, request, obj_id): tenant_ref = None tenants, dummy = keystone_api.tenant_list(request, user=obj_id) for tmpten in tenants: tenant_managers = get_project_managers(request, tmpten.id) if len(tenant_managers) == 1 and tenant_managers[0].id == obj_id: tenant_ref = tmpten.name if tenant_ref: failure = AuthorizationFailure() failure._safe_message=_("Cannot delete unique admin for %s") % tenant_ref raise failure else: with transaction.atomic(): Registration.objects.filter(userid=obj_id).delete() super(DeleteUsersAction, self).delete(request, obj_id)