Docs + default origin setting

This commit is contained in:
Tobias Kunze 2025-03-16 09:02:03 +01:00
parent 85db7af0e1
commit e8c624d408
4 changed files with 27 additions and 1 deletions

View file

@ -33,3 +33,6 @@ SERVALA_EMAIL_PASSWORD=''
# At most one of the following settings may be set to True # At most one of the following settings may be set to True
SERVALA_EMAIL_TLS='False' SERVALA_EMAIL_TLS='False'
SERVALA_EMAIL_SSL='False' SERVALA_EMAIL_SSL='False'
# If the default OrganizationOrigin is **not** the one with the database ID 1, set it here.
SERVALA_DEFAULT_ORIGIN='1'

View file

@ -49,7 +49,8 @@ class BillingEntity(models.Model):
class OrganizationOrigin(models.Model): class OrganizationOrigin(models.Model):
""" """
Every organization has an origin, though origins may be Every organization has an origin, though origins may be
shared across different organizations. shared across different organizations. The default origin
(by PK) is configured in the settings as SERVALA_DEFAULT_ORIGIN.
""" """
name = models.CharField(max_length=100, verbose_name=_("Name")) name = models.CharField(max_length=100, verbose_name=_("Name"))

View file

@ -3,6 +3,10 @@ from django.utils.translation import gettext_lazy as _
class ServiceCategory(models.Model): class ServiceCategory(models.Model):
"""
Categories for services, e.g. "Databases", "Storage", "Compute".
"""
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"))
logo = models.ImageField( logo = models.ImageField(
@ -26,6 +30,10 @@ class ServiceCategory(models.Model):
class Service(models.Model): class Service(models.Model):
"""
A service that can be offered, e.g. "PostgreSQL", "MinIO", "Kubernetes".
"""
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"))
logo = models.ImageField( logo = models.ImageField(
@ -64,6 +72,10 @@ class ControlPlane(models.Model):
class CloudProvider(models.Model): class CloudProvider(models.Model):
"""
A cloud provider, e.g. "Exoscale".
"""
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"))
logo = models.ImageField( logo = models.ImageField(
@ -79,6 +91,10 @@ class CloudProvider(models.Model):
class Plan(models.Model): class Plan(models.Model):
"""
Each service offering can have multiple plans, e.g. for different tiers.
"""
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"))
# TODO schema # TODO schema
@ -98,6 +114,10 @@ class Plan(models.Model):
class ServiceOffering(models.Model): class ServiceOffering(models.Model):
"""
A service offering, e.g. "PostgreSQL on AWS", "MinIO on GCP".
"""
description = models.TextField(blank=True, verbose_name=_("Description")) description = models.TextField(blank=True, verbose_name=_("Description"))
service = models.ForeignKey( service = models.ForeignKey(
to="Service", to="Service",

View file

@ -62,6 +62,8 @@ EMAIL_HOST_PASSWORD = os.environ.get("SERVALA_EMAIL_PASSWORD", "")
EMAIL_USE_TLS = os.environ.get("SERVALA_EMAIL_TLS", "False") == "True" EMAIL_USE_TLS = os.environ.get("SERVALA_EMAIL_TLS", "False") == "True"
EMAIL_USE_SSL = os.environ.get("SERVALA_EMAIL_SSL", "False") == "True" EMAIL_USE_SSL = os.environ.get("SERVALA_EMAIL_SSL", "False") == "True"
SERVALA_DEFAULT_ORIGIN = int(os.environ.get("SERVALA_DEFAULT_ORIGIN", "1"))
####################################### #######################################
# Non-configurable settings below # # Non-configurable settings below #
####################################### #######################################