[models] update / doc
This commit is contained in:
		
					parent
					
						
							
								9c1b4ab275
							
						
					
				
			
			
				commit
				
					
						64780bfc6c
					
				
			
		
					 2 changed files with 29 additions and 7 deletions
				
			
		| 
						 | 
					@ -56,7 +56,7 @@ def default_payment_delay():
 | 
				
			||||||
# See https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices-enum-types
 | 
					# See https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices-enum-types
 | 
				
			||||||
class RecurringPeriod(models.IntegerChoices):
 | 
					class RecurringPeriod(models.IntegerChoices):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
    We don't support months are years, because the vary in length.
 | 
					    We don't support months are years, because they vary in length.
 | 
				
			||||||
    This is not only complicated, but also unfair to the user, as the user pays the same
 | 
					    This is not only complicated, but also unfair to the user, as the user pays the same
 | 
				
			||||||
    amount for different durations.
 | 
					    amount for different durations.
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
| 
						 | 
					@ -648,6 +648,9 @@ class Product(UncloudModel):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def one_time_price(self):
 | 
					    def one_time_price(self):
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
 | 
					        Default is 0 CHF
 | 
				
			||||||
 | 
					        """
 | 
				
			||||||
        return 0
 | 
					        return 0
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -54,6 +54,7 @@ class VMHost(UncloudModel):
 | 
				
			||||||
        return self.usable_cores - sum([vm.cores for vm in self.vms ])
 | 
					        return self.usable_cores - sum([vm.cores for vm in self.vms ])
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VMProduct(Product):
 | 
					class VMProduct(Product):
 | 
				
			||||||
    vmhost = models.ForeignKey(
 | 
					    vmhost = models.ForeignKey(
 | 
				
			||||||
        VMHost, on_delete=models.CASCADE, editable=False, blank=True, null=True
 | 
					        VMHost, on_delete=models.CASCADE, editable=False, blank=True, null=True
 | 
				
			||||||
| 
						 | 
					@ -75,10 +76,14 @@ class VMProduct(Product):
 | 
				
			||||||
        return self.cores * 3 + self.ram_in_gb * 4
 | 
					        return self.cores * 3 + self.ram_in_gb * 4
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    def __str__(self):
 | 
					    def __str__(self):
 | 
				
			||||||
        return "VM {} ({}): {} cores {} gb ram".format(self.uuid,
 | 
					        if self.name:
 | 
				
			||||||
                                                       self.name,
 | 
					            name = f"{self.name} ({self.id})"
 | 
				
			||||||
                                                       self.cores,
 | 
					        else:
 | 
				
			||||||
                                                       self.ram_in_gb)
 | 
					            name = self.id
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        return "VM {}: {} cores {} gb ram".format(name,
 | 
				
			||||||
 | 
					                                                  self.cores,
 | 
				
			||||||
 | 
					                                                  self.ram_in_gb)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def description(self):
 | 
					    def description(self):
 | 
				
			||||||
| 
						 | 
					@ -140,6 +145,16 @@ class VMDiskImageProduct(UncloudModel):
 | 
				
			||||||
                                                   self.size_in_gb)
 | 
					                                                   self.size_in_gb)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# See https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices-enum-types
 | 
				
			||||||
 | 
					class VMDiskType(models.TextChoices):
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    Types of disks that can be attached to VMs
 | 
				
			||||||
 | 
					    """
 | 
				
			||||||
 | 
					    CEPH_SSD   = 'ceph/ssd'
 | 
				
			||||||
 | 
					    CEPH_HDD   = 'ceph/hdd'
 | 
				
			||||||
 | 
					    LOCAL_SSD  = 'local/ssd'
 | 
				
			||||||
 | 
					    LOCAL_HDD  = 'local/hdd'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					
 | 
				
			||||||
class VMDiskProduct(Product):
 | 
					class VMDiskProduct(Product):
 | 
				
			||||||
    """
 | 
					    """
 | 
				
			||||||
| 
						 | 
					@ -155,6 +170,11 @@ class VMDiskProduct(Product):
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    size_in_gb = models.FloatField(blank=True)
 | 
					    size_in_gb = models.FloatField(blank=True)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    disk_type = models.CharField(
 | 
				
			||||||
 | 
					        max_length=20,
 | 
				
			||||||
 | 
					        choices=VMDiskType.choices,
 | 
				
			||||||
 | 
					        default=VMDiskType.CEPH_SSD)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    @property
 | 
					    @property
 | 
				
			||||||
    def description(self):
 | 
					    def description(self):
 | 
				
			||||||
        return "Disk for VM '{}': {}GB".format(self.vm.name, self.size_in_gb)
 | 
					        return "Disk for VM '{}': {}GB".format(self.vm.name, self.size_in_gb)
 | 
				
			||||||
| 
						 | 
					@ -163,10 +183,9 @@ class VMDiskProduct(Product):
 | 
				
			||||||
    def recurring_price(self):
 | 
					    def recurring_price(self):
 | 
				
			||||||
        return (self.size_in_gb / 10) * 3.5
 | 
					        return (self.size_in_gb / 10) * 3.5
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # Sample code for clean method
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
    # Ensures that a VMDiskProduct can only be created from a VMDiskImageProduct
 | 
					    # Ensures that a VMDiskProduct can only be created from a VMDiskImageProduct
 | 
				
			||||||
    # that is in status 'active'
 | 
					    # that is in status 'active'
 | 
				
			||||||
 | 
					    # This might not be need in "for billing only" constellations
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    # def clean(self):
 | 
					    # def clean(self):
 | 
				
			||||||
    #     if self.image.status != 'active':
 | 
					    #     if self.image.status != 'active':
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue