k8s/helm-charts/dashy/charts/common/templates/spawner/_portal.tpl

177 lines
6.2 KiB
Smarty
Raw Normal View History

2023-11-16 19:42:02 +10:00
{{/* Portal Spawwner */}}
{{/* Call this template:
{{ include "tc.v1.common.spawner.portal" $ -}}
*/}}
{{- define "tc.v1.common.spawner.portal" -}}
{{- range $name, $portal := .Values.portal -}}
{{- if $portal.enabled -}}
{{/* Create a copy of the portal */}}
{{- $objectData := (mustDeepCopy $portal) -}}
{{- $override := $objectData.override -}}
{{- $targetSelector := $objectData.targetSelector -}}
{{/* Create defaults */}}
{{- $protocol := "http" -}}
{{- $host := "$node_ip" -}}
{{- $port := "443" -}}
{{- $path := $objectData.path | default "/" -}}
{{- $url := "" -}}
{{/* Get service, default to primary */}}
{{- $serviceData := dict "targetSelector" $targetSelector.service -}}
{{- $selectedService := fromYaml ( include "tc.v1.common.lib.helpers.getSelectedServiceValues" (dict "rootCtx" $ "objectData" $serviceData)) }}
{{/* read loadbalancer IPs for metallb */}}
{{- if eq $selectedService.type "LoadBalancer" -}}
{{- with $selectedService.loadBalancerIP -}}
{{- $host = toString . -}}
{{- end -}}
{{/* set temporary storage for port name and port */}}
{{- $targetPort := "" -}}
{{- $selectedPort := "" -}}
{{/* Fetch port values */}}
{{- if $targetSelector.port -}}
{{- $targetPort = $targetSelector.port -}}
{{- else -}}
{{- $targetPort = include "tc.v1.common.lib.util.service.ports.primary" (dict "svcName" $selectedService.shortName "svcValues" $selectedService ) -}}
{{- end -}}
{{- $selectedPort = get $selectedService.ports $targetPort -}}
{{/* store port number */}}
{{- $port = $selectedPort.port -}}
{{- end -}}
{{/* set temporary storage for ingress name and port */}}
{{- $targetIngress := "" -}}
{{- $selectedIngress := "" -}}
{{/* Fetch ingress values */}}
{{- if $targetSelector.ingress -}}
{{- $targetIngress = $targetSelector.ingress -}}
{{- else -}}
{{- $targetIngress = ( include "tc.v1.common.lib.util.ingress.primary" $ ) -}}
{{- end -}}
{{- $selectedIngress = get $.Values.ingress $targetIngress -}}
{{/* store host from ingress number */}}
{{- if $selectedIngress -}}
{{- if $selectedIngress.enabled -}}
{{- with (index $selectedIngress.hosts 0) }}
{{- $host = .host -}}
{{- end }}
{{/* Get the port for the ingress entrypoint */}}
{{- $traefikNamespace := "tc-system" -}}
{{- if $.Values.operator.traefik -}}
{{- if $.Values.operator.traefik.namespace -}}
{{- $traefikNamespace := $.Values.operator.traefik.namespace -}}
{{- end -}}
{{- end -}}
{{- if $selectedIngress.ingressClassName }}
{{- if $.Values.global.ixChartContext -}}
{{- $traefikNamespace = (printf "ix-%s" $selectedIngress.ingressClassName) -}}
{{- else -}}
{{- $traefikNamespace = $selectedIngress.ingressClassName -}}
{{- end -}}
{{- end -}}
{{- $traefikportalhook := lookup "v1" "ConfigMap" $traefikNamespace "portalhook" }}
{{- $entrypoint := "websecure" }}
{{- $protocol = "https" -}}
{{- if $selectedIngress.entrypoint }}
{{- $entrypoint = $selectedIngress.entrypoint }}
{{- end }}
{{- if $traefikportalhook }}
{{- if ( index $traefikportalhook.data $entrypoint ) }}
{{- $port = ( index $traefikportalhook.data $entrypoint ) }}
{{- end }}
{{- end }}
{{- end }}
{{- end }}
{{- $port = ( toString $port ) -}}
{{/* Apply overrides */}}
{{- if $override.protocol -}}
{{- $protocol = $override.protocol -}}
{{- end -}}
{{- if $override.host -}}
{{- $host = $override.host -}}
{{- end -}}
{{- if $override.port -}}
{{- $port = $override.port -}}
{{- end -}}
{{/* sanitise */}}
{{- if eq $port "443" -}}
{{- $protocol = "https" -}}
{{- end -}}
{{- if eq $port "80" -}}
{{- $protocol = "http" -}}
{{- end -}}
{{/* TODO: Reenable when iX fixes bugs crashing GUI on empty port */}}
{{/*
{{- if or ( and ( eq $protocol "https" ) ( eq $port "443" ) ) ( and ( eq $protocol "http" ) ( eq $port "80" ) ) -}}
{{- $port = "" -}}
{{- end -}}
*/}}
{{- $port = toString $port -}}
{{/* Construct URL*/}}
{{- if $port -}}
{{- $url = printf "%s://%s:%s%s" $protocol $host $port $path -}}
{{- else -}}
{{- $url = printf "%s://%s%s" $protocol $host $path -}}
{{- end -}}
{{/* create configmap entry*/}}
{{- $portalData := dict "protocol" $protocol "host" $host "port" $port "path" $path "url" $url -}}
{{/* construct configmap */}}
{{- $objectName := ( printf "tcportal-%s" $name ) -}}
{{- $configMap := dict "enabled" true "name" $objectName "shortName" $objectName "data" $portalData -}}
{{/* Perform validations */}} {{/* Configmaps have a max name length of 253 */}}
{{- include "tc.v1.common.lib.chart.names.validation" (dict "name" $objectName "length" 253) -}}
{{- include "tc.v1.common.lib.configmap.validation" (dict "objectData" $configMap) -}}
{{- include "tc.v1.common.lib.metadata.validation" (dict "objectData" $configMap "caller" "ConfigMap") -}}
{{- if $.Values.global.ixChartContext -}}
{{/* Call class to create the object */}}
{{- include "tc.v1.common.class.configmap" (dict "rootCtx" $ "objectData" $configMap) -}}
{{/* iXportals */}}
{{- $useNodeIP := false -}}
{{- if eq $host "$node_ip" -}}
{{- $useNodeIP = true -}}
{{- end -}}
{{- $iXPortalData := dict "portalName" $name "useNodeIP" $useNodeIP "protocol" $protocol "host" $host "port" $port "path" $path "url" $url -}}
{{- $iXPortals := append $.Values.iXPortals $iXPortalData -}}
{{- $_ := set $.Values "iXPortals" $iXPortals -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}