mirror of
https://github.com/retspen/webvirtcloud
synced 2025-07-31 12:41:08 +00:00
Rest framework (#24)
* 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>
This commit is contained in:
parent
92254401dc
commit
cfce71ec2b
42 changed files with 1170 additions and 348 deletions
|
|
@ -1,7 +1,10 @@
|
|||
from django.db import models
|
||||
from django.utils.functional import cached_property
|
||||
from django.utils.translation import gettext_lazy as _
|
||||
|
||||
from libvirt import VIR_DOMAIN_XML_SECURE
|
||||
from vrtManager.create import wvmCreate
|
||||
from webvirtcloud.settings import QEMU_CONSOLE_LISTENER_ADDRESSES
|
||||
|
||||
from computes.models import Compute
|
||||
from vrtManager.instance import wvmInstance
|
||||
|
|
@ -150,8 +153,8 @@ class Instance(models.Model):
|
|||
return self.proxy.get_console_keymap()
|
||||
|
||||
@cached_property
|
||||
def console_listen_address(self):
|
||||
return self.proxy.get_console_listen_addr()
|
||||
def console_listener_address(self):
|
||||
return self.proxy.get_console_listener_addr()
|
||||
|
||||
@cached_property
|
||||
def guest_agent(self):
|
||||
|
|
@ -206,6 +209,50 @@ class Instance(models.Model):
|
|||
return self.proxy.get_image_formats()
|
||||
|
||||
|
||||
class MigrateInstance(models.Model):
|
||||
instance = models.ForeignKey(Instance, on_delete=models.DO_NOTHING)
|
||||
target_compute = models.ForeignKey(Compute, related_name='target', on_delete=models.DO_NOTHING)
|
||||
|
||||
live = models.BooleanField(_('Live'), blank=False)
|
||||
xml_del = models.BooleanField(_('Undefine XML'), blank=False, default=True)
|
||||
offline = models.BooleanField(_('Offline'), blank=False)
|
||||
autoconverge = models.BooleanField(_('Auto Converge'), blank=False, default=True)
|
||||
compress = models.BooleanField(_('Compress'), blank=False, default=False)
|
||||
postcopy = models.BooleanField(_('Post Copy'), blank=False, default=False)
|
||||
unsafe = models.BooleanField(_('Unsafe'), blank=False, default=False)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
||||
|
||||
class CreateInstance(models.Model):
|
||||
compute = models.ForeignKey(Compute, related_name='host', on_delete=models.DO_NOTHING)
|
||||
name = models.CharField(max_length=64, error_messages={'required': _('No Virtual Machine name has been entered')})
|
||||
firmware = models.CharField(max_length=50)
|
||||
vcpu = models.IntegerField(error_messages={'required': _('No VCPU has been entered')})
|
||||
vcpu_mode = models.CharField(max_length=20, blank=True)
|
||||
disk = models.IntegerField(blank=True)
|
||||
memory = models.IntegerField(error_messages={'required': _('No RAM size has been entered')})
|
||||
networks = models.CharField(max_length=256, error_messages={'required': _('No Network pool has been choosen')})
|
||||
nwfilter = models.CharField(max_length=256, blank=True)
|
||||
storage = models.CharField(max_length=256, blank=True)
|
||||
template = models.CharField(max_length=256, blank=True)
|
||||
images = models.CharField(max_length=256, blank=True)
|
||||
cache_mode = models.CharField(max_length=12, error_messages={'required': _('Please select HDD cache mode')})
|
||||
hdd_size = models.IntegerField(blank=True)
|
||||
meta_prealloc = models.BooleanField(default=False, blank=True)
|
||||
virtio = models.BooleanField(default=True)
|
||||
qemu_ga = models.BooleanField(default=False)
|
||||
mac = models.CharField(max_length=17, blank=True)
|
||||
console_pass = models.CharField(max_length=64, blank=True)
|
||||
graphics = models.CharField(max_length=12, error_messages={'required': _('Please select a graphics type')})
|
||||
video = models.CharField(max_length=12, error_messages={'required': _('Please select a video driver')})
|
||||
listener_addr = models.CharField(max_length=20, choices=QEMU_CONSOLE_LISTENER_ADDRESSES)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
||||
|
||||
class PermissionSet(models.Model):
|
||||
"""
|
||||
Dummy model for holding set of permissions we need to be automatically added by Django
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue