diff --git a/circle/dashboard/forms.py b/circle/dashboard/forms.py index c30ac45..94fe926 100644 --- a/circle/dashboard/forms.py +++ b/circle/dashboard/forms.py @@ -143,25 +143,46 @@ class VmCustomizeForm(forms.Form): self.template = kwargs.pop("template", None) super(VmCustomizeForm, self).__init__(*args, **kwargs) - # set displayed disk and network list - self.fields['disks'].queryset = self.template.disks.all() - self.fields['networks'].queryset = Vlan.get_objects_with_level( - 'user', self.user) - - # set initial for disk and network list - self.initial['disks'] = self.template.disks.all() - self.initial['networks'] = InterfaceTemplate.objects.filter( - template=self.template).values_list("vlan", flat=True) + if self.user.has_perm("vm_set_resouces"): + self.allowed_fields = tuple(self.fields.keys()) + # set displayed disk and network list + self.fields['disks'].queryset = self.template.disks.all() + self.fields['networks'].queryset = Vlan.get_objects_with_level( + 'user', self.user) + + # set initial for disk and network list + self.initial['disks'] = self.template.disks.all() + self.initial['networks'] = InterfaceTemplate.objects.filter( + template=self.template).values_list("vlan", flat=True) + + # set initial for resources + self.initial['cpu_priority'] = self.template.priority + self.initial['cpu_count'] = self.template.num_cores + self.initial['ram_size'] = self.template.ram_size - # set initial for resources - self.initial['cpu_priority'] = self.template.priority - self.initial['cpu_count'] = self.template.num_cores - self.initial['ram_size'] = self.template.ram_size + else: + self.allowed_fields = ("name", "template", "customized", ) # initial name and template pk self.initial['name'] = self.template.name self.initial['template'] = self.template.pk - self.initial['customized'] = self.template.pk + self.initial['customized'] = True + + def _clean_fields(self): + for name, field in self.fields.items(): + if name in self.allowed_fields: + value = field.widget.value_from_datadict( + self.data, self.files, self.add_prefix(name)) + try: + value = field.clean(value) + self.cleaned_data[name] = value + if hasattr(self, 'clean_%s' % name): + value = getattr(self, 'clean_%s' % name)() + self.cleaned_data[name] = value + except ValidationError as e: + self._errors[name] = self.error_class(e.messages) + if name in self.cleaned_data: + del self.cleaned_data[name] class GroupCreateForm(forms.ModelForm): diff --git a/circle/dashboard/static/dashboard/vm-create.js b/circle/dashboard/static/dashboard/vm-create.js index bf082e4..cdbb550 100644 --- a/circle/dashboard/static/dashboard/vm-create.js +++ b/circle/dashboard/static/dashboard/vm-create.js @@ -222,6 +222,8 @@ function vmCustomizeLoaded() { $(this).find("i").prop("class", "fa fa-spinner fa-spin"); + if($("#create-modal")) return true; + $.ajax({ url: '/dashboard/vm/create/', headers: {"X-CSRFToken": getCookie('csrftoken')}, diff --git a/circle/dashboard/templates/dashboard/_vm-create-2.html b/circle/dashboard/templates/dashboard/_vm-create-2.html index 53c9fde..049100c 100644 --- a/circle/dashboard/templates/dashboard/_vm-create-2.html +++ b/circle/dashboard/templates/dashboard/_vm-create-2.html @@ -3,10 +3,11 @@ {% load sizefieldtags %} {% include "display-form-errors.html" with form=vm_create_form %} -
+ {% csrf_token %} {{ vm_create_form.template }} +{{ vm_create_form.customized }}
@@ -23,7 +24,6 @@
{% if perms.vm.set_resources %} -{{ vm_create_form.customized }}
diff --git a/circle/dashboard/views.py b/circle/dashboard/views.py index 133cdeb..c315982 100644 --- a/circle/dashboard/views.py +++ b/circle/dashboard/views.py @@ -2157,8 +2157,6 @@ class VmCreate(LoginRequiredMixin, TemplateView): raise PermissionDenied() args = {"template": template, "owner": user} - if "name" in request.POST: - args["name"] = request.POST.get("name") instances = [Instance.create_from_template(**args)] return self.__deploy(request, instances) @@ -2179,30 +2177,31 @@ class VmCreate(LoginRequiredMixin, TemplateView): if not template.has_level(user, 'user'): raise PermissionDenied() + ikwargs = { + 'name': post['name'], + 'template': template, + 'owner': user, + } + amount = post.get("amount", 1) if request.user.has_perm('vm.set_resources'): - ikwargs = { - 'name': post['name'], - 'num_cores': post['cpu_count'], - 'ram_size': post['ram_size'], - 'priority': post['cpu_priority'], - 'max_ram_size': post['ram_size'], - } networks = [InterfaceTemplate(vlan=l, managed=l.managed) for l in post['networks']] ikwargs.update({ - 'template': template, - 'owner': user, + 'num_cores': post['cpu_count'], + 'ram_size': post['ram_size'], + 'priority': post['cpu_priority'], + 'max_ram_size': post['ram_size'], 'networks': networks, 'disks': list(template.disks.all()), }) - amount = post['amount'] - instances = Instance.mass_create_from_template(amount=amount, - **ikwargs) - return self.__deploy(request, instances) else: - raise PermissionDenied() + pass + + instances = Instance.mass_create_from_template(amount=amount, + **ikwargs) + return self.__deploy(request, instances) def __deploy(self, request, instances, *args, **kwargs): for i in instances: