コード例 #1
0
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
コード例 #2
0
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)
コード例 #3
0
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))
コード例 #4
0
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))
コード例 #5
0
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))
コード例 #6
0
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))
コード例 #7
0
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))
コード例 #8
0
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))
コード例 #9
0
    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)
コード例 #10
0
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))
コード例 #11
0
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))
コード例 #12
0
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))
コード例 #13
0
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
コード例 #14
0
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))
コード例 #15
0
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))
コード例 #16
0
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
コード例 #17
0
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))
コード例 #18
0
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))
コード例 #19
0
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
コード例 #20
0
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))
コード例 #21
0
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))
コード例 #22
0
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))
コード例 #23
0
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)
コード例 #24
0
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)
コード例 #25
0
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')
コード例 #26
0
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)
コード例 #27
0
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))
コード例 #28
0
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)
コード例 #29
0
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))
コード例 #30
0
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))