Add missing created_at/updated_at fields

This commit is contained in:
Tobias Kunze 2025-03-27 09:41:46 +01:00
parent 13c6ca9253
commit 2f127e94f7
2 changed files with 145 additions and 8 deletions

View file

@ -0,0 +1,134 @@
# Generated by Django 5.2b1 on 2025-03-26 14:54
import django.utils.timezone
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
("core", "0007_service_definition"),
]
operations = [
migrations.AddField(
model_name="cloudprovider",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="cloudprovider",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
migrations.AddField(
model_name="controlplane",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="controlplane",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
migrations.AddField(
model_name="plan",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="plan",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
migrations.AddField(
model_name="service",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="service",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
migrations.AddField(
model_name="servicecategory",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="servicecategory",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
migrations.AddField(
model_name="servicedefinition",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="servicedefinition",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
migrations.AddField(
model_name="serviceoffering",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="serviceoffering",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
migrations.AddField(
model_name="serviceofferingcontrolplane",
name="created_at",
field=models.DateTimeField(
auto_now_add=True,
default=django.utils.timezone.now,
verbose_name="Created",
),
preserve_default=False,
),
migrations.AddField(
model_name="serviceofferingcontrolplane",
name="updated_at",
field=models.DateTimeField(auto_now=True, verbose_name="Last updated"),
),
]

View file

@ -8,8 +8,10 @@ from encrypted_fields.fields import EncryptedJSONField
from kubernetes import config from kubernetes import config
from kubernetes.client.rest import ApiException from kubernetes.client.rest import ApiException
from servala.core.models.mixins import ServalaModelMixin
class ServiceCategory(models.Model):
class ServiceCategory(ServalaModelMixin, models.Model):
""" """
Categories for services, e.g. "Databases", "Storage", "Compute". Categories for services, e.g. "Databases", "Storage", "Compute".
""" """
@ -40,7 +42,7 @@ class ServiceCategory(models.Model):
return self.name return self.name
class Service(models.Model): class Service(ServalaModelMixin, models.Model):
""" """
A service that can be offered, e.g. "PostgreSQL", "MinIO", "Kubernetes". A service that can be offered, e.g. "PostgreSQL", "MinIO", "Kubernetes".
""" """
@ -89,10 +91,11 @@ def validate_api_credentials(value):
return validate_dict(value, required_fields) return validate_dict(value, required_fields)
class ControlPlane(models.Model): class ControlPlane(ServalaModelMixin, models.Model):
""" """
Note: ControlPlanes are called "Service Provider Zone" in the user-facing frontend. Note: ControlPlanes are called "Service Provider Zone" in the user-facing frontend.
""" """
name = models.CharField(max_length=100, verbose_name=_("Name")) name = models.CharField(max_length=100, verbose_name=_("Name"))
description = models.TextField(blank=True, verbose_name=_("Description")) description = models.TextField(blank=True, verbose_name=_("Description"))
# Either contains the fields "certificate_authority_data", "server" and "token", or is empty # Either contains the fields "certificate_authority_data", "server" and "token", or is empty
@ -180,7 +183,7 @@ class ControlPlane(models.Model):
return False, _("Connection error: {}").format(str(e)) return False, _("Connection error: {}").format(str(e))
class CloudProvider(models.Model): class CloudProvider(ServalaModelMixin, models.Model):
""" """
A cloud provider, e.g. "Exoscale". A cloud provider, e.g. "Exoscale".
""" """
@ -205,7 +208,7 @@ class CloudProvider(models.Model):
return self.name return self.name
class Plan(models.Model): class Plan(ServalaModelMixin, models.Model):
""" """
Each service offering can have multiple plans, e.g. for different tiers. Each service offering can have multiple plans, e.g. for different tiers.
""" """
@ -239,7 +242,7 @@ def validate_api_definition(value):
return validate_dict(value, required_fields) return validate_dict(value, required_fields)
class ServiceDefinition(models.Model): class ServiceDefinition(ServalaModelMixin, models.Model):
""" """
Configuration/service implementation: contains information on which Configuration/service implementation: contains information on which
CompositeResourceDefinition (aka XRD) implements a service on a ControlPlane. CompositeResourceDefinition (aka XRD) implements a service on a ControlPlane.
@ -282,7 +285,7 @@ class ServiceDefinition(models.Model):
return self.name return self.name
class ServiceOfferingControlPlane(models.Model): class ServiceOfferingControlPlane(ServalaModelMixin, models.Model):
""" """
Each combination of ServiceOffering and ControlPlane can have a different Each combination of ServiceOffering and ControlPlane can have a different
ServiceDefinition, which is here modeled as the "through" model. ServiceDefinition, which is here modeled as the "through" model.
@ -368,7 +371,7 @@ class ServiceOfferingControlPlane(models.Model):
return generate_model_form_class(self.django_model) return generate_model_form_class(self.django_model)
class ServiceOffering(models.Model): class ServiceOffering(ServalaModelMixin, models.Model):
""" """
A service offering, e.g. "PostgreSQL on AWS", "MinIO on GCP". A service offering, e.g. "PostgreSQL on AWS", "MinIO on GCP".
""" """