diff --git a/.env.example b/.env.example index d7164b8..03e6d4d 100644 --- a/.env.example +++ b/.env.example @@ -33,3 +33,6 @@ SERVALA_EMAIL_PASSWORD='' # At most one of the following settings may be set to True SERVALA_EMAIL_TLS='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' diff --git a/src/servala/core/models/organization.py b/src/servala/core/models/organization.py index 371f0ee..e7fb36a 100644 --- a/src/servala/core/models/organization.py +++ b/src/servala/core/models/organization.py @@ -49,7 +49,8 @@ class BillingEntity(models.Model): class OrganizationOrigin(models.Model): """ 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")) diff --git a/src/servala/core/models/service.py b/src/servala/core/models/service.py index b2e89f5..2f4295d 100644 --- a/src/servala/core/models/service.py +++ b/src/servala/core/models/service.py @@ -3,6 +3,10 @@ from django.utils.translation import gettext_lazy as _ class ServiceCategory(models.Model): + """ + Categories for services, e.g. "Databases", "Storage", "Compute". + """ + name = models.CharField(max_length=100, verbose_name=_("Name")) description = models.TextField(blank=True, verbose_name=_("Description")) logo = models.ImageField( @@ -26,6 +30,10 @@ class ServiceCategory(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")) description = models.TextField(blank=True, verbose_name=_("Description")) logo = models.ImageField( @@ -64,6 +72,10 @@ class ControlPlane(models.Model): class CloudProvider(models.Model): + """ + A cloud provider, e.g. "Exoscale". + """ + name = models.CharField(max_length=100, verbose_name=_("Name")) description = models.TextField(blank=True, verbose_name=_("Description")) logo = models.ImageField( @@ -79,6 +91,10 @@ class CloudProvider(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")) description = models.TextField(blank=True, verbose_name=_("Description")) # TODO schema @@ -98,6 +114,10 @@ class Plan(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")) service = models.ForeignKey( to="Service", diff --git a/src/servala/settings.py b/src/servala/settings.py index 507d890..0bbd9c6 100644 --- a/src/servala/settings.py +++ b/src/servala/settings.py @@ -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_SSL = os.environ.get("SERVALA_EMAIL_SSL", "False") == "True" +SERVALA_DEFAULT_ORIGIN = int(os.environ.get("SERVALA_DEFAULT_ORIGIN", "1")) + ####################################### # Non-configurable settings below # #######################################