diff --git a/src/main/helm/templates/_helpers.tpl b/src/main/helm/templates/_helpers.tpl index f0fef2523d2dcb26333470a59ce1b12de1a105ea..9d24fd8ea73b2736cb5172a3f3da10da532cfc0a 100644 --- a/src/main/helm/templates/_helpers.tpl +++ b/src/main/helm/templates/_helpers.tpl @@ -1,45 +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 -}} - {{/* 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: user-manager app.kubernetes.io/managed-by: {{ include "app.managedBy" . }} -app.kubernetes.io/name: {{ include "app.name" . }} +app.kubernetes.io/name: {{ .Release.Name }} app.kubernetes.io/namespace: {{ include "app.namespace" . }} app.kubernetes.io/part-of: ozgcloud -app.kubernetes.io/version: {{ include "app.version" . }} +app.kubernetes.io/version: {{ .Chart.Version }} helm.sh/chart: {{ include "app.chart" . }} ozgcloud-mongodb-client: "true" {{- 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 -}} @@ -103,7 +101,7 @@ app.kubernetes.io/namespace: {{ include "app.namespace" . }} {{- if (.Values.baseDomain) -}} {{ .Values.baseDomain }} {{- else -}} -{{ printf "%s-%s.%s" (include "app.ozgcloudBezeichner" .) (include "app.name" .) (include "app.baseUrl" .) }} +{{ printf "%s-%s.%s" (include "app.ozgcloudBezeichner" .) (.Release.Name) (include "app.baseUrl" .) }} {{- end -}} {{- end -}} diff --git a/src/main/helm/templates/certificate.yaml b/src/main/helm/templates/certificate.yaml index f90349548a71d69b31262afee0286939b5732c14..2e711fd20a731f19e17fac1fa1cbb11257d041e7 100644 --- a/src/main/helm/templates/certificate.yaml +++ b/src/main/helm/templates/certificate.yaml @@ -35,12 +35,12 @@ spec: kind: Issuer duration: 8760h0m0s renewBefore: 720h0m0s - commonName: {{ include "app.name" . }} + commonName: {{ .Release.Name }} dnsNames: - - "*.{{ include "app.name" . }}.{{ include "app.namespace" . }}.svc.cluster.local" - - "{{ include "app.name" . }}.{{ include "app.namespace" . }}.svc.cluster.local" - - "{{ include "app.name" . }}.{{ include "app.namespace" . }}.svc.cluster" - - "{{ include "app.name" . }}.{{ include "app.namespace" . }}.svc" - - "{{ include "app.name" . }}.{{ include "app.namespace" . }}" - - "{{ include "app.name" . }}" + - "*.{{ .Release.Name }}.{{ include "app.namespace" . }}.svc.cluster.local" + - "{{ .Release.Name }}.{{ include "app.namespace" . }}.svc.cluster.local" + - "{{ .Release.Name }}.{{ include "app.namespace" . }}.svc.cluster" + - "{{ .Release.Name }}.{{ include "app.namespace" . }}.svc" + - "{{ .Release.Name }}.{{ include "app.namespace" . }}" + - "{{ .Release.Name }}" {{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/deployment.yaml b/src/main/helm/templates/deployment.yaml index e8f5ea015ea704e945a155d1cda4075846feeb51..a602dfe739eede70e7ec97d6994296e953c50ce3 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 }} @@ -57,7 +57,7 @@ spec: whenUnsatisfiable: ScheduleAnyway labelSelector: matchLabels: - app.kubernetes.io/name: {{ include "app.name" . }} + app.kubernetes.io/name: {{ .Release.Name }} containers: - env: - name: QUARKUS_MONGODB_CONNECTION_STRING diff --git a/src/main/helm/templates/ingress.yaml b/src/main/helm/templates/ingress.yaml index 1a1a9357b8c38c12a0fa12201667a1f35d7d5adb..a70a6b30d3fe88b62cca06d458525b2c6543c52b 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 }} {{- end }} - name: {{ include "app.name" . }} + name: {{ .Release.Name }} namespace: {{ include "app.namespace" . }} spec: {{- if (.Values.ingress).className }} @@ -49,7 +49,7 @@ spec: service: port: number: 8080 - name: {{ include "app.name" . }} + name: {{ .Release.Name }} path: '' pathType: ImplementationSpecific host: {{ ( include "app.baseDomain" . ) }} @@ -60,6 +60,6 @@ spec: {{- if (.Values.ingress).tlsSecretName }} secretName: {{ (.Values.ingress).tlsSecretName }} {{- else }} - secretName: {{ .Values.ozgcloud.bezeichner }}-{{ include "app.name" . }}-tls + secretName: {{ .Values.ozgcloud.bezeichner }}-{{ .Release.Name }}-tls {{- end }} {{- end }} \ No newline at end of file diff --git a/src/main/helm/templates/service.yaml b/src/main/helm/templates/service.yaml index a8311d49e31232410a1a7f5e9c0c249abee700b2..dd175e4b848bd56b7cb19f226b3b45e65582f8b3 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 a5f69f134456736c7af093646d22e4dea4b95b6e..29e7125bbb9d391b3cf0081ab78ed17e643a1d79 100644 --- a/src/main/helm/templates/service_monitor.yaml +++ b/src/main/helm/templates/service_monitor.yaml @@ -26,7 +26,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/test/helm/deployment_63_char_test.yaml b/src/test/helm/deployment_63_char_test.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e6a14d3a5c38808a8fc4c3a25920dc4dedc6f093 --- /dev/null +++ b/src/test/helm/deployment_63_char_test.yaml @@ -0,0 +1,58 @@ +# +# Copyright (C) 2024 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: user-manager + namespace: sh-helm-test + +templates: + - templates/deployment.yaml +set: + ozgcloud: + bundesland: by + bezeichner: helm + environment: dev + 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 user-manager-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