1
# vim: tabstop=4 shiftwidth=4 softtabstop=4
3
# Copyright 2012 United States Government as represented by the
4
# Administrator of the National Aeronautics and Space Administration.
7
# Copyright 2012 Nebula, Inc.
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
13
# http://www.apache.org/licenses/LICENSE-2.0
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
24
from django.core.urlresolvers import reverse
25
from django.utils.translation import ugettext as _
27
from horizon import api
28
from horizon import exceptions
29
from horizon import forms
30
from horizon import tables
31
from horizon import usage
32
from .forms import AddUser, CreateTenant, UpdateTenant, UpdateQuotas
33
from .tables import TenantsTable, TenantUsersTable, AddUsersTable
36
LOG = logging.getLogger(__name__)
39
class IndexView(tables.DataTableView):
40
table_class = TenantsTable
41
template_name = 'syspanel/projects/index.html'
46
tenants = api.keystone.tenant_list(self.request, admin=True)
48
exceptions.handle(self.request)
49
tenants.sort(key=lambda x: x.id, reverse=True)
53
class CreateView(forms.ModalFormView):
54
form_class = CreateTenant
55
template_name = 'syspanel/projects/create.html'
58
class UpdateView(forms.ModalFormView):
59
form_class = UpdateTenant
60
template_name = 'syspanel/projects/update.html'
61
context_object_name = 'tenant'
63
def get_object(self, *args, **kwargs):
64
tenant_id = kwargs['tenant_id']
66
return api.keystone.tenant_get(self.request, tenant_id, admin=True)
68
redirect = reverse("horizon:syspanel:projects:index")
69
exceptions.handle(self.request,
70
_('Unable to retrieve tenant.'),
73
def get_initial(self):
74
return {'id': self.object.id,
75
'name': self.object.name,
76
'description': getattr(self.object, "description", ""),
77
'enabled': self.object.enabled}
80
class UsersView(tables.MultiTableView):
81
table_classes = (TenantUsersTable, AddUsersTable)
82
template_name = 'syspanel/projects/users.html'
84
def _get_shared_data(self, *args, **kwargs):
85
tenant_id = self.kwargs["tenant_id"]
86
if not hasattr(self, "_shared_data"):
88
tenant = api.keystone.tenant_get(self.request,
91
all_users = api.keystone.user_list(self.request)
92
tenant_users = api.keystone.user_list(self.request, tenant_id)
93
self._shared_data = {'tenant': tenant,
94
'all_users': all_users,
95
'tenant_users': tenant_users}
97
redirect = reverse("horizon:syspanel:projects:index")
98
exceptions.handle(self.request,
99
_("Unable to retrieve users."),
101
return self._shared_data
103
def get_tenant_users_data(self):
104
return self._get_shared_data()["tenant_users"]
106
def get_add_users_data(self):
107
tenant_users = self._get_shared_data()["tenant_users"]
108
all_users = self._get_shared_data()["all_users"]
109
tenant_user_ids = [user.id for user in tenant_users]
110
return filter(lambda u: u.id not in tenant_user_ids, all_users)
112
def get_context_data(self, **kwargs):
113
context = super(UsersView, self).get_context_data(**kwargs)
114
context['tenant'] = self._get_shared_data()["tenant"]
118
class AddUserView(forms.ModalFormView):
120
template_name = 'syspanel/projects/add_user.html'
121
context_object_name = 'tenant'
123
def get_object(self, *args, **kwargs):
124
return api.keystone.tenant_get(self.request,
128
def get_context_data(self, **kwargs):
129
context = super(AddUserView, self).get_context_data(**kwargs)
130
context['tenant_id'] = self.kwargs["tenant_id"]
131
context['user_id'] = self.kwargs["user_id"]
134
def get_form_kwargs(self):
135
kwargs = super(AddUserView, self).get_form_kwargs()
137
roles = api.keystone.role_list(self.request)
139
redirect = reverse("horizon:syspanel:projects:users",
140
args=(self.kwargs["tenant_id"],))
141
exceptions.handle(self.request,
142
_("Unable to retrieve roles."),
144
roles.sort(key=operator.attrgetter("id"))
145
kwargs['roles'] = roles
148
def get_initial(self):
149
default_role = api.keystone.get_default_role(self.request)
150
return {'tenant_id': self.kwargs['tenant_id'],
151
'user_id': self.kwargs['user_id'],
152
'role_id': getattr(default_role, "id", None)}
155
class QuotasView(forms.ModalFormView):
156
form_class = UpdateQuotas
157
template_name = 'syspanel/projects/quotas.html'
158
context_object_name = 'tenant'
160
def get_object(self, *args, **kwargs):
161
return api.keystone.tenant_get(self.request,
165
def get_initial(self):
166
quotas = api.nova.tenant_quota_get(self.request,
167
self.kwargs['tenant_id'])
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}
181
class TenantUsageView(usage.UsageView):
182
table_class = usage.TenantUsageTable
183
usage_class = usage.TenantUsage
184
template_name = 'syspanel/projects/usage.html'
187
super(TenantUsageView, self).get_data()
188
return self.usage.get_instances()