from django.db import models class VMHost(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) # 253 is the maximum DNS name length hostname = models.CharField(max_length=253) # indirectly gives a maximum number of cores / VM - f.i. 32 physical_cores = models.IntegerField() # determines the maximum usable cores - f.i. 320 if you overbook by a factor of 10 usable_cores = models.IntegerField() # ram that can be used of the server usable_ram_in_gb = models.FloatField() status = models.CharField(max_length=32, choices = ( ('pending', 'Pending'), ('active', 'Active'), ('unusable', 'Unusable'), ), default='pending' ) class VM(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) owner = models.ForeignKey(get_user_model(), on_delete=models.CASCADE) cores = models.IntegerField() ram_in_gb = models.FloatField() vmhost = models.ForeignKey(VMHost, on_delete=models.CASCADE) class VMDisk(models.Model): uuid = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False) vm = models.ForeignKey(VM, on_delete=models.CASCADE) size_in_gb = models.FloatField() storage_class = models.CharField(max_length=32, choices = ( ('hdd', 'HDD'), ('ssd', 'SSD'), ), default='ssd' )