forked from uncloud/uncloud
Rename ungleich_service into uncloud_service
This commit is contained in:
parent
e67bd03997
commit
1a58508f8b
14 changed files with 8 additions and 61 deletions
67
uncloud_django_based/uncloud/uncloud_service/views.py
Normal file
67
uncloud_django_based/uncloud/uncloud_service/views.py
Normal file
|
|
@ -0,0 +1,67 @@
|
|||
from rest_framework import viewsets, permissions
|
||||
from rest_framework.response import Response
|
||||
from django.db import transaction
|
||||
|
||||
from .models import MatrixServiceProduct
|
||||
from .serializers import MatrixServiceProductSerializer
|
||||
|
||||
from uncloud_pay.helpers import ProductViewSet
|
||||
from uncloud_pay.models import Order
|
||||
from uncloud_vm.models import VMProduct, VMDiskProduct
|
||||
|
||||
def create_managed_vm(cores, ram, disk_size, image, order):
|
||||
# Create VM
|
||||
disk = VMDiskProduct(
|
||||
owner=order.owner,
|
||||
order=order,
|
||||
size_in_gb=disk_size,
|
||||
image=image)
|
||||
vm = VMProduct(
|
||||
name="Managed Service Host",
|
||||
owner=order.owner,
|
||||
cores=cores,
|
||||
ram_in_gb=ram,
|
||||
primary_disk=disk)
|
||||
disk.vm = vm
|
||||
|
||||
vm.save()
|
||||
disk.save()
|
||||
|
||||
return vm
|
||||
|
||||
|
||||
class MatrixServiceProductViewSet(ProductViewSet):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
serializer_class = MatrixServiceProductSerializer
|
||||
|
||||
def get_queryset(self):
|
||||
return MatrixServiceProduct.objects.filter(owner=self.request.user)
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, request):
|
||||
# Extract serializer data.
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
order_recurring_period = serializer.validated_data.pop("recurring_period")
|
||||
|
||||
# Create base order.)
|
||||
order = Order.objects.create(
|
||||
recurring_period=order_recurring_period,
|
||||
owner=request.user)
|
||||
|
||||
# Create unerderlying VM.
|
||||
data = serializer.validated_data.pop('vm')
|
||||
vm = create_managed_vm(
|
||||
order=order,
|
||||
cores=data['cores'],
|
||||
ram=data['ram_in_gb'],
|
||||
disk_size=data['primary_disk']['size_in_gb'],
|
||||
image=MatrixServiceProduct.base_image())
|
||||
|
||||
# Create service.
|
||||
service = serializer.save(
|
||||
order=order,
|
||||
owner=request.user,
|
||||
vm=vm)
|
||||
|
||||
return Response(serializer.data)
|
||||
Loading…
Add table
Add a link
Reference in a new issue