| 
									
										
										
										
											2017-05-11 04:05:58 +02:00
										 |  |  | from rest_framework import generics | 
					
						
							| 
									
										
										
										
											2017-05-11 12:45:09 +02:00
										 |  |  | from rest_framework import permissions | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  | from .serializers import VirtualMachineSerializer | 
					
						
							| 
									
										
										
										
											2017-05-12 12:07:05 +02:00
										 |  |  | from .models import OpenNebulaManager | 
					
						
							| 
									
										
										
										
											2017-05-14 17:39:10 +05:30
										 |  |  | from rest_framework.exceptions import APIException | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-14 17:39:10 +05:30
										 |  |  | class ServiceUnavailable(APIException): | 
					
						
							|  |  |  |     status_code = 503 | 
					
						
							|  |  |  |     default_detail = 'Service temporarily unavailable, try again later.' | 
					
						
							|  |  |  |     default_code = 'service_unavailable' | 
					
						
							| 
									
										
										
										
											2017-05-11 12:45:09 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-09 16:33:56 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-11 05:51:30 +02:00
										 |  |  | class VmCreateView(generics.ListCreateAPIView): | 
					
						
							| 
									
										
										
										
											2017-05-11 12:45:09 +02:00
										 |  |  |     """This class handles the GET and POST requests.""" | 
					
						
							| 
									
										
										
										
											2017-05-11 05:51:30 +02:00
										 |  |  |     serializer_class = VirtualMachineSerializer | 
					
						
							| 
									
										
										
										
											2017-05-12 12:07:05 +02:00
										 |  |  |     permission_classes = (permissions.IsAuthenticated, ) | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     def get_queryset(self): | 
					
						
							|  |  |  |         owner = self.request.user | 
					
						
							|  |  |  |         manager = OpenNebulaManager(email=owner.email, | 
					
						
							| 
									
										
										
										
											2017-05-13 06:59:57 +02:00
										 |  |  |                                     password=owner.password) | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # We may have ConnectionRefusedError if we don't have a | 
					
						
							| 
									
										
										
										
											2017-05-14 17:39:10 +05:30
										 |  |  |         # connection to OpenNebula. For now, we raise ServiceUnavailable | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             vms = manager.get_vms() | 
					
						
							|  |  |  |         except ConnectionRefusedError: | 
					
						
							|  |  |  |             raise ServiceUnavailable | 
					
						
							|  |  |  |         return vms | 
					
						
							| 
									
										
										
										
											2017-05-11 05:51:30 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def perform_create(self, serializer): | 
					
						
							|  |  |  |         """Save the post data when creating a new template.""" | 
					
						
							| 
									
										
										
										
											2017-05-11 12:45:09 +02:00
										 |  |  |         serializer.save(owner=self.request.user) | 
					
						
							| 
									
										
										
										
											2017-05-11 05:51:30 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-11 05:51:30 +02:00
										 |  |  | class VmDetailsView(generics.RetrieveUpdateDestroyAPIView): | 
					
						
							|  |  |  |     """This class handles the http GET, PUT and DELETE requests.""" | 
					
						
							| 
									
										
										
										
											2017-05-12 12:07:05 +02:00
										 |  |  |     permission_classes = (permissions.IsAuthenticated, ) | 
					
						
							| 
									
										
										
										
											2017-05-11 05:51:30 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     serializer_class = VirtualMachineSerializer | 
					
						
							| 
									
										
										
										
											2017-05-11 17:39:59 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-12 12:07:05 +02:00
										 |  |  |     def get_queryset(self): | 
					
						
							|  |  |  |         owner = self.request.user | 
					
						
							|  |  |  |         manager = OpenNebulaManager(email=owner.email, | 
					
						
							| 
									
										
										
										
											2017-05-13 06:59:57 +02:00
										 |  |  |                                     password=owner.password) | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # We may have ConnectionRefusedError if we don't have a | 
					
						
							| 
									
										
										
										
											2017-05-14 17:39:10 +05:30
										 |  |  |         # connection to OpenNebula. For now, we raise ServiceUnavailable | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             vms = manager.get_vms() | 
					
						
							|  |  |  |         except ConnectionRefusedError: | 
					
						
							|  |  |  |             raise ServiceUnavailable | 
					
						
							|  |  |  |         return vms | 
					
						
							| 
									
										
										
										
											2017-05-12 12:07:05 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  |     def get_object(self): | 
					
						
							|  |  |  |         owner = self.request.user | 
					
						
							|  |  |  |         manager = OpenNebulaManager(email=owner.email, | 
					
						
							| 
									
										
										
										
											2017-05-13 06:59:57 +02:00
										 |  |  |                                     password=owner.password) | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # We may have ConnectionRefusedError if we don't have a | 
					
						
							| 
									
										
										
										
											2017-05-14 17:39:10 +05:30
										 |  |  |         # connection to OpenNebula. For now, we raise ServiceUnavailable | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             vm = manager.get_vm(self.kwargs.get('pk')) | 
					
						
							|  |  |  |         except ConnectionRefusedError: | 
					
						
							|  |  |  |             raise ServiceUnavailable | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         return vm | 
					
						
							| 
									
										
										
										
											2017-05-12 12:07:05 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-05-11 17:39:59 +02:00
										 |  |  |     def perform_destroy(self, instance): | 
					
						
							| 
									
										
										
										
											2017-05-12 12:07:05 +02:00
										 |  |  |         owner = self.request.user | 
					
						
							| 
									
										
										
										
											2017-05-11 17:39:59 +02:00
										 |  |  |         manager = OpenNebulaManager(email=owner.email, | 
					
						
							| 
									
										
										
										
											2017-05-13 06:59:57 +02:00
										 |  |  |                                     password=owner.password) | 
					
						
							| 
									
										
										
										
											2017-06-29 17:34:40 +03:00
										 |  |  |         # We may have ConnectionRefusedError if we don't have a | 
					
						
							| 
									
										
										
										
											2017-05-14 17:39:10 +05:30
										 |  |  |         # connection to OpenNebula. For now, we raise ServiceUnavailable | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             manager.delete_vm(instance.id) | 
					
						
							|  |  |  |         except ConnectionRefusedError: | 
					
						
							|  |  |  |             raise ServiceUnavailable |