Start serialization
This commit is contained in:
		
					parent
					
						
							
								ec945cc31b
							
						
					
				
			
			
				commit
				
					
						ba0cc137bc
					
				
			
		
					 2 changed files with 135 additions and 0 deletions
				
			
		|  | @ -14,12 +14,115 @@ class VirtualMachineTemplate(models.Model): | ||||||
|     core_price = models.FloatField() |     core_price = models.FloatField() | ||||||
|     disk_size_price = models.FloatField() |     disk_size_price = models.FloatField() | ||||||
| 
 | 
 | ||||||
|  |     def get_name(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         template = self.manager._get_template(template_id=self.opennebula_id) | ||||||
|  |         return template.name | ||||||
|  | 
 | ||||||
|  |     def get_cores(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         template = self.manager._get_template(template_id=self.opennebula_id).template | ||||||
|  |         return int(template.vcpu) | ||||||
|  |      | ||||||
|  |     def get_disk_size(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         template = self.manager._get_template(template_id=self.opennebula_id).template | ||||||
|  |         return int(template.disk.size) / 1024 | ||||||
|  | 
 | ||||||
|  |     def get_memory(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         template = self.manager._get_template(template_id=self.opennebula_id).template | ||||||
|  |         return int(template.memory) / 1024 | ||||||
| 
 | 
 | ||||||
| class VirtualMachine(models.Model): | class VirtualMachine(models.Model): | ||||||
|     """This class represents an opennebula virtual machine.""" |     """This class represents an opennebula virtual machine.""" | ||||||
|     opennebula_id = models.IntegerField() |     opennebula_id = models.IntegerField() | ||||||
|     template = models.ForeignKey(VirtualMachineTemplate) |     template = models.ForeignKey(VirtualMachineTemplate) | ||||||
| 
 | 
 | ||||||
|  |     VM_STATE = { | ||||||
|  |         '0': 'INIT', | ||||||
|  |         '1': 'PENDING', | ||||||
|  |         '2': 'HOLD', | ||||||
|  |         '3': 'ACTIVE', | ||||||
|  |         '4': 'STOPPED', | ||||||
|  |         '5': 'SUSPENDED', | ||||||
|  |         '6': 'DONE', | ||||||
|  |         '8': 'POWEROFF', | ||||||
|  |         '9': 'UNDEPLOYED', | ||||||
|  |         '10': 'CLONING', | ||||||
|  |         '11': 'CLONING_FAILURE', | ||||||
|  |     } | ||||||
|  | 
 | ||||||
|  |     def get_name(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         vm = self.manager._get_vm(vm_id=self.opennebula_id) | ||||||
|  |         return vm.name | ||||||
|  | 
 | ||||||
|  |     def get_cores(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         template = self.manager._get_vm(vm_id=self.opennebula_id).template | ||||||
|  |         return int(template.vcpu) | ||||||
|  |      | ||||||
|  |     def get_disk_size(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         template = self.manager._get_vm(vm_id=self.opennebula_id).template | ||||||
|  |         try:  | ||||||
|  |             return template.disk.size | ||||||
|  |         except AttributeError: | ||||||
|  |             disk_size = 0  | ||||||
|  |             for disk in template.disks: | ||||||
|  |                 disk_size += disk.size | ||||||
|  |             return disk_size / 1024 | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  |     def get_memory(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         template = self.manager._get_vm(vm_id=self.opennebula_id).template | ||||||
|  |         return int(template.memory) | ||||||
|  | 
 | ||||||
|  |     def get_id(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         vm = self.manager._get_vm(vm_id=self.opennebula_id) | ||||||
|  |         return vm.id | ||||||
|  | 
 | ||||||
|  |     def get_ip(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         vm = self.manager._get_vm(vm_id=self.opennebula_id) | ||||||
|  |         try: | ||||||
|  |             return vm.user_template.ungleich_public_ip | ||||||
|  |         except AttributeError: | ||||||
|  |             return '-' | ||||||
|  | 
 | ||||||
|  |     def get_state(self): | ||||||
|  |         if self.manager is None: | ||||||
|  |             self.manager = OpenNebulaManager() | ||||||
|  | 
 | ||||||
|  |         vm = self.manager._get_vm(vm_id=self.opennebula_id) | ||||||
|  |         return self.VM_STATE.get(str(vm.state)) | ||||||
|  | 
 | ||||||
|  |     def get_pirce(self) | ||||||
|  |         return 0.0 | ||||||
|  | 
 | ||||||
| class OpenNebulaManager(): | class OpenNebulaManager(): | ||||||
|     """This class represents an opennebula manager.""" |     """This class represents an opennebula manager.""" | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
							
								
								
									
										32
									
								
								opennebula_api/serializer.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										32
									
								
								opennebula_api/serializer.py
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,32 @@ | ||||||
|  | from res_framework import serializers | ||||||
|  | from .models import VirtualMachine, VirtualMachineTemplate | ||||||
|  | 
 | ||||||
|  | class VirtualMachineSerializer(serializers.ModelSerializer): | ||||||
|  |     """Serializer to map the virtual machine instance into JSON format.""" | ||||||
|  | 
 | ||||||
|  |     cores       = serializers.IntegerField(read_only=True, source='get_cores')  | ||||||
|  |     name        = serializers.CharField(read_only=True, source='get_name') | ||||||
|  |     disk_size   = serializers.IntegerField(read_only=True, source='get_disk_size') | ||||||
|  |     memory      = serializers.IntegerField(read_only=True, source='get_memory') | ||||||
|  |     #TODO: See if we can change to IPAddressField | ||||||
|  |     ip          = serializers.CharField(read_only=True, source='get_ip') | ||||||
|  |     deploy_id   = serializers.IntegerField(read_only=True, source='get_deploy_id') | ||||||
|  |     id          = serializers.IntegerField(read_only=True, source='get_id') | ||||||
|  |     state       = serializers.CharField(read_only=True, source='get_state') | ||||||
|  |     price       = serializers.FloatField(read_only=True, source='get_price') | ||||||
|  | 
 | ||||||
|  |     class Meta: | ||||||
|  |         model = VirtualMachine | ||||||
|  | 
 | ||||||
|  | 
 | ||||||
|  | class VirtualMachineTemplateSerializer(serializers.ModelSerializer): | ||||||
|  |     """Serializer to map the virtual machine template instance into JSON format.""" | ||||||
|  |     cores       = serializers.IntegerField(read_only=True, source='get_cores')  | ||||||
|  |     name        = serializers.CharField(read_only=True, source='get_name') | ||||||
|  |     disk_size   = serializers.IntegerField(read_only=True, source='get_disk_size') | ||||||
|  |     memory      = serializers.IntegerField(read_only=True, source='get_memory') | ||||||
|  | 
 | ||||||
|  |     class Meta: | ||||||
|  |         model = VirtualMachineTemplate | ||||||
|  |         fields = () | ||||||
|  | 
 | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue