def download(request, project_id, key_name): # Ensure the project exists. shortcuts.get_project_or_404(request, project_id) try: material = request.session.pop('key.%s' % key_name) except KeyError: return redirect('nova_keypairs', project_id) response = http.HttpResponse(mimetype='application/binary') response['Content-Disposition'] = 'attachment; filename=%s.pem' % key_name response.write(material) return response
def launch(request, project_id, image_id): project = shortcuts.get_project_or_404(request, project_id) if request.method == 'POST': form = forms.LaunchInstanceForm(project, request.POST) if form.is_valid(): try: reservation = project.run_instances( image_id, addressing_type='private', key_name=form.cleaned_data['key_name'], #security_groups=[form.cleaned_data['security_group']], user_data=re.sub('\r\n', '\n', form.cleaned_data['user_data']), instance_type=form.cleaned_data['size'], min_count=form.cleaned_data['count'], max_count=form.cleaned_data['count'] ) except exceptions.NovaApiError, e: messages.error(request, 'Unable to launch: %s' % e.message) except exceptions.NovaUnauthorizedError, e: messages.error(request, 'Permission Denied') else: for instance in reservation.instances: messages.success(request, 'Instance %s launched.' % instance.id) return redirect('nova_instances', project_id)
def detail(request, project_id): project = get_project_or_404(request, project_id) return render_to_response('django_nova/projects/index.html', { 'project': project, 'instance_count': project.get_instance_count(), }, context_instance = template.RequestContext(request))
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 is scheduled to be attached. If ' 'it doesn\'t become attached in two ' 'minutes, please try again (you may need to ' 'specify a different device).' % 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))
def edit_user(request, project_id, username): nova = get_nova_admin_connection() project = get_project_or_404(request, project_id) user = nova.get_user(username) userroles = nova.get_user_roles(username, project_id) if project.projectManagerId != request.user.username: return redirect('login') if request.method == 'POST': form = nova_forms.ProjectUserForm(project, user, request.POST) if form.is_valid(): form.save() return redirect('nova_project_manage', project_id) else: roles = [str(role.role) for role in userroles] form = nova_forms.ProjectUserForm(project, user, {'role': roles, 'user': user}) return render_to_response('django_nova/projects/edit_user.html', { 'form' : form, 'project': project, 'user' : user, }, context_instance = template.RequestContext(request))
def add(request, project_id): project = shortcuts.get_project_or_404(request, project_id) if request.method == 'POST': form = forms.CreateKeyPairForm(project, request.POST) if form.is_valid(): try: keypair = project.create_key_pair(form.cleaned_data['name']) except exceptions.NovaApiError, e: messages.error(request, 'Unable to create key: %s' % e.message) else: if request.POST['js'] == '1': request.session['key.%s' % keypair.name] = keypair.material return index(request, project_id, download_key=keypair.name) else: response = http.HttpResponse(mimetype='application/binary') response['Content-Disposition'] = \ 'attachment; filename=%s.pem' % \ form.cleaned_data['name'] response.write(keypair.material) return response else: keypairs = project.get_key_pairs() return render_to_response('django_nova/keypairs/index.html', { 'create_form': form, 'region': project.region, 'project': project, 'keypairs': keypairs, }, context_instance = template.RequestContext(request))
def authorize(request, project_id, group_name): project = get_project_or_404(request, project_id) if request.method == 'POST': form = forms.AuthorizeSecurityGroupRuleForm(request.POST) if form.is_valid(): try: project.authorize_security_group( group_name = group_name, ip_protocol = form.cleaned_data['protocol'], from_port = form.cleaned_data['from_port'], to_port = form.cleaned_data['to_port']) except exceptions.NovaApiError, e: messages.error(request, 'Unable to authorize: %s' % e.message) else: messages.success( request, 'Security Group %s: Access to %s ports %d - %d' ' has been authorized.' % (group_name, form.cleaned_data['protocol'], form.cleaned_data['from_port'], form.cleaned_data['to_port'])) else: securitygroup = project.get_security_group(group_name) if not securitygroup: raise http.Http404 return render_to_response('django_nova/securitygroups/detail.html', { 'authorize_form': form, 'project': project, 'securitygroup': securitygroup, }, context_instance = template.RequestContext(request))
def update(request, project_id, image_id): project = shortcuts.get_project_or_404(request, project_id) ami = project.get_image(image_id) if request.method == 'POST': form = forms.UpdateImageForm(ami, request.POST) if form.is_valid(): try: project.update_image(image_id, form.cleaned_data['nickname'], form.cleaned_data['description']) except exceptions.NovaApiError, e: messages.error(request, 'Unable to update image: %s' % e.message) else: messages.success(request, 'Image %s has been updated.' % image_id) return redirect('nova_images_detail', project_id, image_id) # TODO(devcamcar): This needs to be cleaned up. Can make # one of the render_to_response blocks go away. else: form = forms.UpdateImageForm(ami) return render_to_response('django_nova/images/edit.html', { 'form': form, 'region': project.region, 'project': project, 'ami': ami, }, context_instance = template.RequestContext(request))
def setUp(self): super(BaseProjectViewTests, self).setUp() project = adminclient.ProjectInfo() project.projectname = TEST_PROJECT project.projectManagerId = TEST_USER self.user = self.authenticateTestUser() self.region = adminclient.RegionInfo(name=TEST_REGION, endpoint='http://test:8773/') self.project = manager.ProjectManager(self.user.username, project, self.region) self.mox.StubOutWithMock(shortcuts, 'get_project_or_404') shortcuts.get_project_or_404(mox.IgnoreArg(), 'test').AndReturn(self.project)
def add(request, project_id): project = get_project_or_404(request, project_id) if request.method == 'POST': form = forms.CreateSecurityGroupForm(project, request.POST) if form.is_valid(): try: project.create_security_group( form.cleaned_data['name'], form.cleaned_data['description']) except exceptions.NovaApiError, e: messages.error(request, 'Unable to create security group: %s' % e.message) else: messages.success( request, 'Security Group %s has been succesfully created.' % \ form.cleaned_data['name']) else: securitygroups = project.get_security_groups() return render_to_response('django_nova/securitygroups/index.html', { 'create_form': form, 'project': project, 'securitygroups': securitygroups, }, context_instance = template.RequestContext(request))
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))
def index(request, project_id): project = get_project_or_404(request, project_id) securitygroups = project.get_security_groups() return render_to_response('django_nova/securitygroups/index.html', { 'create_form': forms.CreateSecurityGroupForm(project), 'project': project, 'securitygroups': securitygroups, }, context_instance = template.RequestContext(request))
def console(request, project_id, instance_id): project = shortcuts.get_project_or_404(request, project_id) conn = project.get_nova_connection() console = conn.get_console_output(instance_id) response = http.HttpResponse(mimetype='text/plain') response.write(console.output) response.flush() return response
def index(request, project_id): project = shortcuts.get_project_or_404(request, project_id) instances = sorted(project.get_instances(), key=lambda k: k.public_dns_name) return render_to_response('django_nova/instances/index.html', { 'region': project.region, 'project': project, 'instances': instances, 'detail' : False, }, context_instance = template.RequestContext(request))
def index(request, project_id): project = shortcuts.get_project_or_404(request, project_id) images = project.get_images() return render_to_response('django_nova/images/index.html', { 'form': forms.LaunchInstanceForm(project), 'region': project.region, 'project': project, 'image_lists': _image_lists(images, project_id), }, context_instance = template.RequestContext(request))
def download_credentials(request, project_id): project = get_project_or_404(request, project_id) response = http.HttpResponse(mimetype='application/zip') response['Content-Disposition'] = \ 'attachment; filename=%s-%s-%s-x509.zip' % \ (settings.SITE_NAME, project.projectname, request.user) response.write(project.get_zip()) return response
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))
def index(request, project_id, download_key=None): project = shortcuts.get_project_or_404(request, project_id) keypairs = project.get_key_pairs() return render_to_response('django_nova/keypairs/index.html', { 'create_form': forms.CreateKeyPairForm(project), 'region': project.region, 'project': project, 'keypairs': keypairs, 'download_key': download_key }, context_instance = template.RequestContext(request))
def graph(request, project_id, instance_id, graph_name): project = shortcuts.get_project_or_404(request, project_id) graph = project.get_instance_graph(instance_id, graph_name) if graph is None: raise http.Http404() response = http.HttpResponse(mimetype='image/png') response.write(graph) return response
def refresh(request, project_id): # TODO(devcamcar): This logic belongs in decorator. if not request.user.is_authenticated(): return http.HttpResponseForbidden() project = shortcuts.get_project_or_404(request, project_id) instances = sorted(project.get_instances(), key=lambda k: k.public_dns_name) return render_to_response('django_nova/instances/_instances_list.html', { 'project': project, 'instances': instances, }, context_instance = template.RequestContext(request))
def detail(request, project_id, group_name): project = get_project_or_404(request, project_id) securitygroup = project.get_security_group(group_name) if not securitygroup: raise http.Http404 return render_to_response('django_nova/securitygroups/detail.html', { 'authorize_form': forms.AuthorizeSecurityGroupRuleForm(), 'project': project, 'securitygroup': securitygroup, }, context_instance = template.RequestContext(request))
def performance(request, project_id, instance_id): project = shortcuts.get_project_or_404(request, project_id) instance = project.get_instance(instance_id) if not instance: raise http.Http404() return render_to_response('django_nova/instances/performance.html', { 'region': project.region, 'project': project, 'instance': instance, 'update_form': nova_forms.UpdateInstanceForm(instance), }, context_instance = template.RequestContext(request))
def remove(request, project_id, image_id): project = shortcuts.get_project_or_404(request, project_id) if request.method == 'POST': try: project.deregister_image(image_id) except exceptions.NovaApiError, e: messages.error(request, 'Unable to deregister image: %s' % e.message) else: messages.success(request, 'Image %s has been successfully deregistered.' % image_id)
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)
def terminate(request, project_id): project = shortcuts.get_project_or_404(request, project_id) if request.method == 'POST': instance_id = request.POST['instance_id'] try: project.terminate_instance(instance_id) except exceptions.NovaApiError, e: messages.error(request, 'Unable to terminate %s: %s' % (instance_id, e.message,)) except exceptions.NovaUnauthorizedError, e: messages.error(request, 'Permission Denied')
def delete(request, project_id, group_name): project = get_project_or_404(request, project_id) if request.method == 'POST': try: project.delete_security_group(name=group_name) except exceptions.NovaApiError, e: messages.error( request, 'Unable to delete security group: %s' % e.message) else: messages.success(request, 'Security Group %s was successfully deleted.' % group_name)
def detail(request, project_id, image_id): project = shortcuts.get_project_or_404(request, project_id) images = project.get_images() ami = project.get_image(image_id) if not ami: raise http.Http404() return render_to_response('django_nova/images/index.html', { 'form': forms.LaunchInstanceForm(project), 'region': project.region, 'project': project, 'image_lists': _image_lists(images, project_id), 'ami': ami, }, context_instance = template.RequestContext(request))
def delete(request, project_id): project = shortcuts.get_project_or_404(request, project_id) if request.method == 'POST': key_name = request.POST['key_name'] try: project.delete_key_pair(key_name) except exceptions.NovaApiError, e: messages.error(request, 'Unable to delete key: %s' % e.message) else: messages.success(request, 'Key %s has been successfully deleted.' % \ key_name)
def detail(request, project_id, instance_id): project = shortcuts.get_project_or_404(request, project_id) instance = project.get_instance(instance_id) instances = sorted(project.get_instances(), key=lambda k: k.public_dns_name) if not instance: raise http.Http404() return render_to_response('django_nova/instances/index.html', { 'region': project.region, 'project': project, 'selected_instance': instance, 'instances': instances, 'update_form': nova_forms.UpdateInstanceForm(instance), 'enable_vnc': settings.ENABLE_VNC, 'detail' : True, }, context_instance = template.RequestContext(request))
def manage(request, project_id): project = get_project_or_404(request, project_id) if project.projectManagerId != request.user.username: return redirect('login') nova = get_nova_admin_connection() members = nova.get_project_members(project_id) for member in members: project_role = [str(role.role) for role in nova.get_user_roles(member.memberId, project_id)] global_role = [str(role.role) for role in nova.get_user_roles(member.memberId, project=False)] member.project_roles = ", ".join(project_role) member.global_roles = ", ".join(global_role) return render_to_response('django_nova/projects/manage.html', { 'project': project, 'members': members, }, context_instance = template.RequestContext(request))