diff --git a/library/common-test/Chart.yaml b/library/common-test/Chart.yaml index 8686baeb..69d230cf 100644 --- a/library/common-test/Chart.yaml +++ b/library/common-test/Chart.yaml @@ -3,7 +3,7 @@ appVersion: "" dependencies: - name: common repository: file://../common - version: ~12.2.0 + version: ~12.3.0 deprecated: false description: Helper chart to test different use cases of the common library home: https://github.com/truecharts/apps/tree/master/charts/library/common-test diff --git a/library/common/Chart.yaml b/library/common/Chart.yaml index 479c35c3..c29a4477 100644 --- a/library/common/Chart.yaml +++ b/library/common/Chart.yaml @@ -15,4 +15,4 @@ maintainers: name: common sources: null type: library -version: 12.2.33 +version: 12.3.0 diff --git a/library/common/templates/lib/util/_chartcontext.tpl b/library/common/templates/lib/util/_chartcontext.tpl new file mode 100644 index 00000000..fc888e10 --- /dev/null +++ b/library/common/templates/lib/util/_chartcontext.tpl @@ -0,0 +1,114 @@ +{{/* Returns the primary Workload object */}} +{{- define "tc.v1.common.lib.util.chartcontext" -}} + {{/* Create defaults */}} + {{- $protocol := "https" -}} + {{- $host := "$node_ip" -}} + {{- $port := "443" -}} + {{- $url := "" -}} + {{- $podCIDR := "172.16.0.0/16" -}} + {{- $svcCIDR := "172.17.0.0/16" -}} + + {{/* set temporary storage for ingress name and port */}} + {{- $targetIngress := "" -}} + {{- $selectedIngress := "" -}} + + + {{/* Get service, default to primary */}} + {{- $selectedService := fromYaml ( include "tc.v1.common.lib.helpers.getSelectedServiceValues" (dict "rootCtx" $ )) }} + + {{/* read loadbalancer IP's 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 */}} + {{- $targetPort = include "tc.v1.common.lib.util.service.ports.primary" (dict "svcName" $selectedService.shortName "svcValues" $selectedService ) -}} + {{- $selectedPort = get $selectedService.ports $targetPort -}} + {{/* store port number */}} + {{- $port = $selectedPort.port -}} + {{- end -}} + + {{/* Fetch ingress values */}} + {{- $targetIngress = ( include "tc.v1.common.lib.util.ingress.primary" $ ) -}} + {{- $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 */}} + {{- $namespace := "tc-system" }} + {{- if $selectedIngress.ingressClassName }} + {{- $namespace := ( printf "ix-%s" $selectedIngress.ingressClassName ) }} + {{- end }} + {{- $traefikportalhook := lookup "v1" "ConfigMap" $namespace "portalhook" }} + {{- $entrypoint := "websecure" }} + {{- 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 ) -}} + + {{/* sanitise */}} + {{- if eq $port "443" -}} + {{- $protocol = "https" -}} + {{- end -}} + + {{- if eq $port "80" -}} + {{- $protocol = "http" -}} + {{- end -}} + + {{- 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 -}} + {{- else -}} + {{- $url = printf "%s://%s%s" $protocol $host -}} + {{- end -}} + + {{/* TrueNAS SCALE specific code */}} + {{- if $.Values.ixChartContext -}} + {{- if $.Values.ixChartContext.kubernetes_config -}} + {{- $podCIDR = $.Values.ixChartContext.kubernetes_config.cluster_cidr -}} + {{- $svcCIDR = $.Values.ixChartContext.kubernetes_config.service_cidr -}} + {{- end -}} + {{- else -}} + {{/* TODO: Find ways to implement CIDR detection */}} + {{- end -}} + + {{- if $.Values.chartContext -}} + {{- if $.Values.chartContext.APPURL -}} + {{- $url = $.Values.chartContext.APPURL -}} + {{- end -}} + + {{- if $.Values.chartContext.podCIDR -}} + {{- $podCIDR = $.Values.chartContext.podCIDR -}} + {{- end -}} + + {{- if $.Values.chartContext.svcCIDR -}} + {{- $svcCIDR = $.Values.chartContext.svcCIDR -}} + {{- end -}} + {{- end -}} + + {{- $_ := set $.Values.chartContext "APPURL" $url -}} + {{- $_ := set $.Values.chartContext "podCIDR" $podCIDR -}} + {{- $_ := set $.Values.chartContext "svcCIDR" $svcCIDR -}} +{{- end -}} diff --git a/library/common/templates/loader/_init.tpl b/library/common/templates/loader/_init.tpl index c08d18c8..f49e4a35 100644 --- a/library/common/templates/loader/_init.tpl +++ b/library/common/templates/loader/_init.tpl @@ -1,10 +1,13 @@ {{/* Initialiaze values of the chart */}} - {{- define "tc.v1.common.loader.init" -}} {{/* Merge chart values and the common chart defaults */}} {{- include "tc.v1.common.values.init" . -}} + {{/* Ensure TrueCharts chart context information is available */}} + {{- include "tc.v1.common.lib.util.chartcontext" . -}} + + {{/* Add manifest manager pre-install and pre-update job */}} {{- include "tc.v1.common.lib.util.manifest.manage" . | nindent 0 -}} {{/* Autogenerate postgresql passwords if needed */}} diff --git a/library/common/templates/spawner/_portal.tpl b/library/common/templates/spawner/_portal.tpl index a2de82a4..87781a07 100644 --- a/library/common/templates/spawner/_portal.tpl +++ b/library/common/templates/spawner/_portal.tpl @@ -143,10 +143,6 @@ {{- include "tc.v1.common.lib.configmap.validation" (dict "objectData" $configMap) -}} {{- include "tc.v1.common.lib.metadata.validation" (dict "objectData" $configMap "caller" "ConfigMap") -}} - {{- if eq $name "open" -}} - {{- $_ := set $.Values "APPURL" $url -}} - {{- end -}} - {{- if $.Values.ixChartContext -}} {{/* Call class to create the object */}} {{- include "tc.v1.common.class.configmap" (dict "rootCtx" $ "objectData" $configMap) -}} diff --git a/library/common/values.yaml b/library/common/values.yaml index b54569bf..195cfa15 100644 --- a/library/common/values.yaml +++ b/library/common/values.yaml @@ -63,6 +63,11 @@ image: # -- Image pull policy pullPolicy: IfNotPresent +chartContext: + APPURL: "" + podCIDR: "" + svcCIDR: "" + # -- Security Context securityContext: # -- Container security context for all containers