~ubuntu-branches/ubuntu/precise/horizon/precise-updates

« back to all changes in this revision

Viewing changes to horizon/horizon/dashboards/syspanel/tenants/views.py

  • Committer: Package Import Robot
  • Author(s): Chuck Short
  • Date: 2012-02-17 10:12:25 UTC
  • mfrom: (1.1.6)
  • Revision ID: package-import@ubuntu.com-20120217101225-5wulil2mv7f2nvnb
Tags: 2012.1~e4~20120217.1354-0ubuntu1
* debian/patches/openstack-config-settings.patch: Refreshed.
* debian/copyright: Updated copyright.
* debian/rules: Diable tests since it doesnt work without a
  virtualenv.
* New upstream release.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
# vim: tabstop=4 shiftwidth=4 softtabstop=4
2
 
 
3
 
# Copyright 2011 United States Government as represented by the
4
 
# Administrator of the National Aeronautics and Space Administration.
5
 
# All Rights Reserved.
6
 
#
7
 
# Copyright 2011 Nebula, Inc.
8
 
#
9
 
#    Licensed under the Apache License, Version 2.0 (the "License"); you may
10
 
#    not use this file except in compliance with the License. You may obtain
11
 
#    a copy of the License at
12
 
#
13
 
#         http://www.apache.org/licenses/LICENSE-2.0
14
 
#
15
 
#    Unless required by applicable law or agreed to in writing, software
16
 
#    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
17
 
#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
18
 
#    License for the specific language governing permissions and limitations
19
 
#    under the License.
20
 
 
21
 
import logging
22
 
import operator
23
 
 
24
 
from django import http
25
 
from django.contrib import messages
26
 
from django.core.urlresolvers import reverse
27
 
from django.utils.translation import ugettext as _
28
 
from keystoneclient import exceptions as api_exceptions
29
 
 
30
 
from horizon import api
31
 
from horizon import exceptions
32
 
from horizon import forms
33
 
from horizon import tables
34
 
from horizon import usage
35
 
from .forms import AddUser, CreateTenant, UpdateTenant, UpdateQuotas
36
 
from .tables import TenantsTable, TenantUsersTable, AddUsersTable
37
 
 
38
 
 
39
 
LOG = logging.getLogger(__name__)
40
 
 
41
 
 
42
 
class IndexView(tables.DataTableView):
43
 
    table_class = TenantsTable
44
 
    template_name = 'syspanel/tenants/index.html'
45
 
 
46
 
    def get_data(self):
47
 
        tenants = []
48
 
        try:
49
 
            tenants = api.tenant_list(self.request)
50
 
        except api_exceptions.AuthorizationFailure, e:
51
 
            LOG.exception("Unauthorized attempt to list tenants.")
52
 
            messages.error(self.request, _('Unable to get tenant info: %s')
53
 
                                         % e.message)
54
 
        except Exception, e:
55
 
            LOG.exception('Exception while getting tenant list')
56
 
            if not hasattr(e, 'message'):
57
 
                e.message = str(e)
58
 
            messages.error(self.request, _('Unable to get tenant info: %s')
59
 
                                         % e.message)
60
 
        tenants.sort(key=lambda x: x.id, reverse=True)
61
 
        return tenants
62
 
 
63
 
 
64
 
class CreateView(forms.ModalFormView):
65
 
    form_class = CreateTenant
66
 
    template_name = 'syspanel/tenants/create.html'
67
 
 
68
 
 
69
 
class UpdateView(forms.ModalFormView):
70
 
    form_class = UpdateTenant
71
 
    template_name = 'syspanel/tenants/update.html'
72
 
    context_object_name = 'tenant'
73
 
 
74
 
    def get_object(self, *args, **kwargs):
75
 
        tenant_id = kwargs['tenant_id']
76
 
        try:
77
 
            return api.tenant_get(self.request, tenant_id)
78
 
        except Exception as e:
79
 
            LOG.exception('Error fetching tenant with id "%s"' % tenant_id)
80
 
            messages.error(self.request, _('Unable to update tenant: %s')
81
 
                                           % e.message)
82
 
            raise http.Http404("Tenant with ID %s not found." % tenant_id)
83
 
 
84
 
    def get_initial(self):
85
 
        return {'id': self.object.id,
86
 
                'name': self.object.name,
87
 
                'description': getattr(self.object, "description", ""),
88
 
                'enabled': self.object.enabled}
89
 
 
90
 
 
91
 
class UsersView(tables.MultiTableView):
92
 
    table_classes = (TenantUsersTable, AddUsersTable)
93
 
    template_name = 'syspanel/tenants/users.html'
94
 
 
95
 
    def get_data(self, *args, **kwargs):
96
 
        tenant_id = self.kwargs["tenant_id"]
97
 
        try:
98
 
            self.tenant = api.keystone.tenant_get(self.request, tenant_id)
99
 
            self.all_users = api.keystone.user_list(self.request)
100
 
            self.tenant_users = api.keystone.user_list(self.request, tenant_id)
101
 
        except:
102
 
            redirect = reverse("horizon:syspanel:tenants:index")
103
 
            exceptions.handle(self.request,
104
 
                              _("Unable to retrieve users."),
105
 
                              redirect=redirect)
106
 
        return super(UsersView, self).get_data(*args, **kwargs)
107
 
 
108
 
    def get_tenant_users_data(self):
109
 
        return self.tenant_users
110
 
 
111
 
    def get_add_users_data(self):
112
 
        tenant_user_ids = [user.id for user in self.tenant_users]
113
 
        return [user for user in self.all_users if
114
 
                user.id not in tenant_user_ids]
115
 
 
116
 
    def get_context_data(self, **kwargs):
117
 
        context = super(UsersView, self).get_context_data(**kwargs)
118
 
        context['tenant'] = self.tenant
119
 
        return context
120
 
 
121
 
 
122
 
class AddUserView(forms.ModalFormView):
123
 
    form_class = AddUser
124
 
    template_name = 'syspanel/tenants/add_user.html'
125
 
    context_object_name = 'tenant'
126
 
 
127
 
    def get_object(self, *args, **kwargs):
128
 
        return api.keystone.tenant_get(self.request, kwargs["tenant_id"])
129
 
 
130
 
    def get_context_data(self, **kwargs):
131
 
        context = super(AddUserView, self).get_context_data(**kwargs)
132
 
        context['tenant_id'] = self.kwargs["tenant_id"]
133
 
        context['user_id'] = self.kwargs["user_id"]
134
 
        return context
135
 
 
136
 
    def get_form_kwargs(self):
137
 
        kwargs = super(AddUserView, self).get_form_kwargs()
138
 
        try:
139
 
            roles = api.keystone.role_list(self.request)
140
 
        except:
141
 
            redirect = reverse("horizon:syspanel:tenants:users",
142
 
                               args=(self.kwargs["tenant_id"],))
143
 
            exceptions.handle(self.request,
144
 
                              _("Unable to retrieve roles."),
145
 
                              redirect=redirect)
146
 
        roles.sort(key=operator.attrgetter("id"))
147
 
        kwargs['roles'] = roles
148
 
        return kwargs
149
 
 
150
 
    def get_initial(self):
151
 
        default_role = api.keystone.get_default_role(self.request)
152
 
        return {'tenant_id': self.kwargs['tenant_id'],
153
 
                'user_id': self.kwargs['user_id'],
154
 
                'role_id': getattr(default_role, "id", None)}
155
 
 
156
 
 
157
 
class QuotasView(forms.ModalFormView):
158
 
    form_class = UpdateQuotas
159
 
    template_name = 'syspanel/tenants/quotas.html'
160
 
    context_object_name = 'tenant'
161
 
 
162
 
    def get_object(self, *args, **kwargs):
163
 
        return api.keystone.tenant_get(self.request, kwargs["tenant_id"])
164
 
 
165
 
    def get_initial(self):
166
 
        quotas = api.nova.tenant_quota_get(self.request,
167
 
                                               self.kwargs['tenant_id'])
168
 
        return {
169
 
            'tenant_id': self.kwargs['tenant_id'],
170
 
            'metadata_items': quotas.metadata_items,
171
 
            'injected_file_content_bytes': quotas.injected_file_content_bytes,
172
 
            'volumes': quotas.volumes,
173
 
            'gigabytes': quotas.gigabytes,
174
 
            'ram': int(quotas.ram),
175
 
            'floating_ips': quotas.floating_ips,
176
 
            'instances': quotas.instances,
177
 
            'injected_files': quotas.injected_files,
178
 
            'cores': quotas.cores}
179
 
 
180
 
 
181
 
class TenantUsageView(usage.UsageView):
182
 
    table_class = usage.TenantUsageTable
183
 
    usage_class = usage.TenantUsage
184
 
    template_name = 'syspanel/tenants/usage.html'
185
 
 
186
 
    def get_data(self):
187
 
        super(TenantUsageView, self).get_data()
188
 
        return self.usage.get_instances()