Esempio n. 1
0
    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)
Esempio n. 2
0
    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())
Esempio n. 3
0
    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
Esempio n. 4
0
    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())
Esempio n. 5
0
    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
Esempio n. 6
0
    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)
Esempio n. 7
0
    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
Esempio n. 8
0
    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())
Esempio n. 9
0
    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')
Esempio n. 10
0
    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
Esempio n. 11
0
    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
Esempio n. 12
0
    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())
Esempio n. 13
0
    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)
Esempio n. 14
0
    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
Esempio n. 15
0
    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
Esempio n. 16
0
    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)
Esempio n. 17
0
    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
Esempio n. 18
0
    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())
Esempio n. 19
0
    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
Esempio n. 21
0
    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())
Esempio n. 22
0
    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)
Esempio n. 23
0
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
Esempio n. 24
0
    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
Esempio n. 25
0
    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
Esempio n. 26
0
    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
Esempio n. 27
0
    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
Esempio n. 28
0
    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())
Esempio n. 29
0
 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)
Esempio n. 30
0
    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)
Esempio n. 31
0
    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
Esempio n. 32
0
    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())
Esempio n. 33
0
 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)
Esempio n. 34
0
    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
Esempio n. 35
0
    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())
Esempio n. 36
0
    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
Esempio n. 37
0
 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
Esempio n. 38
0
    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
Esempio n. 39
0
    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
Esempio n. 40
0
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)
Esempio n. 41
0
    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)
Esempio n. 42
0
    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
Esempio n. 43
0
 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]
Esempio n. 44
0
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
Esempio n. 45
0
    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
Esempio n. 46
0
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)
Esempio n. 47
0
    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 '')
Esempio n. 48
0
    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
Esempio n. 49
0
    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)