[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,8 +76,12 @@ 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})"
|
||||||
|
else:
|
||||||
|
name = self.id
|
||||||
|
|
||||||
|
return "VM {}: {} cores {} gb ram".format(name,
|
||||||
self.cores,
|
self.cores,
|
||||||
self.ram_in_gb)
|
self.ram_in_gb)
|
||||||
|
|
||||||
|
@ -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…
Reference in a new issue