Make VM order-able again
This commit is contained in:
parent
df059fb00d
commit
d794b24c86
5 changed files with 70 additions and 34 deletions
|
|
@ -10,7 +10,7 @@ from rest_framework.response import Response
|
|||
from rest_framework.exceptions import ValidationError
|
||||
|
||||
from .models import VMHost, VMProduct, VMSnapshotProduct, VMDiskProduct, VMDiskImageProduct, VMCluster
|
||||
from uncloud_pay.models import Order
|
||||
from uncloud_pay.models import Order, BillingAddress
|
||||
|
||||
from .serializers import *
|
||||
from uncloud_pay.helpers import ProductViewSet
|
||||
|
|
@ -136,9 +136,9 @@ class VMProductViewSet(ProductViewSet):
|
|||
|
||||
def get_queryset(self):
|
||||
if self.request.user.is_superuser:
|
||||
obj = VMProduct.objects.all()
|
||||
obj = VMWithOSProduct.objects.all()
|
||||
else:
|
||||
obj = VMProduct.objects.filter(owner=self.request.user)
|
||||
obj = VMWithOSProduct.objects.filter(owner=self.request.user)
|
||||
|
||||
return obj
|
||||
|
||||
|
|
@ -156,29 +156,39 @@ class VMProductViewSet(ProductViewSet):
|
|||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
order_recurring_period = serializer.validated_data.pop("recurring_period")
|
||||
order_billing_address = serializer.validated_data.pop("billing_address")
|
||||
|
||||
# Create base order.
|
||||
order = Order(
|
||||
recurring_period=order_recurring_period,
|
||||
billing_address=order_billing_address,
|
||||
owner=request.user,
|
||||
starting_date=timezone.now()
|
||||
)
|
||||
order.save()
|
||||
|
||||
# Create disk image.
|
||||
disk = VMDiskProduct(owner=request.user, order=order,
|
||||
disk = VMDiskProduct(owner=request.user,
|
||||
**serializer.validated_data.pop("primary_disk"))
|
||||
vm = VMWithOSProduct(owner=request.user, primary_disk=disk,
|
||||
**serializer.validated_data)
|
||||
disk.vm = vm # XXX: Is this really needed?
|
||||
|
||||
# Create VM.
|
||||
vm = serializer.save(owner=request.user, order=order, primary_disk=disk)
|
||||
disk.vm = vm
|
||||
# Create VM and Disk orders.
|
||||
vm_order = Order.from_product(
|
||||
vm,
|
||||
recurring_period=order_recurring_period,
|
||||
starting_date=timezone.now()
|
||||
)
|
||||
|
||||
disk_order = Order.from_product(
|
||||
disk,
|
||||
recurring_period=order_recurring_period,
|
||||
starting_date=timezone.now()
|
||||
)
|
||||
|
||||
|
||||
# Commit to DB.
|
||||
vm.order = vm_order
|
||||
vm.save()
|
||||
vm_order.save()
|
||||
|
||||
disk.order = disk_order
|
||||
disk_order.save()
|
||||
disk.save()
|
||||
|
||||
return Response(VMProductSerializer(vm, context={'request': request}).data)
|
||||
|
||||
|
||||
class NicoVMProductViewSet(ProductViewSet):
|
||||
permission_classes = [permissions.IsAuthenticated]
|
||||
serializer_class = NicoVMProductSerializer
|
||||
|
|
@ -194,6 +204,7 @@ class NicoVMProductViewSet(ProductViewSet):
|
|||
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
###
|
||||
# Admin stuff.
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue