80 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Python
		
	
	
	
	
	
from rest_framework import generics
 | 
						|
from rest_framework import permissions
 | 
						|
 | 
						|
from django.contrib.auth.mixins import LoginRequiredMixin
 | 
						|
from django.contrib.auth import authenticate, login
 | 
						|
 | 
						|
 | 
						|
from utils.views import LoginViewMixin
 | 
						|
from membership.models import CustomUser, StripeCustomer
 | 
						|
from guardian.mixins import PermissionRequiredMixin
 | 
						|
 | 
						|
from .serializers import VirtualMachineTemplateSerializer, \
 | 
						|
                         VirtualMachineSerializer
 | 
						|
from .models import OpenNebulaManager
 | 
						|
 | 
						|
 | 
						|
class TemplateCreateView(generics.ListCreateAPIView):
 | 
						|
    """This class handles the GET and POST requests."""
 | 
						|
 | 
						|
    serializer_class = VirtualMachineTemplateSerializer
 | 
						|
    permission_classes = (permissions.IsAuthenticated, permissions.IsAdminUser)
 | 
						|
 | 
						|
    def get_queryset(self):
 | 
						|
        manager = OpenNebulaManager()
 | 
						|
        return manager.get_templates()
 | 
						|
 | 
						|
 | 
						|
    def perform_create(self, serializer):
 | 
						|
        """Save the post data when creating a new template."""
 | 
						|
        serializer.save()
 | 
						|
 | 
						|
class TemplateDetailsView(generics.RetrieveUpdateDestroyAPIView):
 | 
						|
    """This class handles the http GET, PUT and DELETE requests."""
 | 
						|
 | 
						|
    serializer_class = VirtualMachineTemplateSerializer
 | 
						|
    permission_classes = (permissions.IsAuthenticated)
 | 
						|
 | 
						|
    def get_queryset(self):
 | 
						|
        manager = OpenNebulaManager()
 | 
						|
        return manager.get_templates()
 | 
						|
 | 
						|
class VmCreateView(generics.ListCreateAPIView):
 | 
						|
    """This class handles the GET and POST requests."""
 | 
						|
    serializer_class = VirtualMachineSerializer
 | 
						|
    permission_classes = (permissions.IsAuthenticated, )
 | 
						|
 | 
						|
    def get_queryset(self):
 | 
						|
        owner = self.request.user
 | 
						|
        manager = OpenNebulaManager(email=owner.email,
 | 
						|
                                    password=owner.password)
 | 
						|
        return manager.get_vms()
 | 
						|
 | 
						|
    def perform_create(self, serializer):
 | 
						|
        """Save the post data when creating a new template."""
 | 
						|
        serializer.save(owner=self.request.user)
 | 
						|
 | 
						|
class VmDetailsView(generics.RetrieveUpdateDestroyAPIView):
 | 
						|
    """This class handles the http GET, PUT and DELETE requests."""
 | 
						|
    permission_classes = (permissions.IsAuthenticated, )
 | 
						|
 | 
						|
    serializer_class = VirtualMachineSerializer
 | 
						|
 | 
						|
    def get_queryset(self):
 | 
						|
        owner = self.request.user
 | 
						|
        manager = OpenNebulaManager(email=owner.email,
 | 
						|
                                    password=owner.password)
 | 
						|
        return manager.get_vms()
 | 
						|
 | 
						|
    def get_object(self):
 | 
						|
        owner = self.request.user
 | 
						|
        manager = OpenNebulaManager(email=owner.email,
 | 
						|
                                    password=owner.password)
 | 
						|
        return manager.get_vm(self.kwargs.get('pk'))
 | 
						|
 | 
						|
    def perform_destroy(self, instance):
 | 
						|
        owner = self.request.user
 | 
						|
        manager = OpenNebulaManager(email=owner.email,
 | 
						|
                                    password=owner.password)
 | 
						|
        manager.delete_vm(instance.id)
 | 
						|
 |