Merge pull request #245 from ungleich/connection_error_open_api
open_api ConnectionRefusedError handling
This commit is contained in:
		
				commit
				
					
						39f9b3c085
					
				
			
		
					 1 changed files with 41 additions and 5 deletions
				
			
		| 
						 | 
				
			
			@ -12,6 +12,12 @@ from guardian.mixins import PermissionRequiredMixin
 | 
			
		|||
from .serializers import VirtualMachineTemplateSerializer, \
 | 
			
		||||
                         VirtualMachineSerializer
 | 
			
		||||
from .models import OpenNebulaManager
 | 
			
		||||
from rest_framework.exceptions import APIException
 | 
			
		||||
 | 
			
		||||
class ServiceUnavailable(APIException):
 | 
			
		||||
    status_code = 503
 | 
			
		||||
    default_detail = 'Service temporarily unavailable, try again later.'
 | 
			
		||||
    default_code = 'service_unavailable'
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
class TemplateCreateView(generics.ListCreateAPIView):
 | 
			
		||||
| 
						 | 
				
			
			@ -37,7 +43,14 @@ class TemplateDetailsView(generics.RetrieveUpdateDestroyAPIView):
 | 
			
		|||
 | 
			
		||||
    def get_queryset(self):
 | 
			
		||||
        manager = OpenNebulaManager()
 | 
			
		||||
        return manager.get_templates()
 | 
			
		||||
        # We may have ConnectionRefusedError if we don't have a 
 | 
			
		||||
        # connection to OpenNebula. For now, we raise ServiceUnavailable
 | 
			
		||||
        try:
 | 
			
		||||
            templates = manager.get_templates()
 | 
			
		||||
        except ConnectionRefusedError:
 | 
			
		||||
            raise ServiceUnavailable            
 | 
			
		||||
        
 | 
			
		||||
        return templates
 | 
			
		||||
 | 
			
		||||
class VmCreateView(generics.ListCreateAPIView):
 | 
			
		||||
    """This class handles the GET and POST requests."""
 | 
			
		||||
| 
						 | 
				
			
			@ -48,7 +61,13 @@ class VmCreateView(generics.ListCreateAPIView):
 | 
			
		|||
        owner = self.request.user
 | 
			
		||||
        manager = OpenNebulaManager(email=owner.email,
 | 
			
		||||
                                    password=owner.password)
 | 
			
		||||
        return manager.get_vms()
 | 
			
		||||
        # We may have ConnectionRefusedError if we don't have a 
 | 
			
		||||
        # connection to OpenNebula. For now, we raise ServiceUnavailable
 | 
			
		||||
        try:
 | 
			
		||||
            vms = manager.get_vms()
 | 
			
		||||
        except ConnectionRefusedError:
 | 
			
		||||
            raise ServiceUnavailable
 | 
			
		||||
        return vms
 | 
			
		||||
 | 
			
		||||
    def perform_create(self, serializer):
 | 
			
		||||
        """Save the post data when creating a new template."""
 | 
			
		||||
| 
						 | 
				
			
			@ -64,17 +83,34 @@ class VmDetailsView(generics.RetrieveUpdateDestroyAPIView):
 | 
			
		|||
        owner = self.request.user
 | 
			
		||||
        manager = OpenNebulaManager(email=owner.email,
 | 
			
		||||
                                    password=owner.password)
 | 
			
		||||
        return manager.get_vms()
 | 
			
		||||
        # We may have ConnectionRefusedError if we don't have a 
 | 
			
		||||
        # connection to OpenNebula. For now, we raise ServiceUnavailable
 | 
			
		||||
        try:
 | 
			
		||||
            vms = manager.get_vms()
 | 
			
		||||
        except ConnectionRefusedError:
 | 
			
		||||
            raise ServiceUnavailable
 | 
			
		||||
        return 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'))
 | 
			
		||||
        # We may have ConnectionRefusedError if we don't have a 
 | 
			
		||||
        # connection to OpenNebula. For now, we raise ServiceUnavailable
 | 
			
		||||
        try:
 | 
			
		||||
            vm = manager.get_vm(self.kwargs.get('pk'))
 | 
			
		||||
        except ConnectionRefusedError:
 | 
			
		||||
            raise ServiceUnavailable
 | 
			
		||||
        return vm                                    
 | 
			
		||||
 | 
			
		||||
    def perform_destroy(self, instance):
 | 
			
		||||
        owner = self.request.user
 | 
			
		||||
        manager = OpenNebulaManager(email=owner.email,
 | 
			
		||||
                                    password=owner.password)
 | 
			
		||||
        manager.delete_vm(instance.id)
 | 
			
		||||
        # We may have ConnectionRefusedError if we don't have a 
 | 
			
		||||
        # connection to OpenNebula. For now, we raise ServiceUnavailable
 | 
			
		||||
        try:
 | 
			
		||||
            manager.delete_vm(instance.id)
 | 
			
		||||
        except ConnectionRefusedError:
 | 
			
		||||
            raise ServiceUnavailable
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue