mirror of
https://github.com/retspen/webvirtcloud
synced 2024-11-01 20:14:15 +00:00
cfce71ec2b
* Add rest framework for API: First Commit * modify some shell scripts to make variable references safer; modify some python scripts to reduce the code complexity and cyclomatic complexity of functions. * Add REST API for some webvirtcloud functions. Instance list/delete/create, compute list/delete/create, storages-network list/retrieve. Add swagger and redoc for API interface * update requirements Co-authored-by: herengui <herengui@uniontech.com>
68 lines
3.2 KiB
Python
68 lines
3.2 KiB
Python
import re
|
|
|
|
from django import forms
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from appsettings.models import AppSettings
|
|
from webvirtcloud.settings import QEMU_CONSOLE_LISTENER_ADDRESSES, QEMU_KEYMAPS
|
|
|
|
from .models import CreateInstance, Flavor
|
|
|
|
|
|
class FlavorForm(forms.ModelForm):
|
|
class Meta:
|
|
model = Flavor
|
|
fields = '__all__'
|
|
|
|
|
|
class ConsoleForm(forms.Form):
|
|
type = forms.ChoiceField()
|
|
listen_on = forms.ChoiceField()
|
|
generate_password = forms.BooleanField(required=False)
|
|
clear_password = forms.BooleanField(required=False)
|
|
password = forms.CharField(widget=forms.PasswordInput(render_value=True), required=False)
|
|
clear_keymap = forms.BooleanField(required=False)
|
|
keymap = forms.ChoiceField(required=False)
|
|
|
|
def __init__(self, *args, **kwargs):
|
|
super(ConsoleForm, self).__init__(*args, **kwargs)
|
|
type_choices = ((c, c) for c in AppSettings.objects.get(key="QEMU_CONSOLE_DEFAULT_TYPE").choices_as_list())
|
|
keymap_choices = [('auto', 'Auto')] + list((c, c) for c in QEMU_KEYMAPS)
|
|
self.fields['type'] = forms.ChoiceField(choices=type_choices)
|
|
self.fields['listen_on'] = forms.ChoiceField(choices=QEMU_CONSOLE_LISTENER_ADDRESSES)
|
|
self.fields['keymap'] = forms.ChoiceField(choices=keymap_choices)
|
|
|
|
|
|
class NewVMForm(forms.ModelForm):
|
|
# name = forms.CharField(error_messages={'required': _('No Virtual Machine name has been entered')}, max_length=64)
|
|
# firmware = forms.CharField(max_length=50, required=False)
|
|
# vcpu = forms.IntegerField(error_messages={'required': _('No VCPU has been entered')})
|
|
# vcpu_mode = forms.CharField(max_length=20, required=False)
|
|
# disk = forms.IntegerField(required=False)
|
|
# memory = forms.IntegerField(error_messages={'required': _('No RAM size has been entered')})
|
|
# networks = forms.CharField(error_messages={'required': _('No Network pool has been choosen')})
|
|
# nwfilter = forms.CharField(required=False)
|
|
# storage = forms.CharField(max_length=20, required=False)
|
|
# template = forms.CharField(required=False)
|
|
# images = forms.CharField(required=False)
|
|
# cache_mode = forms.CharField(error_messages={'required': _('Please select HDD cache mode')})
|
|
# hdd_size = forms.IntegerField(required=False)
|
|
# meta_prealloc = forms.BooleanField(required=False)
|
|
# virtio = forms.BooleanField(required=False)
|
|
# qemu_ga = forms.BooleanField(required=False)
|
|
# mac = forms.CharField(required=False)
|
|
# console_pass = forms.CharField(required=False, empty_value="", widget=forms.PasswordInput())
|
|
# graphics = forms.CharField(error_messages={'required': _('Please select a graphics type')})
|
|
# video = forms.CharField(error_messages={'required': _('Please select a video driver')})
|
|
# listener_addr = forms.ChoiceField(required=True, widget=forms.RadioSelect, choices=QEMU_CONSOLE_LISTENER_ADDRESSES)
|
|
class Meta:
|
|
model = CreateInstance
|
|
fields = '__all__'
|
|
exclude = ['compute']
|
|
|
|
def clean_name(self):
|
|
name = self.cleaned_data['name']
|
|
have_symbol = re.match('^[a-zA-Z0-9._-]+$', name)
|
|
if not have_symbol:
|
|
raise forms.ValidationError(_('The name of the virtual machine must not contain any special characters'))
|
|
return name
|