mirror of
https://github.com/retspen/webvirtcloud
synced 2025-07-31 12:41:08 +00:00
format python code with black
This commit is contained in:
parent
ea409ca863
commit
217e106c8b
55 changed files with 2510 additions and 1454 deletions
|
@ -4,90 +4,88 @@ from instances.models import Flavor, Instance, MigrateInstance, CreateInstance
|
|||
|
||||
|
||||
class InstanceSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Instance
|
||||
fields = ['id', 'compute', 'name', 'uuid', 'is_template', 'created', 'drbd']
|
||||
fields = ["id", "compute", "name", "uuid", "is_template", "created", "drbd"]
|
||||
|
||||
|
||||
class InstanceDetailsSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Instance
|
||||
fields = [
|
||||
'id',
|
||||
'compute',
|
||||
'status',
|
||||
'uuid',
|
||||
'name',
|
||||
'title',
|
||||
'description',
|
||||
'is_template',
|
||||
'created',
|
||||
'drbd',
|
||||
'arch',
|
||||
'machine',
|
||||
'vcpu',
|
||||
'memory',
|
||||
'firmware',
|
||||
'nvram',
|
||||
'bootmenu',
|
||||
'boot_order',
|
||||
'disks',
|
||||
'media',
|
||||
'media_iso',
|
||||
'snapshots',
|
||||
'networks',
|
||||
'console_type',
|
||||
'console_port',
|
||||
'console_keymap',
|
||||
'console_listener_address',
|
||||
'video_model',
|
||||
'guest_agent_ready',
|
||||
'autostart']
|
||||
"id",
|
||||
"compute",
|
||||
"status",
|
||||
"uuid",
|
||||
"name",
|
||||
"title",
|
||||
"description",
|
||||
"is_template",
|
||||
"created",
|
||||
"drbd",
|
||||
"arch",
|
||||
"machine",
|
||||
"vcpu",
|
||||
"memory",
|
||||
"firmware",
|
||||
"nvram",
|
||||
"bootmenu",
|
||||
"boot_order",
|
||||
"disks",
|
||||
"media",
|
||||
"media_iso",
|
||||
"snapshots",
|
||||
"networks",
|
||||
"console_type",
|
||||
"console_port",
|
||||
"console_keymap",
|
||||
"console_listener_address",
|
||||
"video_model",
|
||||
"guest_agent_ready",
|
||||
"autostart",
|
||||
]
|
||||
|
||||
|
||||
class FlavorSerializer(serializers.ModelSerializer):
|
||||
|
||||
class Meta:
|
||||
model = Flavor
|
||||
fields = ['label', 'memory', 'vcpu', 'disk']
|
||||
fields = ["label", "memory", "vcpu", "disk"]
|
||||
|
||||
|
||||
class CreateInstanceSerializer(serializers.ModelSerializer):
|
||||
firmware_choices = (
|
||||
('', 'BIOS'),
|
||||
#('UEFI', 'UEFI'),
|
||||
("", "BIOS"),
|
||||
# ('UEFI', 'UEFI'),
|
||||
)
|
||||
firmware = serializers.ChoiceField(choices = firmware_choices)
|
||||
graphics = serializers.CharField(initial='vnc')
|
||||
video = serializers.CharField(initial='vga')
|
||||
storage = serializers.CharField(initial='default')
|
||||
cache_mode = serializers.CharField(initial='none')
|
||||
firmware = serializers.ChoiceField(choices=firmware_choices)
|
||||
graphics = serializers.CharField(initial="vnc")
|
||||
video = serializers.CharField(initial="vga")
|
||||
storage = serializers.CharField(initial="default")
|
||||
cache_mode = serializers.CharField(initial="none")
|
||||
virtio = serializers.BooleanField(initial=True)
|
||||
qemu_ga = serializers.BooleanField(initial=True)
|
||||
|
||||
class Meta:
|
||||
model = CreateInstance
|
||||
fields = [
|
||||
'name',
|
||||
'firmware',
|
||||
'vcpu',
|
||||
'vcpu_mode',
|
||||
'memory',
|
||||
'networks',
|
||||
'mac',
|
||||
'nwfilter',
|
||||
'storage',
|
||||
'hdd_size',
|
||||
'cache_mode',
|
||||
'meta_prealloc',
|
||||
'virtio',
|
||||
'qemu_ga',
|
||||
'console_pass',
|
||||
'graphics',
|
||||
'video',
|
||||
'listener_addr'
|
||||
"name",
|
||||
"firmware",
|
||||
"vcpu",
|
||||
"vcpu_mode",
|
||||
"memory",
|
||||
"networks",
|
||||
"mac",
|
||||
"nwfilter",
|
||||
"storage",
|
||||
"hdd_size",
|
||||
"cache_mode",
|
||||
"meta_prealloc",
|
||||
"virtio",
|
||||
"qemu_ga",
|
||||
"console_pass",
|
||||
"graphics",
|
||||
"video",
|
||||
"listener_addr",
|
||||
]
|
||||
|
||||
|
||||
|
@ -95,6 +93,17 @@ class MigrateSerializer(serializers.ModelSerializer):
|
|||
instance = Instance.objects.all().prefetch_related("userinstance_set")
|
||||
live = serializers.BooleanField(initial=True)
|
||||
xml_del = serializers.BooleanField(initial=True)
|
||||
|
||||
class Meta:
|
||||
model = MigrateInstance
|
||||
fields = ['instance', 'target_compute', 'live', 'xml_del', 'offline', 'autoconverge', 'compress', 'postcopy', 'unsafe']
|
||||
fields = [
|
||||
"instance",
|
||||
"target_compute",
|
||||
"live",
|
||||
"xml_del",
|
||||
"offline",
|
||||
"autoconverge",
|
||||
"compress",
|
||||
"postcopy",
|
||||
"unsafe",
|
||||
]
|
||||
|
|
|
@ -5,7 +5,15 @@ from computes import utils
|
|||
from instances.models import Flavor, Instance
|
||||
from instances.views import get_instance
|
||||
from instances.utils import migrate_instance
|
||||
from instances.views import poweron, powercycle, poweroff, force_off, suspend, resume, destroy as instance_destroy
|
||||
from instances.views import (
|
||||
poweron,
|
||||
powercycle,
|
||||
poweroff,
|
||||
force_off,
|
||||
suspend,
|
||||
resume,
|
||||
destroy as instance_destroy,
|
||||
)
|
||||
|
||||
from rest_framework import status, viewsets, permissions
|
||||
from rest_framework.decorators import action
|
||||
|
@ -14,26 +22,39 @@ from rest_framework.response import Response
|
|||
from vrtManager import util
|
||||
|
||||
from vrtManager.create import wvmCreate
|
||||
from .serializers import FlavorSerializer, InstanceSerializer, InstanceDetailsSerializer, MigrateSerializer, CreateInstanceSerializer
|
||||
from .serializers import (
|
||||
FlavorSerializer,
|
||||
InstanceSerializer,
|
||||
InstanceDetailsSerializer,
|
||||
MigrateSerializer,
|
||||
CreateInstanceSerializer,
|
||||
)
|
||||
|
||||
|
||||
class InstancesViewSet(viewsets.ViewSet):
|
||||
"""
|
||||
A simple ViewSet for listing or retrieving ALL/Compute Instances.
|
||||
"""
|
||||
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def list(self, request):
|
||||
|
||||
if request.user.is_superuser or request.user.has_perm("instances.view_instances"):
|
||||
queryset = Instance.objects.all().prefetch_related("userinstance_set")
|
||||
else:
|
||||
queryset = Instance.objects.filter(userinstance__user=request.user).prefetch_related("userinstance_set")
|
||||
serializer = InstanceSerializer(queryset, many=True, context={'request': request})
|
||||
serializer = InstanceSerializer(
|
||||
queryset,
|
||||
many=True,
|
||||
context={"request": request}
|
||||
)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
def retrieve(self, request, pk=None, compute_pk=None):
|
||||
queryset = get_instance(request.user, pk)
|
||||
serializer = InstanceSerializer(queryset, context={'request': request})
|
||||
serializer = InstanceSerializer(queryset, context={"request": request})
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
|
@ -42,94 +63,110 @@ class InstanceViewSet(viewsets.ViewSet):
|
|||
"""
|
||||
A simple ViewSet for listing or retrieving Compute Instances.
|
||||
"""
|
||||
#serializer_class = CreateInstanceSerializer
|
||||
|
||||
# serializer_class = CreateInstanceSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
def list(self, request, compute_pk=None):
|
||||
compute = get_object_or_404(Compute, pk=compute_pk)
|
||||
|
||||
utils.refresh_instance_database(compute)
|
||||
|
||||
queryset = Instance.objects.filter(compute=compute).prefetch_related("userinstance_set")
|
||||
serializer = InstanceSerializer(queryset, many=True, context={'request': request})
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
queryset = Instance.objects.filter(compute=compute).prefetch_related("userinstance_set")
|
||||
serializer = InstanceSerializer(
|
||||
queryset,
|
||||
many=True,
|
||||
context={"request": request}
|
||||
)
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
def retrieve(self, request, pk=None, compute_pk=None):
|
||||
queryset = get_instance(request.user, pk)
|
||||
serializer = InstanceDetailsSerializer(queryset, context={'request': request})
|
||||
serializer = InstanceDetailsSerializer(queryset, context={"request": request})
|
||||
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
def destroy(self, request, pk=None, compute_pk=None):
|
||||
instance_destroy(request, pk)
|
||||
return Response({'status': 'Instance is destroyed'})
|
||||
return Response({"status": "Instance is destroyed"})
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
@action(detail=True, methods=["post"])
|
||||
def poweron(self, request, pk=None):
|
||||
poweron(request, pk)
|
||||
return Response({'status': 'poweron command send'})
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
return Response({"status": "poweron command send"})
|
||||
|
||||
@action(detail=True, methods=["post"])
|
||||
def poweroff(self, request, pk=None):
|
||||
poweroff(request, pk)
|
||||
return Response({'status': 'poweroff command send'})
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
return Response({"status": "poweroff command send"})
|
||||
|
||||
@action(detail=True, methods=["post"])
|
||||
def powercycle(self, request, pk=None):
|
||||
powercycle(request, pk)
|
||||
return Response({'status': 'powercycle command send'})
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
return Response({"status": "powercycle command send"})
|
||||
|
||||
@action(detail=True, methods=["post"])
|
||||
def forceoff(self, request, pk=None):
|
||||
force_off(request, pk)
|
||||
return Response({'status': 'force off command send'})
|
||||
return Response({"status": "force off command send"})
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
@action(detail=True, methods=["post"])
|
||||
def suspend(self, request, pk=None):
|
||||
suspend(request, pk)
|
||||
return Response({'status': 'suspend command send'})
|
||||
return Response({"status": "suspend command send"})
|
||||
|
||||
@action(detail=True, methods=['post'])
|
||||
@action(detail=True, methods=["post"])
|
||||
def resume(self, request, pk=None):
|
||||
resume(request, pk)
|
||||
return Response({'status': 'resume command send'})
|
||||
|
||||
return Response({"status": "resume command send"})
|
||||
|
||||
|
||||
class MigrateViewSet(viewsets.ViewSet):
|
||||
"""
|
||||
A viewset for migrating instances.
|
||||
"""
|
||||
|
||||
serializer_class = MigrateSerializer
|
||||
queryset = ""
|
||||
|
||||
def create(self, request):
|
||||
serializer = MigrateSerializer(data=request.data)
|
||||
if serializer.is_valid():
|
||||
instance = serializer.validated_data['instance']
|
||||
target_host = serializer.validated_data['target_compute']
|
||||
live = serializer.validated_data['live']
|
||||
unsafe = serializer.validated_data['unsafe']
|
||||
xml_del = serializer.validated_data['xml_del']
|
||||
offline = serializer.validated_data['offline']
|
||||
autoconverge = serializer.validated_data['autoconverge']
|
||||
postcopy = serializer.validated_data['postcopy']
|
||||
compress = serializer.validated_data['compress']
|
||||
instance = serializer.validated_data["instance"]
|
||||
target_host = serializer.validated_data["target_compute"]
|
||||
live = serializer.validated_data["live"]
|
||||
unsafe = serializer.validated_data["unsafe"]
|
||||
xml_del = serializer.validated_data["xml_del"]
|
||||
offline = serializer.validated_data["offline"]
|
||||
autoconverge = serializer.validated_data["autoconverge"]
|
||||
postcopy = serializer.validated_data["postcopy"]
|
||||
compress = serializer.validated_data["compress"]
|
||||
|
||||
migrate_instance(target_host, instance, request.user, live, unsafe, xml_del, offline, autoconverge, compress, postcopy)
|
||||
migrate_instance(
|
||||
target_host,
|
||||
instance,
|
||||
request.user,
|
||||
live,
|
||||
unsafe,
|
||||
xml_del,
|
||||
offline,
|
||||
autoconverge,
|
||||
compress,
|
||||
postcopy,
|
||||
)
|
||||
|
||||
return Response({'status': 'instance migrate is started'})
|
||||
return Response({"status": "instance migrate is started"})
|
||||
else:
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
|
||||
class FlavorViewSet(viewsets.ModelViewSet):
|
||||
"""
|
||||
API endpoint that allows flavor to be viewed.
|
||||
"""
|
||||
queryset = Flavor.objects.all().order_by('id')
|
||||
|
||||
queryset = Flavor.objects.all().order_by("id")
|
||||
serializer_class = FlavorSerializer
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
|
||||
|
@ -138,15 +175,15 @@ class CreateInstanceViewSet(viewsets.ViewSet):
|
|||
"""
|
||||
A viewset for creating instances.
|
||||
"""
|
||||
|
||||
serializer_class = CreateInstanceSerializer
|
||||
queryset = ""
|
||||
|
||||
|
||||
def create(self, request, compute_pk=None, arch=None, machine=None):
|
||||
serializer = CreateInstanceSerializer(data=request.data,
|
||||
context = {'compute_pk': compute_pk,
|
||||
'arch': arch,
|
||||
'machine': machine
|
||||
})
|
||||
serializer = CreateInstanceSerializer(
|
||||
data=request.data,
|
||||
context={"compute_pk": compute_pk, "arch": arch, "machine": machine},
|
||||
)
|
||||
if serializer.is_valid():
|
||||
volume_list = []
|
||||
default_bus = app_settings.INSTANCE_VOLUME_DEFAULT_BUS
|
||||
|
@ -166,14 +203,14 @@ class CreateInstanceViewSet(viewsets.ViewSet):
|
|||
)
|
||||
|
||||
path = conn.create_volume(
|
||||
serializer.validated_data['storage'],
|
||||
serializer.validated_data['name'],
|
||||
serializer.validated_data['hdd_size'],
|
||||
default_disk_format,
|
||||
serializer.validated_data['meta_prealloc'],
|
||||
default_disk_owner_uid,
|
||||
default_disk_owner_gid,
|
||||
)
|
||||
serializer.validated_data["storage"],
|
||||
serializer.validated_data["name"],
|
||||
serializer.validated_data["hdd_size"],
|
||||
default_disk_format,
|
||||
serializer.validated_data["meta_prealloc"],
|
||||
default_disk_owner_uid,
|
||||
default_disk_owner_gid,
|
||||
)
|
||||
volume = {}
|
||||
firmware = {}
|
||||
volume["device"] = "disk"
|
||||
|
@ -189,8 +226,8 @@ class CreateInstanceViewSet(viewsets.ViewSet):
|
|||
|
||||
volume_list.append(volume)
|
||||
|
||||
if "UEFI" in serializer.validated_data['firmware']:
|
||||
firmware["loader"] = serializer.validated_data['firmware'].split(":")[1].strip()
|
||||
if "UEFI" in serializer.validated_data["firmware"]:
|
||||
firmware["loader"] = (serializer.validated_data["firmware"].split(":")[1].strip())
|
||||
firmware["secure"] = "no"
|
||||
firmware["readonly"] = "yes"
|
||||
firmware["type"] = "pflash"
|
||||
|
@ -199,26 +236,26 @@ class CreateInstanceViewSet(viewsets.ViewSet):
|
|||
firmware["secure"] = "yes"
|
||||
|
||||
ret = conn.create_instance(
|
||||
name=serializer.validated_data['name'],
|
||||
memory=serializer.validated_data['memory'],
|
||||
vcpu=serializer.validated_data['vcpu'],
|
||||
vcpu_mode=serializer.validated_data['vcpu_mode'],
|
||||
name=serializer.validated_data["name"],
|
||||
memory=serializer.validated_data["memory"],
|
||||
vcpu=serializer.validated_data["vcpu"],
|
||||
vcpu_mode=serializer.validated_data["vcpu_mode"],
|
||||
uuid=util.randomUUID(),
|
||||
arch=arch,
|
||||
machine=machine,
|
||||
firmware=firmware,
|
||||
volumes=volume_list,
|
||||
networks=serializer.validated_data['networks'],
|
||||
nwfilter=serializer.validated_data['nwfilter'],
|
||||
graphics=serializer.validated_data['graphics'],
|
||||
virtio=serializer.validated_data['virtio'],
|
||||
listener_addr=serializer.validated_data['listener_addr'],
|
||||
video=serializer.validated_data['video'],
|
||||
console_pass=serializer.validated_data['console_pass'],
|
||||
mac=serializer.validated_data['mac'],
|
||||
qemu_ga=serializer.validated_data['qemu_ga'],
|
||||
networks=serializer.validated_data["networks"],
|
||||
nwfilter=serializer.validated_data["nwfilter"],
|
||||
graphics=serializer.validated_data["graphics"],
|
||||
virtio=serializer.validated_data["virtio"],
|
||||
listener_addr=serializer.validated_data["listener_addr"],
|
||||
video=serializer.validated_data["video"],
|
||||
console_pass=serializer.validated_data["console_pass"],
|
||||
mac=serializer.validated_data["mac"],
|
||||
qemu_ga=serializer.validated_data["qemu_ga"],
|
||||
)
|
||||
msg = f"Instance {serializer.validated_data['name']} is created"
|
||||
return Response({'status': msg })
|
||||
return Response({"status": msg})
|
||||
else:
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue