| 
									
										
										
										
											2017-09-25 00:02:36 +05:30
										 |  |  | import logging | 
					
						
							|  |  |  | from oca.pool import WrongIdError | 
					
						
							| 
									
										
										
										
											2017-08-31 18:35:19 +02:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:02:36 +05:30
										 |  |  | from hosting.models import UserHostingKey, VMDetail | 
					
						
							|  |  |  | from opennebula_api.serializers import VirtualMachineSerializer | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | logger = logging.getLogger(__name__) | 
					
						
							| 
									
										
										
										
											2017-08-31 18:35:19 +02:00
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | def get_all_public_keys(customer): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Returns all the public keys of the user | 
					
						
							|  |  |  |     :param customer: The customer whose public keys are needed | 
					
						
							|  |  |  |     :return: A list of public keys | 
					
						
							|  |  |  |     """
 | 
					
						
							| 
									
										
										
										
											2017-09-05 03:29:12 +05:30
										 |  |  |     return UserHostingKey.objects.filter(user_id=customer.id).values_list( | 
					
						
							|  |  |  |         "public_key", flat=True) | 
					
						
							| 
									
										
										
										
											2017-09-23 03:16:18 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-25 00:02:36 +05:30
										 |  |  | def get_or_create_vm_detail(user, manager, vm_id): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     Returns VMDetail object related to given vm_id. Creates the object | 
					
						
							|  |  |  |      if it does not exist | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :param vm_id: The ID of the VM which should be greater than 0. | 
					
						
							|  |  |  |     :param user: The CustomUser object that owns this VM | 
					
						
							|  |  |  |     :param manager: The OpenNebulaManager object | 
					
						
							|  |  |  |     :return: The VMDetail object. None if vm_id is less than or equal to 0. | 
					
						
							|  |  |  |     Also, for the cases where the VMDetail does not exist and we can not | 
					
						
							|  |  |  |     fetch data about the VM from OpenNebula, the function returns None | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     if vm_id <= 0: | 
					
						
							|  |  |  |         return None | 
					
						
							|  |  |  |     try: | 
					
						
							|  |  |  |         vm_detail_obj = VMDetail.objects.get(vm_id=vm_id) | 
					
						
							|  |  |  |     except VMDetail.DoesNotExist: | 
					
						
							|  |  |  |         try: | 
					
						
							|  |  |  |             vm_obj = manager.get_vm(vm_id) | 
					
						
							|  |  |  |         except (WrongIdError, ConnectionRefusedError) as e: | 
					
						
							|  |  |  |             logger.error(str(e)) | 
					
						
							|  |  |  |             return None | 
					
						
							|  |  |  |         vm = VirtualMachineSerializer(vm_obj).data | 
					
						
							|  |  |  |         vm_detail_obj = VMDetail.objects.create( | 
					
						
							|  |  |  |             user=user, vm_id=vm_id, disk_size=vm['disk_size'], | 
					
						
							|  |  |  |             cores=vm['cores'], memory=vm['memory'], | 
					
						
							|  |  |  |             configuration=vm['configuration'], ipv4=vm['ipv4'], | 
					
						
							|  |  |  |             ipv6=vm['ipv6'] | 
					
						
							|  |  |  |         ) | 
					
						
							|  |  |  |     return vm_detail_obj | 
					
						
							| 
									
										
										
										
											2017-09-28 01:35:09 +05:30
										 |  |  | 
 | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2017-09-23 03:16:18 +05:30
										 |  |  | def get_vm_price(cpu, memory, disk_size): | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     A helper function that computes price of a VM from given cpu, ram and | 
					
						
							|  |  |  |     ssd parameters | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     :param cpu: Number of cores of the VM | 
					
						
							|  |  |  |     :param memory: RAM of the VM | 
					
						
							|  |  |  |     :param disk_size: Disk space of the VM | 
					
						
							|  |  |  |     :return: The price of the VM | 
					
						
							|  |  |  |     """
 | 
					
						
							|  |  |  |     return (cpu * 5) + (memory * 2) + (disk_size * 0.6) |