Move django-based uncloud to top-level
This commit is contained in:
		
					parent
					
						
							
								0560063326
							
						
					
				
			
			
				commit
				
					
						95d43f002f
					
				
			
		
					 265 changed files with 0 additions and 0 deletions
				
			
		
							
								
								
									
										91
									
								
								opennebula/models.py
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										91
									
								
								opennebula/models.py
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,91 @@
 | 
			
		|||
import uuid
 | 
			
		||||
from django.db import models
 | 
			
		||||
from django.contrib.auth import get_user_model
 | 
			
		||||
from django.contrib.postgres.fields import JSONField
 | 
			
		||||
 | 
			
		||||
# ungleich specific
 | 
			
		||||
storage_class_mapping = {
 | 
			
		||||
    'one': 'ssd',
 | 
			
		||||
    'ssd': 'ssd',
 | 
			
		||||
    'hdd': 'hdd'
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
class VM(models.Model):
 | 
			
		||||
    vmid = models.IntegerField(primary_key=True)
 | 
			
		||||
    owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE)
 | 
			
		||||
    data = JSONField()
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def uncloud_name(self):
 | 
			
		||||
        return "opennebula-{}".format(self.vmid)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def cores(self):
 | 
			
		||||
        return int(self.data['TEMPLATE']['VCPU'])
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def ram_in_gb(self):
 | 
			
		||||
        return int(self.data['TEMPLATE']['MEMORY'])/1024
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def disks(self):
 | 
			
		||||
        """
 | 
			
		||||
        If there is no disk then the key DISK does not exist.
 | 
			
		||||
 | 
			
		||||
        If there is only one disk, we have a dictionary in the database.
 | 
			
		||||
 | 
			
		||||
        If there are multiple disks, we have a list of dictionaries in the database.
 | 
			
		||||
        """
 | 
			
		||||
 | 
			
		||||
        disks = []
 | 
			
		||||
 | 
			
		||||
        if 'DISK' in self.data['TEMPLATE']:
 | 
			
		||||
            if type(self.data['TEMPLATE']['DISK']) is dict:
 | 
			
		||||
                disks = [self.data['TEMPLATE']['DISK']]
 | 
			
		||||
            else:
 | 
			
		||||
                disks = self.data['TEMPLATE']['DISK']
 | 
			
		||||
 | 
			
		||||
        disks = [
 | 
			
		||||
            {
 | 
			
		||||
                'size_in_gb': int(d['SIZE'])/1024,
 | 
			
		||||
                'opennebula_source': d['SOURCE'],
 | 
			
		||||
                'opennebula_name': d['IMAGE'],
 | 
			
		||||
                'image_size_in_gb': int(d['ORIGINAL_SIZE'])/1024,
 | 
			
		||||
                'pool_name': d['POOL_NAME'],
 | 
			
		||||
                'image': d['IMAGE'],
 | 
			
		||||
                'source': d['SOURCE'],
 | 
			
		||||
                'source_type': d['TM_MAD'],
 | 
			
		||||
                'storage_class': storage_class_mapping[d['POOL_NAME']]
 | 
			
		||||
 | 
			
		||||
            }
 | 
			
		||||
            for d in disks
 | 
			
		||||
        ]
 | 
			
		||||
 | 
			
		||||
        return disks
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def last_host(self):
 | 
			
		||||
        return ((self.data.get('HISTORY_RECORDS', {}) or {}).get('HISTORY', {}) or {}).get('HOSTNAME', None)
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def graphics(self):
 | 
			
		||||
        return self.data.get('TEMPLATE', {}).get('GRAPHICS', {})
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def nics(self):
 | 
			
		||||
        _nics = self.data.get('TEMPLATE', {}).get('NIC', {})
 | 
			
		||||
        if isinstance(_nics, dict):
 | 
			
		||||
            _nics = [_nics]
 | 
			
		||||
        return _nics
 | 
			
		||||
 | 
			
		||||
    @property
 | 
			
		||||
    def ips(self):
 | 
			
		||||
        ipv4, ipv6 = [], []
 | 
			
		||||
        for nic in self.nics:
 | 
			
		||||
            ip = nic.get('IP')
 | 
			
		||||
            ip6 = nic.get('IP6_GLOBAL')
 | 
			
		||||
            if ip:
 | 
			
		||||
                ipv4.append(ip)
 | 
			
		||||
            if ip6:
 | 
			
		||||
                ipv6.append(ip6)
 | 
			
		||||
        return ipv4, ipv6
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue