Integrating traefik
This commit is contained in:
178
opencloud/charts/traefik/templates/_helpers.tpl
Normal file
178
opencloud/charts/traefik/templates/_helpers.tpl
Normal file
@@ -0,0 +1,178 @@
|
||||
{{/* vim: set filetype=mustache: */}}
|
||||
|
||||
{{/*
|
||||
Expand the name of the chart.
|
||||
*/}}
|
||||
{{- define "traefik.name" -}}
|
||||
{{- default .Chart.Name .Values.nameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create chart name and version as used by the chart label.
|
||||
*/}}
|
||||
{{- define "traefik.chart" -}}
|
||||
{{- printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create the chart image name.
|
||||
*/}}
|
||||
{{- define "traefik.image-name" -}}
|
||||
{{- printf "%s/%s:%s" .Values.image.registry .Values.image.repository (.Values.image.tag | default .Chart.AppVersion) }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Create a default fully qualified app name.
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
If release name contains chart name it will be used as a full name.
|
||||
*/}}
|
||||
{{- define "traefik.fullname" -}}
|
||||
{{- if .Values.fullnameOverride -}}
|
||||
{{- .Values.fullnameOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- $name := default .Chart.Name .Values.nameOverride -}}
|
||||
{{- if contains $name .Release.Name -}}
|
||||
{{- .Release.Name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- printf "%s-%s" .Release.Name $name | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Allow customization of the instance label value.
|
||||
*/}}
|
||||
{{- define "traefik.instance-name" -}}
|
||||
{{- default (printf "%s-%s" .Release.Name .Release.Namespace) .Values.instanceLabelOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Shared labels used for selector*/}}
|
||||
{{/* This is an immutable field: this should not change between upgrade */}}
|
||||
{{- define "traefik.labelselector" -}}
|
||||
app.kubernetes.io/name: {{ template "traefik.name" . }}
|
||||
app.kubernetes.io/instance: {{ template "traefik.instance-name" . }}
|
||||
{{- end }}
|
||||
|
||||
{{/* Shared labels used in metada */}}
|
||||
{{- define "traefik.labels" -}}
|
||||
{{ include "traefik.labelselector" . }}
|
||||
helm.sh/chart: {{ template "traefik.chart" . }}
|
||||
app.kubernetes.io/managed-by: {{ .Release.Service }}
|
||||
{{- with .Values.commonLabels }}
|
||||
{{ toYaml . }}
|
||||
{{- end }}
|
||||
{{- end }}
|
||||
|
||||
{{/*
|
||||
Construct the namespace for all namespaced resources
|
||||
We truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec).
|
||||
Preserve the default behavior of the Release namespace if no override is provided
|
||||
*/}}
|
||||
{{- define "traefik.namespace" -}}
|
||||
{{- if .Values.namespaceOverride -}}
|
||||
{{- .Values.namespaceOverride | trunc 63 | trimSuffix "-" -}}
|
||||
{{- else -}}
|
||||
{{- .Release.Namespace -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
The name of the service account to use
|
||||
*/}}
|
||||
{{- define "traefik.serviceAccountName" -}}
|
||||
{{- default (include "traefik.fullname" .) .Values.serviceAccount.name -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
The name of the ClusterRole and ClusterRoleBinding to use.
|
||||
Adds the namespace to name to prevent duplicate resource names when there
|
||||
are multiple namespaced releases with the same release name.
|
||||
*/}}
|
||||
{{- define "traefik.clusterRoleName" -}}
|
||||
{{- (printf "%s-%s" (include "traefik.fullname" .) .Release.Namespace) | trunc 63 | trimSuffix "-" }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Construct the path for the providers.kubernetesingress.ingressendpoint.publishedservice.
|
||||
By convention this will simply use the <namespace>/<service-name> to match the name of the
|
||||
service generated.
|
||||
Users can provide an override for an explicit service they want bound via `.Values.providers.kubernetesIngress.publishedService.pathOverride`
|
||||
*/}}
|
||||
{{- define "providers.kubernetesIngress.publishedServicePath" -}}
|
||||
{{- $defServiceName := printf "%s/%s" .Release.Namespace (include "traefik.fullname" .) -}}
|
||||
{{- $servicePath := default $defServiceName .Values.providers.kubernetesIngress.publishedService.pathOverride }}
|
||||
{{- print $servicePath | trimSuffix "-" -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Construct a comma-separated list of whitelisted namespaces
|
||||
*/}}
|
||||
{{- define "providers.kubernetesCRD.namespaces" -}}
|
||||
{{- default (include "traefik.namespace" .) (join "," .Values.providers.kubernetesCRD.namespaces) }}
|
||||
{{- end -}}
|
||||
{{- define "providers.kubernetesGateway.namespaces" -}}
|
||||
{{- default (include "traefik.namespace" .) (join "," .Values.providers.kubernetesGateway.namespaces) }}
|
||||
{{- end -}}
|
||||
{{- define "providers.kubernetesIngress.namespaces" -}}
|
||||
{{- default (include "traefik.namespace" .) (join "," .Values.providers.kubernetesIngress.namespaces) }}
|
||||
{{- end -}}
|
||||
|
||||
{{/*
|
||||
Renders a complete tree, even values that contains template.
|
||||
*/}}
|
||||
{{- define "traefik.render" -}}
|
||||
{{- if typeIs "string" .value }}
|
||||
{{- tpl .value .context }}
|
||||
{{ else }}
|
||||
{{- tpl (.value | toYaml) .context }}
|
||||
{{- end }}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "imageVersion" -}}
|
||||
{{/*
|
||||
Traefik hub is based on v3.1 (v3.0 before v3.3.1) of traefik proxy, so this is a hack to avoid to much complexity in RBAC management which are
|
||||
based on semverCompare
|
||||
*/}}
|
||||
{{- if $.Values.hub.token -}}
|
||||
{{ if and (regexMatch "v[0-9]+.[0-9]+.[0-9]+" (default "" $.Values.image.tag)) (semverCompare "<v3.3.2-0" $.Values.image.tag) -}}
|
||||
v3.0
|
||||
{{- else -}}
|
||||
v3.1
|
||||
{{- end -}}
|
||||
{{- else -}}
|
||||
{{ (split "@" (default $.Chart.AppVersion $.Values.image.tag))._0 | replace "latest-" "" | replace "experimental-" "" }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{/* Generate/load self-signed certificate for admission webhooks */}}
|
||||
{{- define "traefik-hub.webhook_cert" -}}
|
||||
{{- $cert := lookup "v1" "Secret" .Release.Namespace "hub-agent-cert" -}}
|
||||
{{- if $cert -}}
|
||||
{{/* reusing value of existing cert */}}
|
||||
Cert: {{ index $cert.data "tls.crt" }}
|
||||
Key: {{ index $cert.data "tls.key" }}
|
||||
{{- else -}}
|
||||
{{/* generate a new one */}}
|
||||
{{- $altNames := list ( printf "admission.%s.svc" .Release.Namespace ) -}}
|
||||
{{- $cert := genSelfSignedCert ( printf "admission.%s.svc" .Release.Namespace ) (list) $altNames 3650 -}}
|
||||
Cert: {{ $cert.Cert | b64enc }}
|
||||
Key: {{ $cert.Key | b64enc }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "traefik.yaml2CommandLineArgsRec" -}}
|
||||
{{- $path := .path -}}
|
||||
{{- range $key, $value := .content -}}
|
||||
{{- if kindIs "map" $value }}
|
||||
{{- include "traefik.yaml2CommandLineArgsRec" (dict "path" (printf "%s.%s" $path $key) "content" $value) -}}
|
||||
{{- else }}
|
||||
--{{ join "." (list $path $key)}}={{ join "," $value }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
|
||||
{{- define "traefik.yaml2CommandLineArgs" -}}
|
||||
{{- range ((regexSplit "\n" ((include "traefik.yaml2CommandLineArgsRec" (dict "path" .path "content" .content)) | trim) -1) | compact) -}}
|
||||
{{ printf "- \"%s\"\n" . }}
|
||||
{{- end -}}
|
||||
{{- end -}}
|
||||
Reference in New Issue
Block a user