Example #1
0
    def test_form_required_fields(self):
        """
        Test form for required fields.

        Verifies:
            * Form requires correct fields
            * Form has errors when missing required fields
        """
        for user in self.users:
            for field in VirtualMachineTemplateForm.Meta.required:
                data = self.template_data.copy()
                del data[field]
                form = VirtualMachineTemplateForm(data, user=user)
                self.assertTrue(field in form.errors)
                self.assertFalse(form.is_valid())
Example #2
0
    def test_form_required_fields(self):
        """
        Test form for required fields.

        Verifies:
            * Form requires correct fields
            * Form has errors when missing required fields
        """
        for user in self.users:
            for field in VirtualMachineTemplateForm.Meta.required:
                data = self.template_data.copy()
                del data[field]
                form = VirtualMachineTemplateForm(data, user=user)
                self.assertTrue(field in form.errors)
                self.assertFalse(form.is_valid())
Example #3
0
    def test_form_from_data(self):
        """
        Test form instantiation from first argument (data).

        Verifies:
            * Form fields correctly set
            * Form validation is run
        """
        for user in self.users:
            data = self.template_data.copy()
            data['cluster'] = self.cluster
            form = VirtualMachineTemplateForm(self.template_data, user=user)
            self.assertTrue(form.is_bound)
            self.assertTrue(form.is_valid())
            for field in self.template_data:
                self.assertTrue(field in form.fields)
                self.assertEqual(data[field], form.cleaned_data[field])
Example #4
0
    def test_form_from_data(self):
        """
        Test form instantiation from first argument (data).

        Verifies:
            * Form fields correctly set
            * Form validation is run
        """
        for user in self.users:
            data = self.template_data.copy()
            data['cluster'] = self.cluster
            form = VirtualMachineTemplateForm(self.template_data, user=user)
            self.assertTrue(form.is_bound)
            self.assertTrue(form.is_valid())
            for field in self.template_data:
                self.assertTrue(field in form.fields)
                self.assertEqual(data[field], form.cleaned_data[field])
Example #5
0
    def test_form_save(self):
        """
        Test form for creation of VirtualMachineTemplate on save

        Verifies:
            * Form has valid data
            * VirtualMachineTemplate is created
        """
        for i, user in enumerate(self.users):
            data = self.template_data.copy()
            template_name = 'template_save_%s' % i
            data['template_name'] = template_name
            self.assertFalse(VirtualMachineTemplate.objects.filter(template_name=template_name).exists())
            form = VirtualMachineTemplateForm(data, user=user)
            self.assertTrue(form.is_bound)
            self.assertTrue(form.is_valid())
            form.save()
            self.assertTrue(VirtualMachineTemplate.objects.filter(template_name=template_name).exists())
Example #6
0
    def test_form_from_initial(self):
        """
        Test form instantiation from initial kwarg.

        Verifies:
            * Form fields correctly set
            * Form validation is not run
        """
        for user in self.users:
            initial = self.template_data
            form = VirtualMachineTemplateForm(initial=initial, user=user)
            self.assertFalse(form.is_bound)
            self.assertEqual(form.errors, {})
            # A form cannot be validated without being
            #  instantiated with data (arg[0])
            self.assertFalse(form.is_valid())
            for field in initial:
                self.assertTrue(field in form.fields)
Example #7
0
    def test_form_from_initial(self):
        """
        Test form instantiation from initial kwarg.

        Verifies:
            * Form fields correctly set
            * Form validation is not run
        """
        for user in self.users:
            initial = self.template_data
            form = VirtualMachineTemplateForm(initial=initial, user=user)
            self.assertFalse(form.is_bound)
            self.assertEqual(form.errors, {})
            # A form cannot be validated without being
            #  instantiated with data (arg[0])
            self.assertFalse(form.is_valid())
            for field in initial:
                self.assertTrue(field in form.fields)
Example #8
0
    def test_form_init(self):
        """
        Test sanity.

        Verifies:
            * Form can be instantiated
            * Form is not bound
        """
        for user in self.users:
            form = VirtualMachineTemplateForm(user=user)
            self.assertFalse(form.is_bound)
Example #9
0
def create(request):
    """
    View to create a new VirtualMachineTemplate.

    @param template Will populate the form with data from a template.
    """
    user = request.user
    if request.method == "GET":
        form = VirtualMachineTemplateForm(user=user)
    elif request.method == "POST":
        form = VirtualMachineTemplateForm(request.POST, user=user)
        if form.is_valid():
            form_obj = form.save()
            return HttpResponseRedirect(reverse('template-detail',
                args=[form_obj.cluster.slug, form_obj]))

    return render_to_response('ganeti/vm_template/create.html', {
        'form':form,
        'action':reverse('template-create'),
        },
        context_instance = RequestContext(request)
    )
Example #10
0
    def test_form_save(self):
        """
        Test form for creation of VirtualMachineTemplate on save

        Verifies:
            * Form has valid data
            * VirtualMachineTemplate is created
        """
        for i, user in enumerate(self.users):
            data = self.template_data.copy()
            template_name = 'template_save_%s' % i
            data['template_name'] = template_name
            self.assertFalse(
                VirtualMachineTemplate.objects.filter(
                    template_name=template_name).exists())
            form = VirtualMachineTemplateForm(data, user=user)
            self.assertTrue(form.is_bound)
            self.assertTrue(form.is_valid())
            form.save()
            self.assertTrue(
                VirtualMachineTemplate.objects.filter(
                    template_name=template_name).exists())
Example #11
0
def edit(request, cluster_slug=None, template=None):
    """
    View to edit a new VirtualMachineTemplate.
    """
    user = request.user
    if cluster_slug:
        cluster = get_object_or_404(Cluster, slug=cluster_slug)
        if not (
            user.is_superuser or
            user.has_perm('admin', cluster) or
            user.has_perm('create_vm', cluster)
            ):
            raise Http403(NO_PRIVS)

    if cluster_slug and template:
        obj = get_object_or_404(VirtualMachineTemplate, template_name=template,
                                cluster__slug=cluster_slug)

    if request.method == "GET":
        initial = vars(obj)
        initial['cluster'] = cluster.id
        form = VirtualMachineTemplateForm(user=user, initial=initial)
    elif request.method == "POST":
        form = VirtualMachineTemplateForm(request.POST, user=user)
        if form.is_valid():
            form.instance.pk = obj.pk
            form_obj = form.save()
            return HttpResponseRedirect(reverse('template-detail',
                args=[form_obj.cluster.slug, form_obj]))

    return render_to_response('ganeti/vm_template/create.html', {
        'form':form,
        'action':reverse('template-edit', args=[cluster_slug, obj]),
        'template':obj,
        },
        context_instance = RequestContext(request)
    )
Example #12
0
def create_template_from_instance(request, cluster_slug, instance):
    """
    View to create a new template from a given instance.
      Post method is handled by template create view.
    """
    user = request.user
    if cluster_slug:
        cluster = get_object_or_404(Cluster, slug=cluster_slug)
        if not (
            user.is_superuser or
            user.has_perm('admin', cluster) or
            user.has_perm('create_vm', cluster)
            ):
            raise Http403(NO_PRIVS)

    vm = get_object_or_404(VirtualMachine, hostname=instance,
        cluster__slug=cluster_slug)

    # Work with vm vars here
    info = vm.info
    links = info['nic.links']
    modes = info['nic.modes']
    sizes = info['disk.sizes']

    initial = dict(
        template_name=instance,
        cluster=cluster.id,
        start=info['admin_state'],
        disk_template=info['disk_template'],
        disk_type=info['hvparams']['disk_type'],
        nic_type=info['hvparams']['nic_type'],
        os=vm.operating_system,
        vcpus=vm.virtual_cpus,
        memory=vm.ram,
        disks=[{'size':size} for size in sizes],
        nics=[{'mode':mode, 'link':link} for mode, link in zip(modes, links)],
        nic_count=len(links),
    )
    form = VirtualMachineTemplateForm(user=user, initial=initial)

    return render_to_response('ganeti/vm_template/create.html', {
        'form':form,
        'from_vm':vm,
        'action':reverse('template-create'),
        },
        context_instance = RequestContext(request)
    )
Example #13
0
def create(request):
    """
    View to create a new VirtualMachineTemplate.

    @param template Will populate the form with data from a template.
    """
    user = request.user
    if request.method == "GET":
        form = VirtualMachineTemplateForm(user=user)
    elif request.method == "POST":
        form = VirtualMachineTemplateForm(request.POST, user=user)
        if form.is_valid():
            form_obj = form.save()
            return HttpResponseRedirect(reverse('template-detail',
                args=[form_obj.cluster.slug, form_obj]))

    return render_to_response('ganeti/vm_template/create.html', {
        'form':form,
        'action':reverse('template-create'),
        },
        context_instance = RequestContext(request)
    )
Example #14
0
def edit(request, cluster_slug=None, template=None):
    """
    View to edit a new VirtualMachineTemplate.
    """
    user = request.user
    if cluster_slug:
        cluster = get_object_or_404(Cluster, slug=cluster_slug)
        if not (
            user.is_superuser or
            user.has_perm('admin', cluster) or
            user.has_perm('create_vm', cluster)
            ):
            raise Http403(NO_PRIVS)

    if cluster_slug and template:
        obj = get_object_or_404(VirtualMachineTemplate, template_name=template,
                                cluster__slug=cluster_slug)

    if request.method == "GET":
        initial = vars(obj)
        initial['cluster'] = cluster.id
        form = VirtualMachineTemplateForm(user=user, initial=initial)
    elif request.method == "POST":
        form = VirtualMachineTemplateForm(request.POST, user=user)
        if form.is_valid():
            form.instance.pk = obj.pk
            form_obj = form.save()
            return HttpResponseRedirect(reverse('template-detail',
                args=[form_obj.cluster.slug, form_obj]))

    return render_to_response('ganeti/vm_template/create.html', {
        'form':form,
        'action':reverse('template-edit', args=[cluster_slug, obj]),
        'template':obj,
        },
        context_instance = RequestContext(request)
    )