correctly return URLs for apps
This commit is contained in:
parent
fd28d5b774
commit
9e83dc314f
2 changed files with 34 additions and 5 deletions
|
@ -1,6 +1,7 @@
|
||||||
"""Everything to do with Apps"""
|
"""Everything to do with Apps"""
|
||||||
|
|
||||||
import os
|
import os
|
||||||
|
import base64
|
||||||
|
|
||||||
from sqlalchemy import ForeignKey, Integer, String, Boolean
|
from sqlalchemy import ForeignKey, Integer, String, Boolean
|
||||||
from sqlalchemy.orm import relationship
|
from sqlalchemy.orm import relationship
|
||||||
|
@ -11,6 +12,11 @@ import helpers.kubernetes as k8s
|
||||||
#from .apps import APP_NOT_INSTALLED_STATUS
|
#from .apps import APP_NOT_INSTALLED_STATUS
|
||||||
|
|
||||||
APP_NOT_INSTALLED_STATUS = "Not installed"
|
APP_NOT_INSTALLED_STATUS = "Not installed"
|
||||||
|
DEFAULT_APP_SUBDOMAINS = {
|
||||||
|
"nextcloud": "files",
|
||||||
|
"wordpress": "www",
|
||||||
|
"monitoring": "grafana",
|
||||||
|
}
|
||||||
|
|
||||||
class App(db.Model):
|
class App(db.Model):
|
||||||
"""
|
"""
|
||||||
|
@ -22,13 +28,26 @@ class App(db.Model):
|
||||||
name = db.Column(String(length=64))
|
name = db.Column(String(length=64))
|
||||||
slug = db.Column(String(length=64), unique=True)
|
slug = db.Column(String(length=64), unique=True)
|
||||||
external = db.Column(Boolean, unique=False, nullable=False, default=True, server_default='0')
|
external = db.Column(Boolean, unique=False, nullable=False, default=True, server_default='0')
|
||||||
|
# The URL is only stored in the DB for external applications; otherwise the
|
||||||
|
# URL is stored in a configmap (see get_url)
|
||||||
url = db.Column(String(length=128), unique=False)
|
url = db.Column(String(length=128), unique=False)
|
||||||
|
|
||||||
def __repr__(self):
|
def __repr__(self):
|
||||||
return f"{self.id} <{self.name}>"
|
return f"{self.id} <{self.name}>"
|
||||||
|
|
||||||
def get_url(self):
|
def get_url(self):
|
||||||
"""Returns the URL where this application is running"""
|
"""
|
||||||
|
Returns the URL where this application is running
|
||||||
|
|
||||||
|
For external applications: the URL is stored in the database
|
||||||
|
|
||||||
|
For internal applications: the URL is stored in a configmap named
|
||||||
|
`stackspin-{self.slug}-kustomization-variables under
|
||||||
|
`{self.slug_domain}`. This function reads that configmap. If the
|
||||||
|
configmap does not contain a URL for the application (which is
|
||||||
|
possible, if the app is not installed yet, for example), we return a
|
||||||
|
default URL.
|
||||||
|
"""
|
||||||
|
|
||||||
if self.external:
|
if self.external:
|
||||||
return self.url
|
return self.url
|
||||||
|
@ -38,10 +57,20 @@ class App(db.Model):
|
||||||
f"stackspin-{self.slug}-kustomization-variables",
|
f"stackspin-{self.slug}-kustomization-variables",
|
||||||
"flux-system")
|
"flux-system")
|
||||||
domain_key = f"{self.slug}_domain"
|
domain_key = f"{self.slug}_domain"
|
||||||
|
# No config map found, or configmap not configured to contain the
|
||||||
|
# domain (yet). Return the default for this app
|
||||||
if ks_config_map is None or domain_key not in ks_config_map.keys():
|
if ks_config_map is None or domain_key not in ks_config_map.keys():
|
||||||
return None
|
domain_secret = k8s.get_kubernetes_secret_data(
|
||||||
|
"stackspin-cluster-variables",
|
||||||
return ks_config_map[domain_key]
|
"flux-system")
|
||||||
|
domain = base64.b64decode(domain_secret['domain']).decode()
|
||||||
|
# See if there is another default subdomain for this app than just
|
||||||
|
# "slug.{domain}"
|
||||||
|
if self.slug in DEFAULT_APP_SUBDOMAINS:
|
||||||
|
return f"https://{DEFAULT_APP_SUBDOMAINS[self.slug]}.{domain}"
|
||||||
|
# No default known
|
||||||
|
return f"https://{self.slug}.{domain}"
|
||||||
|
return f"https://{ks_config_map[domain_key]}"
|
||||||
|
|
||||||
|
|
||||||
def get_status(self):
|
def get_status(self):
|
||||||
|
|
Loading…
Reference in a new issue