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 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".
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue