diff options
Diffstat (limited to 'django-nova/src/django_nova/views/volumes.py')
-rw-r--r-- | django-nova/src/django_nova/views/volumes.py | 151 |
1 files changed, 151 insertions, 0 deletions
diff --git a/django-nova/src/django_nova/views/volumes.py b/django-nova/src/django_nova/views/volumes.py new file mode 100644 index 00000000..9d623ed8 --- /dev/null +++ b/django-nova/src/django_nova/views/volumes.py @@ -0,0 +1,151 @@ +# vim: tabstop=4 shiftwidth=4 softtabstop=4 + +# Copyright 2010 United States Government as represented by the +# Administrator of the National Aeronautics and Space Administration. +# All Rights Reserved. +# +# Licensed under the Apache License, Version 2.0 (the "License"); you may +# not use this file except in compliance with the License. You may obtain +# a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +# License for the specific language governing permissions and limitations +# under the License. + +""" +Views for managing Nova volumes. +""" + +from django import template +from django.contrib import messages +from django.contrib.auth.decorators import login_required +from django.shortcuts import redirect, render_to_response +from django_nova import exceptions +from django_nova import forms +from django_nova import shortcuts +from django_nova.exceptions import handle_nova_error + + +@login_required +@handle_nova_error +def index(request, project_id): + project = shortcuts.get_project_or_404(request, project_id) + volumes = project.get_volumes() + + return render_to_response('django_nova/volumes/index.html', { + 'create_form': forms.CreateVolumeForm(), + 'attach_form': forms.AttachVolumeForm(project), + 'region': project.region, + 'project': project, + 'volumes': volumes, + }, context_instance = template.RequestContext(request)) + + +@login_required +@handle_nova_error +def add(request, project_id): + project = shortcuts.get_project_or_404(request, project_id) + + if request.method == 'POST': + form = forms.CreateVolumeForm(request.POST) + if form.is_valid(): + try: + volume = project.create_volume(form.cleaned_data['size'], + form.cleaned_data['nickname'], + form.cleaned_data['description']) + except exceptions.NovaApiError, e: + messages.error(request, + 'Unable to create volume: %s' % e.message) + else: + messages.success(request, + 'Volume %s %s has been successfully created.' % + (volume.id, volume.displayName)) + else: + volumes = project.get_volumes() + + return render_to_response('django_nova/volumes/index.html', { + 'create_form': form, + 'attach_form': forms.AttachVolumeForm(project), + 'region': project.region, + 'project': project, + 'volumes': volumes, + }, context_instance = template.RequestContext(request)) + + return redirect('nova_volumes', project_id) + + +@login_required +@handle_nova_error +def delete(request, project_id, volume_id): + project = shortcuts.get_project_or_404(request, project_id) + + if request.method == 'POST': + try: + project.delete_volume(volume_id) + except exceptions.NovaApiError, e: + messages.error(request, + 'Unable to delete volume: %s' % e.message) + else: + messages.success(request, + 'Volume %s has been successfully deleted.' + % volume_id) + + return redirect('nova_volumes', project_id) + + +@login_required +@handle_nova_error +def attach(request, project_id): + project = shortcuts.get_project_or_404(request, project_id) + + if request.method == 'POST': + form = forms.AttachVolumeForm(project, request.POST) + if form.is_valid(): + try: + project.attach_volume( + form.cleaned_data['volume'], + form.cleaned_data['instance'], + form.cleaned_data['device'] + ) + except exceptions.NovaApiError, e: + messages.error(request, + 'Unable to attach volume: %s' % e.message) + else: + messages.success(request, + 'Volume %s has been successfully attached.' % + form.cleaned_data['volume']) + else: + volumes = project.get_volumes() + + return render_to_response('django_nova/volumes/index.html', { + 'create_form': forms.CreateVolumeForm(), + 'attach_form': form, + 'region': project.region, + 'project': project, + 'volumes': volumes, + }, context_instance = template.RequestContext(request)) + + return redirect('nova_volumes', project_id) + + +@login_required +@handle_nova_error +def detach(request, project_id, volume_id): + project = shortcuts.get_project_or_404(request, project_id) + + if request.method == 'POST': + try: + project.detach_volume(volume_id) + except exceptions.NovaApiError, e: + messages.error(request, + 'Unable to detach volume: %s' % e.message) + else: + messages.success(request, + 'Volume %s has been successfully detached.' % + volume_id) + + return redirect('nova_volumes', project_id) |