From 64780bfc6cb6045033c4ad2f38de0b0eb0073ede Mon Sep 17 00:00:00 2001 From: Nico Schottelius Date: Sat, 1 Aug 2020 16:29:24 +0200 Subject: [PATCH] [models] update / doc --- uncloud_pay/models.py | 5 ++++- uncloud_vm/models.py | 31 +++++++++++++++++++++++++------ 2 files changed, 29 insertions(+), 7 deletions(-) diff --git a/uncloud_pay/models.py b/uncloud_pay/models.py index 66ad4d2..47c1fe1 100644 --- a/uncloud_pay/models.py +++ b/uncloud_pay/models.py @@ -56,7 +56,7 @@ def default_payment_delay(): # See https://docs.djangoproject.com/en/dev/ref/models/fields/#field-choices-enum-types 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 amount for different durations. """ @@ -648,6 +648,9 @@ class Product(UncloudModel): @property def one_time_price(self): + """ + Default is 0 CHF + """ return 0 @property diff --git a/uncloud_vm/models.py b/uncloud_vm/models.py index 440df08..e8504a6 100644 --- a/uncloud_vm/models.py +++ b/uncloud_vm/models.py @@ -54,6 +54,7 @@ class VMHost(UncloudModel): return self.usable_cores - sum([vm.cores for vm in self.vms ]) + class VMProduct(Product): vmhost = models.ForeignKey( 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 def __str__(self): - return "VM {} ({}): {} cores {} gb ram".format(self.uuid, - self.name, - self.cores, - self.ram_in_gb) + if self.name: + name = f"{self.name} ({self.id})" + else: + name = self.id + + return "VM {}: {} cores {} gb ram".format(name, + self.cores, + self.ram_in_gb) @property def description(self): @@ -140,6 +145,16 @@ class VMDiskImageProduct(UncloudModel): 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): """ @@ -155,6 +170,11 @@ class VMDiskProduct(Product): size_in_gb = models.FloatField(blank=True) + disk_type = models.CharField( + max_length=20, + choices=VMDiskType.choices, + default=VMDiskType.CEPH_SSD) + @property def description(self): return "Disk for VM '{}': {}GB".format(self.vm.name, self.size_in_gb) @@ -163,10 +183,9 @@ class VMDiskProduct(Product): def recurring_price(self): return (self.size_in_gb / 10) * 3.5 - # Sample code for clean method - # Ensures that a VMDiskProduct can only be created from a VMDiskImageProduct # that is in status 'active' + # This might not be need in "for billing only" constellations # def clean(self): # if self.image.status != 'active':