diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl index 604a5f5280aa5f86b7ce69a9b4351b1c84194565..b47258a81c6e54873a7928527ed8f03ac6f2b556 100644 --- a/src/main/helm/templates/_helpers.tpl +++ b/src/main/helm/templates/_helpers.tpl @@ -1,44 +1,43 @@ {{/* vim: set filetype=mustache: */}} -{{/* Truncate at 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} -{{/* Name */}} -{{- define "app.name" -}} -{{- default .Release.Name | toString | trunc 63 | trimSuffix "-" -}} -{{- end -}} - +{{/* error check 63 chars because some Kubernetes name fields are limited to this (by the DNS naming spec) */}} {{/* Namespace */}} {{- define "app.namespace" -}} -{{- default .Release.Namespace | toString | trunc 63 | trimSuffix "-" -}} +{{- if gt (len (.Release.Namespace)) 63 -}} +{{- fail (printf ".Release.Namespace %s ist zu lang (max. 63 Zeichen)" .Release.Namespace) -}} {{- end -}} - -{{/* Version */}} -{{- define "app.version" -}} -{{- default .Chart.Version | toString | trunc 63 | trimSuffix "-" -}} +{{ printf "%s" .Release.Namespace }} {{- end -}} {{/* Chart: Name + Version */}} {{- define "app.chart" -}} -{{ printf "%s-%s" .Chart.Name .Chart.Version | replace "+" "_" | trunc 63 | trimSuffix "-" }} +{{- if gt (len (printf "%s-%s" .Chart.Name .Chart.Version)) 63 -}} +{{- fail (printf ".Chart.Name-.Chart.Version %s-%s ist zu lang (max. 63 Zeichen)" .Chart.Name .Chart.Version) -}} +{{- end -}} +{{ printf "%s-%s" .Chart.Name .Chart.Version }} {{- end -}} {{/* Managed-by -> On Helm, this value is always Helm */}} {{- define "app.managedBy" -}} -{{- default .Release.Service | toString | trunc 63 | trimSuffix "-" -}} +{{- if gt (len (.Release.Service)) 63 -}} +{{- fail (printf ".Release.Service %s ist zu lang (max. 63 Zeichen)" .Release.Service) -}} +{{- end -}} +{{ printf "%s" .Release.Service }} {{- end -}} {{/* Default Labels: Helm recommended best-practice labels https://helm.sh/docs/chart_best_practices/labels/ */}} {{- define "app.defaultLabels" }} app.kubernetes.io/instance: alfa app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} -app.kubernetes.io/name: {{ include "app.name" . }} +app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/part-of: ozgcloud -app.kubernetes.io/version: {{ include "app.version" . }} +app.kubernetes.io/version: {{ .Chart.Version }} app.kubernetes.io/namespace: {{ include "app.namespace" . }} helm.sh/chart: {{ include "app.chart" . }} {{- end -}} {{- define "app.matchLabels" }} -app.kubernetes.io/name: {{ include "app.name" . }} +app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{- end -}} diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index f3c62e8b65a11462fc2ef24f14ee5b311cf27fdd..5272422eb6c47df52e61a729940d6b7b8dadbefc 100644 --- a/src/main/helm/templates/deployment.yaml +++ b/src/main/helm/templates/deployment.yaml @@ -25,7 +25,7 @@ apiVersion: apps/v1 kind: Deployment metadata: - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} @@ -56,7 +56,7 @@ spec: whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: - app.kubernetes.io/name: {{ include "app.name" . }} + app.kubernetes.io/name: {{ .Release.Name }} affinity: nodeAffinity: requiredDuringSchedulingIgnoredDuringExecution: diff --git a/src/main/helm/templates/ingress.yaml b/src/main/helm/templates/ingress.yaml index a4b5ccf04cc1ad289393b35dbeba455a6e9cf2df..2ed1f8d3231251c2cd051f21acce6c6c30ba5ca5 100644 --- a/src/main/helm/templates/ingress.yaml +++ b/src/main/helm/templates/ingress.yaml @@ -36,7 +36,7 @@ metadata: cert-manager.io/cluster-issuer: letsencrypt-prod {{- end }} nginx.ingress.kubernetes.io/proxy-body-size: 42m - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} spec: {{- if and (.Values.ingress).className (ne (.Values).cluster_env "dataport") }} @@ -49,7 +49,7 @@ spec: service: port: number: 8080 - name: {{ include "app.name" . }} + name: {{ .Release.Name }} path: '' pathType: ImplementationSpecific host: {{ include "app.baseDomain" . }} @@ -59,5 +59,5 @@ spec: {{- if (.Values.ingress).tlsSecretName }} secretName: {{ (.Values.ingress).tlsSecretName }} {{- else if ne (.Values).cluster_env "dataport" }} - secretName: {{ .Values.ozgcloud.bezeichner }}-{{ include "app.name" . }}-tls + secretName: {{ .Values.ozgcloud.bezeichner }}-{{ .Release.Name }}-tls {{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/service.yaml b/src/main/helm/templates/service.yaml index a4e5af637451bc9bec57890ac033cdb94e2d941a..b1dbeff62cad6a001b808144834bf5ace1185d58 100644 --- a/src/main/helm/templates/service.yaml +++ b/src/main/helm/templates/service.yaml @@ -25,7 +25,7 @@ apiVersion: v1 kind: Service metadata: - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} diff --git a/src/main/helm/templates/service_monitor.yaml b/src/main/helm/templates/service_monitor.yaml index 2a5a656bbf5bb18e0aeb56b98c093ee2ab64fec2..6fb8df4dd7836be20a774ba58ba343aa9cfe632d 100644 --- a/src/main/helm/templates/service_monitor.yaml +++ b/src/main/helm/templates/service_monitor.yaml @@ -25,7 +25,7 @@ apiVersion: monitoring.coreos.com/v1 kind: ServiceMonitor metadata: - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} labels: {{- include "app.defaultLabels" . | indent 4 }} diff --git a/src/main/helm/templates/tests/test-ingress-connection.yaml b/src/main/helm/templates/tests/test-ingress-connection.yaml index d97aecdd4f4fee60a8e330cd98f2a077890c05a5..ded8beac5ea5c447458ab73dac698a2ef002fc6a 100644 --- a/src/main/helm/templates/tests/test-ingress-connection.yaml +++ b/src/main/helm/templates/tests/test-ingress-connection.yaml @@ -25,7 +25,7 @@ apiVersion: v1 kind: Pod metadata: - name: "{{ include "app.name" . }}-test-ingress" + name: "{{ .Release.Name }}-test-ingress" labels: {{- include "app.matchLabels" . | nindent 4 }} annotations: diff --git a/src/main/helm/templates/tests/test-service-connection.yaml b/src/main/helm/templates/tests/test-service-connection.yaml index aaa823ef54442491adeb2c88836f92ad53a52404..e6bcae1e9d8e11288106f39c47aa978d0cf2f225 100644 --- a/src/main/helm/templates/tests/test-service-connection.yaml +++ b/src/main/helm/templates/tests/test-service-connection.yaml @@ -25,7 +25,7 @@ apiVersion: v1 kind: Pod metadata: - name: "{{ include "app.name" . }}-test-connection" + name: "{{ .Release.Name }}-test-connection" labels: {{- include "app.matchLabels" . | nindent 4 }} annotations: @@ -35,5 +35,5 @@ spec: - name: wget image: busybox command: ['wget'] - args: ['{{ include "app.name" . }}:8080'] + args: ['{{ .Release.Name }}:8080'] restartPolicy: Never diff --git a/src/test/helm/deployment_63_char_test.yaml b/src/test/helm/deployment_63_char_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..d52334f663b47d2c947bc5f8bb33c5285464b643 --- /dev/null +++ b/src/test/helm/deployment_63_char_test.yaml @@ -0,0 +1,62 @@ +# +# Copyright (C) 2022 Das Land Schleswig-Holstein vertreten durch den +# Ministerpräsidenten des Landes Schleswig-Holstein +# Staatskanzlei +# Abteilung Digitalisierung und zentrales IT-Management der Landesregierung +# +# Lizenziert unter der EUPL, Version 1.2 oder - sobald +# diese von der Europäischen Kommission genehmigt wurden - +# Folgeversionen der EUPL ("Lizenz"); +# Sie dürfen dieses Werk ausschließlich gemäß +# dieser Lizenz nutzen. +# Eine Kopie der Lizenz finden Sie hier: +# +# https://joinup.ec.europa.eu/collection/eupl/eupl-text-eupl-12 +# +# Sofern nicht durch anwendbare Rechtsvorschriften +# gefordert oder in schriftlicher Form vereinbart, wird +# die unter der Lizenz verbreitete Software "so wie sie +# ist", OHNE JEGLICHE GEWÄHRLEISTUNG ODER BEDINGUNGEN - +# ausdrücklich oder stillschweigend - verbreitet. +# Die sprachspezifischen Genehmigungen und Beschränkungen +# unter der Lizenz sind dem Lizenztext zu entnehmen. +# + +suite: test deyploment less than 63 chars +release: + name: alfa + namespace: sh-helm-test + +chart: + name: alfa + +templates: + - templates/deployment.yaml +set: + ozgcloud: + environment: test + bundesland: sh + bezeichner: helm + sso: + serverUrl: https://sso.company.local + baseUrl: test.company.local + +tests: + - it: should fail on .Release.Namespace length longer than 63 characters + release: + namespace: test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Release.Namespace test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Release.Namespace length less than 63 characters + asserts: + - notFailedTemplate: {} + - it: should fail on .Chart.Name-.Chart.Version length longer than 63 characters + chart: + version: 1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 + asserts: + - failedTemplate: + errorMessage: .Chart.Name-.Chart.Version alfa-1.0-test1234567890123123456789012345678901234567890123456789012345678901234567890123456789012345678904567890 ist zu lang (max. 63 Zeichen) + - it: should not fail on .Chart.Name-.Chart.Version length less than 63 characters + asserts: + - notFailedTemplate: {} \ No newline at end of file