Added get_or_create_vm_detail function
This commit is contained in:
		
					parent
					
						
							
								f4899ffc18
							
						
					
				
			
			
				commit
				
					
						7278a20135
					
				
			
		
					 2 changed files with 41 additions and 3 deletions
				
			
		|  | @ -1,5 +1,10 @@ | |||
| from hosting.models import UserHostingKey | ||||
| import logging | ||||
| from oca.pool import WrongIdError | ||||
| 
 | ||||
| from hosting.models import UserHostingKey, VMDetail | ||||
| from opennebula_api.serializers import VirtualMachineSerializer | ||||
| 
 | ||||
| logger = logging.getLogger(__name__) | ||||
| 
 | ||||
| def get_all_public_keys(customer): | ||||
|     """ | ||||
|  | @ -9,3 +14,35 @@ def get_all_public_keys(customer): | |||
|     """ | ||||
|     return UserHostingKey.objects.filter(user_id=customer.id).values_list( | ||||
|         "public_key", flat=True) | ||||
| 
 | ||||
| 
 | ||||
| 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 | ||||
|  |  | |||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue