From 95d42b7d037063aca454efd89844075ca13363a9 Mon Sep 17 00:00:00 2001 From: jklein Date: Sun, 22 Feb 2026 13:23:51 +0100 Subject: [PATCH] feat(urlaubsverwaltung): added initial chart --- urlaubsverwaltung/.helmignore | 23 ++++ urlaubsverwaltung/Chart.yaml | 7 + .../urlaubsverwaltung-db.secret.yaml | 6 + .../urlaubsverwaltung-oidc.secret.yaml | 6 + .../urlaubsverwaltung.deployment.yaml | 130 ++++++++++++++++++ .../templates/urlaubsverwaltung.ingress.yaml | 23 ++++ .../templates/urlaubsverwaltung.service.yaml | 13 ++ urlaubsverwaltung/values.yaml | 18 +++ 8 files changed, 226 insertions(+) create mode 100644 urlaubsverwaltung/.helmignore create mode 100644 urlaubsverwaltung/Chart.yaml create mode 100644 urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml create mode 100644 urlaubsverwaltung/templates/urlaubsverwaltung-oidc.secret.yaml create mode 100644 urlaubsverwaltung/templates/urlaubsverwaltung.deployment.yaml create mode 100644 urlaubsverwaltung/templates/urlaubsverwaltung.ingress.yaml create mode 100644 urlaubsverwaltung/templates/urlaubsverwaltung.service.yaml create mode 100644 urlaubsverwaltung/values.yaml diff --git a/urlaubsverwaltung/.helmignore b/urlaubsverwaltung/.helmignore new file mode 100644 index 0000000..0e8a0eb --- /dev/null +++ b/urlaubsverwaltung/.helmignore @@ -0,0 +1,23 @@ +# Patterns to ignore when building packages. +# This supports shell glob matching, relative path matching, and +# negation (prefixed with !). Only one pattern per line. +.DS_Store +# Common VCS dirs +.git/ +.gitignore +.bzr/ +.bzrignore +.hg/ +.hgignore +.svn/ +# Common backup files +*.swp +*.bak +*.tmp +*.orig +*~ +# Various IDEs +.project +.idea/ +*.tmproj +.vscode/ diff --git a/urlaubsverwaltung/Chart.yaml b/urlaubsverwaltung/Chart.yaml new file mode 100644 index 0000000..2f00d17 --- /dev/null +++ b/urlaubsverwaltung/Chart.yaml @@ -0,0 +1,7 @@ +apiVersion: v2 +name: urlaubsverwaltung +description: A Helm chart to deploy urlaubsverwaltung on Kubernetes +type: application + +version: 1.4.0-release-5-34-2 +appVersion: 5.34.2 diff --git a/urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml b/urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml new file mode 100644 index 0000000..0a38889 --- /dev/null +++ b/urlaubsverwaltung/templates/urlaubsverwaltung-db.secret.yaml @@ -0,0 +1,6 @@ +apiVersion: onepassword.com/v1 +kind: OnePasswordItem +metadata: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-db-secret +spec: + itemPath: {{ .Values.secrets.databaseSecretRef }} diff --git a/urlaubsverwaltung/templates/urlaubsverwaltung-oidc.secret.yaml b/urlaubsverwaltung/templates/urlaubsverwaltung-oidc.secret.yaml new file mode 100644 index 0000000..75ab132 --- /dev/null +++ b/urlaubsverwaltung/templates/urlaubsverwaltung-oidc.secret.yaml @@ -0,0 +1,6 @@ +apiVersion: onepassword.com/v1 +kind: OnePasswordItem +metadata: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-oidc-secret +spec: + itemPath: {{ .Values.secrets.oidcSecretRef }} diff --git a/urlaubsverwaltung/templates/urlaubsverwaltung.deployment.yaml b/urlaubsverwaltung/templates/urlaubsverwaltung.deployment.yaml new file mode 100644 index 0000000..b5c9259 --- /dev/null +++ b/urlaubsverwaltung/templates/urlaubsverwaltung.deployment.yaml @@ -0,0 +1,130 @@ +apiVersion: apps/v1 +kind: Deployment +metadata: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-deployment + labels: + app: {{ .Chart.Name }}-{{ .Release.Name }} +spec: + replicas: 1 + selector: + matchLabels: + app: {{ .Chart.Name }}-{{ .Release.Name }}-uv-deployment + template: + metadata: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-deployment + labels: + app: {{ .Chart.Name }}-{{ .Release.Name }}-uv-deployment + spec: + automountServiceAccountToken: false + containers: + - name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-container + image: "urlaubsverwaltung/urlaubsverwaltung:{{ .Chart.AppVersion }}" + imagePullPolicy: IfNotPresent + ports: + - containerPort: 8080 + name: http + protocol: TCP + env: + # Database + - name: SPRING_DATASOURCE_URL + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-db-secret + key: jdbc-url + - name: SPRING_DATASOURCE_USERNAME + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-db-secret + key: username + - name: SPRING_DATASOURCE_PASSWORD + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-db-secret + key: password + # Mail + - name: UV_MAIL_FROM + value: urlaubsverwaltung@example.org + - name: UV_MAIL_FROMDISPLAYNAME + value: urlaubsverwaltung + - name: UV_MAIL_REPLYTO + value: urlaubsverwaltung@example.org + - name: UV_MAIL_REPLYTODISPLAYNAME + value: urlaubsverwaltung + - name: UV_MAIL_APPLICATIONURL + value: http://localhost:8080 + - name: SPRING_MAIL_HOST + value: localhost + - name: SPRING_MAIL_PORT + value: "1025" + # Calendar + - name: UV_CALENDAR_ORGANIZER + value: organizer@example.org + # OpenID Connect identity provider + - name: SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_DEFAULT_CLIENT-ID + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-oidc-secret + key: client-id + - name: SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_DEFAULT_CLIENT-SECRET + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-oidc-secret + key: client-secret + - name: SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_DEFAULT_CLIENT-NAME + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-oidc-secret + key: issuer-name + - name: SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_DEFAULT_PROVIDER + value: default + - name: SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_DEFAULT_SCOPE + value: openid,profile,email,roles,offline_access,uv_claims + - name: SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_DEFAULT_AUTHORIZATION-GRANT-TYPE + value: authorization_code + - name: SPRING_SECURITY_OAUTH2_CLIENT_REGISTRATION_DEFAULT_REDIRECT-URI + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-oidc-secret + key: redirect-uri + - name: SPRING_SECURITY_OAUTH2_CLIENT_PROVIDER_DEFAULT_ISSUER-URI + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-oidc-secret + key: issuer-uri + - name: SPRING_SECURITY_OAUTH2_RESOURCESERVER_JWT_ISSUER-URI + valueFrom: + secretKeyRef: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-oidc-secret + key: jwt-issuer-uri + - name: UV_SECURITY_OIDC_CLAIM-MAPPERS_GROUP-CLAIM_ENABLED + value: "true" + - name: UV_SECURITY_OIDC_CLAIM-MAPPERS_GROUP-CLAIM_CLAIM-NAME + value: "groups" + resources: + requests: + memory: "{{ .Values.urlaubsverwaltung.resources.requests.memory }}" + cpu: "{{ .Values.urlaubsverwaltung.resources.requests.cpu }}" + ephemeral-storage: "{{ .Values.urlaubsverwaltung.resources.requests.ephemeralStorage }}" + limits: + memory: "{{ .Values.urlaubsverwaltung.resources.limits.memory }}" + cpu: "{{ .Values.urlaubsverwaltung.resources.limits.cpu }}" + ephemeral-storage: "{{ .Values.urlaubsverwaltung.resources.limits.ephemeralStorage }}" + readinessProbe: + httpGet: + port: 8080 + path: /actuator/health/readiness + initialDelaySeconds: 10 + periodSeconds: 5 + failureThreshold: 3 + successThreshold: 1 + timeoutSeconds: 5 + livenessProbe: + httpGet: + port: 8080 + path: /actuator/health/liveness + initialDelaySeconds: 20 + periodSeconds: 10 + failureThreshold: 3 + successThreshold: 1 + timeoutSeconds: 5 + restartPolicy: Always diff --git a/urlaubsverwaltung/templates/urlaubsverwaltung.ingress.yaml b/urlaubsverwaltung/templates/urlaubsverwaltung.ingress.yaml new file mode 100644 index 0000000..46cf386 --- /dev/null +++ b/urlaubsverwaltung/templates/urlaubsverwaltung.ingress.yaml @@ -0,0 +1,23 @@ +apiVersion: networking.k8s.io/v1 +kind: Ingress +metadata: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-ingress + annotations: + cert-manager.io/cluster-issuer: {{ required "A Cluster-Issuer must be provided" .Values.ingress.clusterIssuer}} +spec: + ingressClassName: nginx + rules: + - host: {{ required "A Domain/Host must be provided" .Values.ingress.domain }} + http: + paths: + - backend: + service: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-service + port: + name: http + path: / + pathType: Prefix + tls: + - hosts: + - {{ required "A Domain/Host must be provided" .Values.ingress.domain }} + secretName: tls-{{ .Chart.Name }}-{{ .Release.Name }}-ingress diff --git a/urlaubsverwaltung/templates/urlaubsverwaltung.service.yaml b/urlaubsverwaltung/templates/urlaubsverwaltung.service.yaml new file mode 100644 index 0000000..37d1d75 --- /dev/null +++ b/urlaubsverwaltung/templates/urlaubsverwaltung.service.yaml @@ -0,0 +1,13 @@ +apiVersion: v1 +kind: Service +metadata: + name: {{ .Chart.Name }}-{{ .Release.Name }}-uv-service +spec: + selector: + app: {{ .Chart.Name }}-{{ .Release.Name }}-uv-deployment + ports: + - protocol: TCP + port: 80 + targetPort: http + name: http + type: ClusterIP diff --git a/urlaubsverwaltung/values.yaml b/urlaubsverwaltung/values.yaml new file mode 100644 index 0000000..bdf9d87 --- /dev/null +++ b/urlaubsverwaltung/values.yaml @@ -0,0 +1,18 @@ +secrets: + databaseSecretRef: null + oidcSecretRef: null + +ingress: + clusterIssuer: "letsencrypt-issuer" + domain: null + +urlaubsverwaltung: + resources: + requests: + cpu: 0.1 + memory: 768Mi + ephemeralStorage: 10Mi + limits: + cpu: 1 + memory: 1536Mi + ephemeralStorage: 10Mi \ No newline at end of file