Add missing created_at/updated_at fields
This commit is contained in:
parent
13c6ca9253
commit
2f127e94f7
2 changed files with 145 additions and 8 deletions
134
src/servala/core/migrations/0008_created_and_updated.py
Normal file
134
src/servala/core/migrations/0008_created_and_updated.py
Normal 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"),
|
||||
),
|
||||
]
|
|
@ -8,8 +8,10 @@ from encrypted_fields.fields import EncryptedJSONField
|
|||
from kubernetes import config
|
||||
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".
|
||||
"""
|
||||
|
@ -40,7 +42,7 @@ class ServiceCategory(models.Model):
|
|||
return self.name
|
||||
|
||||
|
||||
class Service(models.Model):
|
||||
class Service(ServalaModelMixin, models.Model):
|
||||
"""
|
||||
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)
|
||||
|
||||
|
||||
class ControlPlane(models.Model):
|
||||
class ControlPlane(ServalaModelMixin, models.Model):
|
||||
"""
|
||||
Note: ControlPlanes are called "Service Provider Zone" in the user-facing frontend.
|
||||
"""
|
||||
|
||||
name = models.CharField(max_length=100, verbose_name=_("Name"))
|
||||
description = models.TextField(blank=True, verbose_name=_("Description"))
|
||||
# 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))
|
||||
|
||||
|
||||
class CloudProvider(models.Model):
|
||||
class CloudProvider(ServalaModelMixin, models.Model):
|
||||
"""
|
||||
A cloud provider, e.g. "Exoscale".
|
||||
"""
|
||||
|
@ -205,7 +208,7 @@ class CloudProvider(models.Model):
|
|||
return self.name
|
||||
|
||||
|
||||
class Plan(models.Model):
|
||||
class Plan(ServalaModelMixin, models.Model):
|
||||
"""
|
||||
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)
|
||||
|
||||
|
||||
class ServiceDefinition(models.Model):
|
||||
class ServiceDefinition(ServalaModelMixin, models.Model):
|
||||
"""
|
||||
Configuration/service implementation: contains information on which
|
||||
CompositeResourceDefinition (aka XRD) implements a service on a ControlPlane.
|
||||
|
@ -282,7 +285,7 @@ class ServiceDefinition(models.Model):
|
|||
return self.name
|
||||
|
||||
|
||||
class ServiceOfferingControlPlane(models.Model):
|
||||
class ServiceOfferingControlPlane(ServalaModelMixin, models.Model):
|
||||
"""
|
||||
Each combination of ServiceOffering and ControlPlane can have a different
|
||||
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)
|
||||
|
||||
|
||||
class ServiceOffering(models.Model):
|
||||
class ServiceOffering(ServalaModelMixin, models.Model):
|
||||
"""
|
||||
A service offering, e.g. "PostgreSQL on AWS", "MinIO on GCP".
|
||||
"""
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue