Fixes for LP bugs 879626, 879633, and 879641.
Tenant delete works properly. And since keystone support for tenant/user names is spotty, changes things to make user and tenant names immutable in the dashboard.
This commit is contained in:
parent
c0fdb7b704
commit
14c0ce55e8
|
@ -609,6 +609,10 @@ def tenant_get(request, tenant_id):
|
|||
return Tenant(account_api(request).tenants.get(tenant_id))
|
||||
|
||||
|
||||
def tenant_delete(request, tenant_id):
|
||||
account_api(request).tenants.delete(tenant_id)
|
||||
|
||||
|
||||
@check_openstackx
|
||||
def tenant_list(request):
|
||||
return [Tenant(t) for t in account_api(request).tenants.list()]
|
||||
|
|
|
@ -111,7 +111,8 @@ class CreateTenant(forms.SelfHandlingForm):
|
|||
class UpdateTenant(forms.SelfHandlingForm):
|
||||
id = forms.CharField(label="ID",
|
||||
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
|
||||
name = forms.CharField(label="Name")
|
||||
name = forms.CharField(label="Name",
|
||||
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
|
||||
description = forms.CharField(widget=forms.widgets.Textarea(),
|
||||
label="Description")
|
||||
enabled = forms.BooleanField(label="Enabled")
|
||||
|
@ -126,7 +127,7 @@ class UpdateTenant(forms.SelfHandlingForm):
|
|||
data['enabled'])
|
||||
messages.success(request,
|
||||
'%s was successfully updated.'
|
||||
% data['id'])
|
||||
% data['name'])
|
||||
except api_exceptions.ApiException, e:
|
||||
LOG.exception('ApiException while updating tenant\n'
|
||||
'Id: "%s", Name: "%s", Description: "%s", Enabled "%s"' %
|
||||
|
@ -171,9 +172,32 @@ class UpdateQuotas(forms.SelfHandlingForm):
|
|||
return redirect('syspanel_tenants')
|
||||
|
||||
|
||||
|
||||
class DeleteTenant(forms.SelfHandlingForm):
|
||||
tenant_id = forms.CharField(required=True)
|
||||
|
||||
def handle(self, request, data):
|
||||
tenant_id = data['tenant_id']
|
||||
try:
|
||||
api.tenant_delete(request, tenant_id)
|
||||
messages.info(request, _('Successfully deleted tenant %(tenant)s.')
|
||||
% {"tenant": tenant_id})
|
||||
except Exception, e:
|
||||
LOG.exception("Error deleting tenant")
|
||||
messages.error(request,
|
||||
_("Error deleting tenant: %s") % e.message)
|
||||
return redirect(request.build_absolute_uri())
|
||||
|
||||
|
||||
@login_required
|
||||
@enforce_admin_access
|
||||
def index(request):
|
||||
form, handled = DeleteTenant.maybe_handle(request)
|
||||
if handled:
|
||||
return handled
|
||||
|
||||
tenant_delete_form = DeleteTenant()
|
||||
|
||||
tenants = []
|
||||
try:
|
||||
tenants = api.tenant_list(request)
|
||||
|
@ -184,6 +208,7 @@ def index(request):
|
|||
return render_to_response(
|
||||
'django_openstack/syspanel/tenants/index.html', {
|
||||
'tenants': tenants,
|
||||
'tenant_delete_form': tenant_delete_form,
|
||||
}, context_instance=template.RequestContext(request))
|
||||
|
||||
|
||||
|
|
|
@ -50,7 +50,25 @@ class UserForm(forms.Form):
|
|||
self.fields['tenant_id'].choices = [[tenant.id, tenant.id]
|
||||
for tenant in tenant_list]
|
||||
|
||||
id = forms.CharField(label="ID (username)")
|
||||
name = forms.CharField(label="Name")
|
||||
email = forms.CharField(label="Email")
|
||||
password = forms.CharField(label="Password",
|
||||
widget=forms.PasswordInput(render_value=False),
|
||||
required=False)
|
||||
tenant_id = forms.ChoiceField(label="Primary Tenant")
|
||||
|
||||
|
||||
class UserUpdateForm(forms.Form):
|
||||
def __init__(self, *args, **kwargs):
|
||||
tenant_list = kwargs.pop('tenant_list', None)
|
||||
super(UserUpdateForm, self).__init__(*args, **kwargs)
|
||||
self.fields['tenant_id'].choices = [[tenant.id, tenant.id]
|
||||
for tenant in tenant_list]
|
||||
|
||||
id = forms.CharField(label="ID",
|
||||
widget=forms.TextInput(attrs={'readonly': 'readonly'}))
|
||||
# FIXME: keystone doesn't return the username from a get API call.
|
||||
#name = forms.CharField(label="Name")
|
||||
email = forms.CharField(label="Email")
|
||||
password = forms.CharField(label="Password",
|
||||
widget=forms.PasswordInput(render_value=False),
|
||||
|
@ -123,7 +141,7 @@ def index(request):
|
|||
def update(request, user_id):
|
||||
if request.method == "POST":
|
||||
tenants = api.tenant_list(request)
|
||||
form = UserForm(request.POST, tenant_list=tenants)
|
||||
form = UserUpdateForm(request.POST, tenant_list=tenants)
|
||||
if form.is_valid():
|
||||
user = form.clean()
|
||||
updated = []
|
||||
|
@ -154,20 +172,10 @@ def update(request, user_id):
|
|||
else:
|
||||
u = api.user_get(request, user_id)
|
||||
tenants = api.tenant_list(request)
|
||||
try:
|
||||
# FIXME
|
||||
email = u.email
|
||||
except:
|
||||
email = ''
|
||||
|
||||
try:
|
||||
tenant_id = u.tenantId
|
||||
except:
|
||||
tenant_id = None
|
||||
form = UserForm(initial={'id': user_id,
|
||||
'tenant_id': tenant_id,
|
||||
'email': email},
|
||||
tenant_list=tenants)
|
||||
form = UserUpdateForm(tenant_list=tenants,
|
||||
initial={'id': user_id,
|
||||
'tenant_id': getattr(u, 'tenantId', None),
|
||||
'email': getattr(u, 'email', '')})
|
||||
return render_to_response(
|
||||
'django_openstack/syspanel/users/update.html', {
|
||||
'form': form,
|
||||
|
@ -191,32 +199,32 @@ def create(request):
|
|||
user = form.clean()
|
||||
# TODO Make this a real request
|
||||
try:
|
||||
LOG.info('Creating user with id "%s"' % user['id'])
|
||||
api.user_create(request,
|
||||
user['id'],
|
||||
user['email'],
|
||||
user['password'],
|
||||
user['tenant_id'],
|
||||
True)
|
||||
LOG.info('Creating user with name "%s"' % user['name'])
|
||||
new_user = api.user_create(request,
|
||||
user['name'],
|
||||
user['email'],
|
||||
user['password'],
|
||||
user['tenant_id'],
|
||||
True)
|
||||
messages.success(request,
|
||||
'%s was successfully created.'
|
||||
% user['id'])
|
||||
'User "%s" was successfully created.'
|
||||
% user['name'])
|
||||
try:
|
||||
api.role_add_for_tenant_user(
|
||||
request, user['tenant_id'], user['id'],
|
||||
request, user['tenant_id'], new_user.id,
|
||||
settings.OPENSTACK_KEYSTONE_DEFAULT_ROLE)
|
||||
except api_exceptions.ApiException, e:
|
||||
LOG.exception('ApiException while assigning\
|
||||
role to new user: %s' % user['id'])
|
||||
messages.error(request, 'Error assigning role to user: %s'
|
||||
role to new user: %s' % new_user.id)
|
||||
messages.error(request, 'Error assigning role to user: %s'
|
||||
% e.message)
|
||||
|
||||
return redirect('syspanel_users')
|
||||
|
||||
except api_exceptions.ApiException, e:
|
||||
LOG.exception('ApiException while creating user\n'
|
||||
'id: "%s", email: "%s", tenant_id: "%s"' %
|
||||
(user['id'], user['email'], user['tenant_id']))
|
||||
'name: "%s", email: "%s", tenant_id: "%s"' %
|
||||
(user['name'], user['email'], user['tenant_id']))
|
||||
messages.error(request,
|
||||
'Error creating user: %s'
|
||||
% e.message)
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
{% for hidden in form.hidden_fields %}
|
||||
{{hidden}}
|
||||
{% endfor %}
|
||||
<input name="tenant" type="hidden" value="{{tenant.id}}" />
|
||||
<input id="enable_{{tenant.id}}" class="enable" title="Tenant: {{tenant.id}}" type="submit" value="Delete" />
|
||||
<input name="tenant_id" type="hidden" value="{{tenant.id}}" />
|
||||
<input id="delete_{{tenant.id}}" class="delete" title="Tenant: {{tenant.id}}" type="submit" value="Delete" />
|
||||
</form>
|
||||
|
||||
|
|
Loading…
Reference in New Issue