my-apps/charts/common/templates/lib/ingress/_targetSelector.tpl
2025-08-24 00:09:37 +03:00

91 lines
3.0 KiB
Smarty

{{/* Returns the selected service or fallback to primary */}}
{{- define "tc.v1.common.lib.ingress.targetSelector" -}}
{{- $rootCtx := .rootCtx -}}
{{- $objectData := .objectData -}}
{{- $selectedService := (dict "name" "" "port" 0) -}}
{{- $svcData := dict -}}
{{- $portData := dict -}}
{{- $svcName := "" -}}
{{- $portName := "" -}}
{{- if $objectData.targetSelector -}}
{{/* We have validation that only 1 key is allowed */}}
{{- $svcName = ($objectData.targetSelector | keys | mustFirst) -}}
{{- $portName = (get $objectData.targetSelector $svcName) -}}
{{- $svcData = (get $rootCtx.Values.service $svcName) -}}
{{- if not $svcData -}}
{{- fail (printf "Ingress - Expected targeted service [%s] to exist" $svcName) -}}
{{- end -}}
{{- $enabled := (include "tc.v1.common.lib.util.enabled" (dict
"rootCtx" $rootCtx "objectData" $svcData
"name" $svcName "caller" "Ingress"
"key" "ingress")) -}}
{{- if ne $enabled "true" -}}
{{- fail (printf "Ingress - Expected targeted service [%s] to be enabled" $svcName) -}}
{{- end -}}
{{- else -}}
{{/* Find the primary service */}}
{{- range $name, $service := $rootCtx.Values.service -}}
{{- $enabled := (include "tc.v1.common.lib.util.enabled" (dict
"rootCtx" $rootCtx "objectData" $service
"name" $name "caller" "Ingress"
"key" "ingress")) -}}
{{/* Check if its enabled */}}
{{- if eq $enabled "true" -}}
{{- if $service.primary -}}
{{- $svcName = $name -}}
{{- $svcData = $service -}}
{{/* Find the primary port */}}
{{- range $name, $port := $svcData.ports -}}
{{- if $port.primary -}}
{{- $portName = $name -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- end -}}
{{- if not $svcData -}}
{{- fail "Ingress - Expected [targetSelector] or a primary service to exist" -}}
{{- end -}}
{{- end -}}
{{- $portData = (get $svcData.ports $portName) -}}
{{- if not $portData -}}
{{- fail (printf "Ingress - Expected targeted service [%s] to have port [%s]" $svcName $portName) -}}
{{- end -}}
{{- $enabled := (include "tc.v1.common.lib.util.enabled" (dict
"rootCtx" $rootCtx "objectData" $portData
"name" $portName "caller" "Ingress"
"key" "ingress")) -}}
{{- if ne $enabled "true" -}}
{{- fail (printf "Ingress - Expected targeted service port [%s] to be enabled" $portName) -}}
{{- end -}}
{{- $expandedSvcName := include "tc.v1.common.lib.chart.names.fullname" $rootCtx -}}
{{- if not $svcData.primary -}}
{{- $expandedSvcName = printf "%s-%s" $expandedSvcName $svcName -}}
{{- end -}}
{{- $protocol := default "http" -}}
{{- if eq $portData.protocol "https" -}}
{{- $protocol = "https" -}}
{{- end -}}
{{- $selectedService = (dict "name" $expandedSvcName "port" (tpl ($portData.port | toString) $rootCtx) "protocol" $protocol) -}}
{{- $selectedService | toYaml -}}
{{- end -}}