Skip to content

Commit eb6f622

Browse files
reixdRainer 'rei' Schuth
andauthored
[cronjobs] Fix cronjobs EFS volume naming rollout (#166)
Co-authored-by: Rainer 'rei' Schuth <rainer.schuth@digital-results-international.com>
1 parent 1c376af commit eb6f622

9 files changed

Lines changed: 105 additions & 26 deletions

File tree

charts/cronjobs/Chart.lock

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
dependencies:
2+
- name: klicktipp-common
3+
repository: file://../klicktipp-common
4+
version: 1.0.2
5+
digest: sha256:ed4163e72f3b9f0e40df513d90de7104dd81eb0cfb61889e909a584882c001ef
6+
generated: "2026-06-29T13:48:55.832244701+02:00"

charts/cronjobs/Chart.yaml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,13 +3,17 @@ apiVersion: v2
33
name: cronjobs
44
description: A generic helm cronjob chart for kubernetes
55
type: application
6-
version: 2.0.0
6+
version: 2.0.1
77
appVersion: latest
88
home: https://github.com/klicktipp/helm-charts
99
keywords:
1010
- cronjob
1111
sources:
1212
- https://github.com/klicktipp/helm-charts
13+
dependencies:
14+
- name: klicktipp-common
15+
version: 1.0.2
16+
repository: file://../klicktipp-common
1317
annotations:
1418
artifacthub.io/links: |
1519
- name: Image source

charts/cronjobs/README.md

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# cronjobs
22

3-
![Version: 1.7.1](https://img.shields.io/badge/Version-1.7.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: latest](https://img.shields.io/badge/AppVersion-latest-informational?style=flat-square)
3+
![Version: 2.0.1](https://img.shields.io/badge/Version-2.0.1-informational?style=flat-square) ![Type: application](https://img.shields.io/badge/Type-application-informational?style=flat-square) ![AppVersion: latest](https://img.shields.io/badge/AppVersion-latest-informational?style=flat-square)
44

55
A generic helm cronjob chart for kubernetes
66

@@ -10,12 +10,19 @@ A generic helm cronjob chart for kubernetes
1010

1111
* <https://github.com/klicktipp/helm-charts>
1212

13+
## Requirements
14+
15+
| Repository | Name | Version |
16+
|------------|------|---------|
17+
| file://../klicktipp-common | klicktipp-common | 1.0.2 |
18+
1319
## Values
1420

1521
| Key | Type | Default | Description |
1622
|-----|------|---------|-------------|
1723
| nameOverride | string | `""` | Partially override generated resource names. |
1824
| fullnameOverride | string | `""` | Fully override generated resource names. |
25+
| slugifyVolumeNamesV2 | bool | `false` | Use collision-free EFS PV/PVC naming (com.klicktipp.slugify-volume-name-v2). When enabled, PV names are globally unique and PVC names are namespace-unique by hashing the infix (chart + job name) to 8 hex chars while keeping the namespace/release prefix and EFS access-point ID verbatim. Disabled by default to preserve backward compatibility with existing PVs/PVCs. |
1926
| imagePullSecrets | list | `[]` | Image pull secrets. |
2027
| image | object | `{}` | Default container image settings for all jobs. Individual jobs can override these values. |
2128
| secrets | object | `{}` | Configure secrets. |
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
image:
2+
repository: busybox
3+
4+
jobs:
5+
a-very-long-cronjob-name-that-can-collide:
6+
schedule: "* * * * *"
7+
storage:
8+
efs:
9+
storageClass: kt-efs-sc
10+
mounts:
11+
- fs_name: test-efs
12+
fs_id: fs-1234567890abcdef0
13+
access_points:
14+
- path: /very/long/path/that/can/collide
15+
mount_dest: /mnt/test
16+
id: fsap-0e702cdce44153d31

charts/cronjobs/templates/configmap.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ data:
3333
apiVersion: v1
3434
kind: ConfigMap
3535
metadata:
36-
name: {{ include "com.klicktipp.slugify-volume-name" (list (include "cronjobs.fullname" $) "files" $job_name) }}
36+
name: {{ include "com.klicktipp.slugify-string" (list (include "cronjobs.fullname" $) "files" $job_name) }}
3737
labels:
3838
{{- include "cronjobs.labels" $ | nindent 4 }}
3939
{{- with $.Values.commonLabels }}

charts/cronjobs/templates/cronjob.yaml

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22
{{- $service_account_name := include "cronjobs.serviceAccountName" . }}
33
{{- range $job_name, $job := .Values.jobs }}
44
{{- if $job }}
5-
{{- $JOB_NAME_SLUG := include "com.klicktipp.slugify-volume-name" $job_name }}
5+
{{- $JOB_NAME_SLUG := include "com.klicktipp.slugify-string" $job_name }}
66
{{- $env := mergeOverwrite dict $.Values.env ($job.env | default dict) }}
77
{{- $image := mergeOverwrite dict ($.Values.image | default dict) ($job.image | default dict) }}
88
{{- $timezone := $job.timezone | default $.Values.timezone }}
@@ -130,7 +130,7 @@ spec:
130130
- name: {{ $key }}
131131
valueFrom:
132132
secretKeyRef:
133-
name: {{ include "com.klicktipp.slugify-volume-name" (list (include "cronjobs.fullname" $) $job_name "envvars") }}
133+
name: {{ include "com.klicktipp.slugify-string" (list (include "cronjobs.fullname" $) $job_name "envvars") }}
134134
key: {{ $key }}
135135
{{- end }}
136136
resources:
@@ -140,9 +140,9 @@ spec:
140140
{{- range $efs_mount := $job.storage.efs.mounts }}
141141
{{- range $efs_ap := $efs_mount.access_points }}
142142
{{- $EFS_AP_ID_TRIMMED := trimPrefix "fsap-" $efs_ap.id }}
143-
{{- $slugify := ternary "com.klicktipp.slugify-volume-name-v2" "com.klicktipp.slugify-volume-name" (default false $.Values.slugifyVolumeNamesV2) -}}
144-
{{- $PVC_NAME := include $slugify (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) }}
145-
- name: {{ $PVC_NAME }}
143+
{{- $slugify := ternary "com.klicktipp.slugify-volume-name-v2" "com.klicktipp.slugify-volume-name" $.Values.slugifyVolumeNamesV2 }}
144+
{{- $PVC_NAME_SLUG := include $slugify (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) }}
145+
- name: {{ $PVC_NAME_SLUG }}
146146
mountPath: {{ required "ERROR: the EFS mount point requires a mount_dest." $efs_ap.mount_dest }}
147147
{{- end }} {{/* # end range $efs_ap */}}
148148
{{- end }} {{/* # end range $efs_mount */}}
@@ -186,18 +186,18 @@ spec:
186186
{{- range $efs_mount := $job.storage.efs.mounts }}
187187
{{- range $efs_ap := $efs_mount.access_points }}
188188
{{- $EFS_AP_ID_TRIMMED := trimPrefix "fsap-" $efs_ap.id }}
189-
{{- $slugify := ternary "com.klicktipp.slugify-volume-name-v2" "com.klicktipp.slugify-volume-name" (default false $.Values.slugifyVolumeNamesV2) -}}
190-
{{- $PVC_NAME := include $slugify (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) }}
191-
- name: {{ $PVC_NAME }}
189+
{{- $slugify := ternary "com.klicktipp.slugify-volume-name-v2" "com.klicktipp.slugify-volume-name" $.Values.slugifyVolumeNamesV2 }}
190+
{{- $PVC_NAME_SLUG := include $slugify (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) }}
191+
- name: {{ $PVC_NAME_SLUG }}
192192
persistentVolumeClaim:
193-
claimName: {{ $PVC_NAME }}
193+
claimName: {{ $PVC_NAME_SLUG }}
194194
{{- end }} {{/* # end range $efs_ap */}}
195195
{{- end }} {{/* # end range $efs_mount */}}
196196
{{- end }} {{/* # end if storage.efs */}}
197197
{{- if and (hasKey $job "extraFiles") $job.extraFiles }}
198198
- name: cronjob-files
199199
configMap:
200-
name: {{ include "com.klicktipp.slugify-volume-name" (list $chart_name "files" $JOB_NAME_SLUG) }}
200+
name: {{ include "com.klicktipp.slugify-string" (list $chart_name "files" $JOB_NAME_SLUG) }}
201201
items:
202202
{{- range $filename, $file := $job.extraFiles }}
203203
{{- if $file.enabled }}

charts/cronjobs/templates/secrets.yaml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ data:
5252
apiVersion: v1
5353
kind: Secret
5454
metadata:
55-
name: {{ include "com.klicktipp.slugify-volume-name" (list (include "cronjobs.fullname" $) $job_name "envvars") }}
55+
name: {{ include "com.klicktipp.slugify-string" (list (include "cronjobs.fullname" $) $job_name "envvars") }}
5656
labels:
5757
{{- include "cronjobs.labels" $ | nindent 4 }}
5858
{{- with $.Values.commonLabels }}

charts/cronjobs/templates/volumes.yaml

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,20 @@
1-
---
21
{{- range $job_name, $job := .Values.jobs }}
3-
{{- $JOB_NAME_SLUG := include "com.klicktipp.slugify-volume-name" $job_name }}
2+
{{- $JOB_NAME_SLUG := include "com.klicktipp.slugify-string" $job_name }}
43
{{- if and $job (hasKey $job "storage") (hasKey $job.storage "efs") (hasKey $job.storage.efs "mounts") }}
54
{{- range $efs_mount := $job.storage.efs.mounts }}
65
{{- range $efs_ap := $efs_mount.access_points }}
76
{{- $EFS_AP_ID_TRIMMED := trimPrefix "fsap-" $efs_ap.id }}
8-
{{- $slugify := ternary "com.klicktipp.slugify-volume-name-v2" "com.klicktipp.slugify-volume-name" (default false $.Values.slugifyVolumeNamesV2) -}}
9-
{{- $PV_NAME := include $slugify (list $.Release.Namespace $.Release.Name $JOB_NAME_SLUG $EFS_AP_ID_TRIMMED) }}
10-
{{- $PVC_NAME := include $slugify (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) }}
11-
{{- $PV_FULL := join "-" (list $.Release.Namespace $.Release.Name $JOB_NAME_SLUG $EFS_AP_ID_TRIMMED) | lower | replace "." "-" | replace "/" "-" | replace "_" "-" | replace "--" "-" | replace " " "-" | trimPrefix "-" | trimSuffix "-" -}}
12-
{{- $PVC_FULL := join "-" (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) | lower | replace "." "-" | replace "/" "-" | replace "_" "-" | replace "--" "-" | replace " " "-" | trimPrefix "-" | trimSuffix "-" -}}
7+
{{- $slugify := ternary "com.klicktipp.slugify-volume-name-v2" "com.klicktipp.slugify-volume-name" $.Values.slugifyVolumeNamesV2 }}
8+
{{- $PV_NAME_SLUG := include $slugify (list $.Release.Namespace $.Release.Name $JOB_NAME_SLUG $EFS_AP_ID_TRIMMED) }}
9+
{{- $PVC_NAME_SLUG := include $slugify (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) }}
10+
{{- $PV_FULL_NAME := join "-" (list $.Release.Namespace $.Release.Name $JOB_NAME_SLUG $EFS_AP_ID_TRIMMED) | lower | replace "." "-" | replace "/" "-" | replace "_" "-" | replace "--" "-" | replace " " "-" | trimPrefix "-" | trimSuffix "-" }}
11+
{{- $PVC_FULL_NAME := join "-" (list $.Release.Name $JOB_NAME_SLUG (coalesce $efs_ap.name $efs_ap.path) $EFS_AP_ID_TRIMMED) | lower | replace "." "-" | replace "/" "-" | replace "_" "-" | replace "--" "-" | replace " " "-" | trimPrefix "-" | trimSuffix "-" }}
12+
1313
---
1414
apiVersion: v1
1515
kind: PersistentVolume
1616
metadata:
17-
name: {{ $PV_NAME }}
17+
name: {{ $PV_NAME_SLUG }}
1818
labels:
1919
storage.ktsys.cloud/efs_fs_id: {{ $efs_mount.fs_id | quote }}
2020
storage.ktsys.cloud/efs_ap_id: {{ $efs_ap.id | quote }}
@@ -23,7 +23,7 @@ metadata:
2323
storage.ktsys.cloud/efs_name: {{ $efs_mount.fs_name | quote }}
2424
storage.ktsys.cloud/efs_ap_id: {{ $efs_ap.id | quote }}
2525
storage.ktsys.cloud/efs_path: {{ $efs_ap.path | quote }}
26-
storage.ktsys.cloud/volume-name-full: {{ $PV_FULL | quote }}
26+
storage.ktsys.cloud/volume-name-full: {{ $PV_FULL_NAME | quote }}
2727
{{- with $.commonAnnotations }}
2828
{{- toYaml . | nindent 4 }}
2929
{{- end }}
@@ -46,7 +46,7 @@ spec:
4646
apiVersion: v1
4747
kind: PersistentVolumeClaim
4848
metadata:
49-
name: {{ $PVC_NAME }}
49+
name: {{ $PVC_NAME_SLUG }}
5050
labels:
5151
storage.ktsys.cloud/efs_fs_id: {{ $efs_mount.fs_id | quote }}
5252
storage.ktsys.cloud/efs_ap_id: {{ $efs_ap.id | quote }}
@@ -55,7 +55,7 @@ metadata:
5555
storage.ktsys.cloud/efs_name: {{ $efs_mount.fs_name | quote }}
5656
storage.ktsys.cloud/efs_ap_id: {{ $efs_ap.id | quote }}
5757
storage.ktsys.cloud/efs_path: {{ $efs_ap.path | quote }}
58-
storage.ktsys.cloud/volume-name-full: {{ $PVC_FULL | quote }}
58+
storage.ktsys.cloud/volume-name-full: {{ $PVC_FULL_NAME | quote }}
5959
{{- with $.commonAnnotations }}
6060
{{- toYaml . | nindent 4 }}
6161
{{- end }}
@@ -66,7 +66,7 @@ spec:
6666
accessModes:
6767
- ReadWriteMany
6868
storageClassName: {{ $job.storage.efs.storageClass }}
69-
volumeName: {{ $PV_NAME }}
69+
volumeName: {{ $PV_NAME_SLUG }}
7070
resources:
7171
requests:
7272
storage: 5Gi # Any number will do, we are just required to specify a storage capacity
Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,46 @@
1+
suite: cronjobs-volume-name-tests
2+
release:
3+
name: cronjobs
4+
namespace: very-long-namespace-name-that-triggers-truncation
5+
templates:
6+
- templates/cronjob.yaml
7+
- templates/volumes.yaml
8+
9+
tests:
10+
- it: should keep cronjobs 1.7.0 EFS volume names by default
11+
values:
12+
- ../ci/efs-volume-names.yaml
13+
asserts:
14+
- equal:
15+
path: spec.jobTemplate.spec.template.spec.containers[0].volumeMounts[0].name
16+
value: cronjobs-a-very-long-cronjob-name-that-can-collide-very-long-pa
17+
template: templates/cronjob.yaml
18+
- equal:
19+
path: spec.jobTemplate.spec.template.spec.volumes[0].persistentVolumeClaim.claimName
20+
value: cronjobs-a-very-long-cronjob-name-that-can-collide-very-long-pa
21+
template: templates/cronjob.yaml
22+
- equal:
23+
path: metadata.name
24+
value: cronjobs-a-very-long-cronjob-name-that-can-collide-very-long-pa
25+
template: templates/volumes.yaml
26+
documentIndex: 1
27+
28+
- it: should use hash-based EFS volume names when V2 is enabled
29+
values:
30+
- ../ci/efs-volume-names.yaml
31+
set:
32+
slugifyVolumeNamesV2: true
33+
asserts:
34+
- equal:
35+
path: spec.jobTemplate.spec.template.spec.containers[0].volumeMounts[0].name
36+
value: cronjobs-5503b47f-0e702cdce44153d31
37+
template: templates/cronjob.yaml
38+
- equal:
39+
path: spec.jobTemplate.spec.template.spec.volumes[0].persistentVolumeClaim.claimName
40+
value: cronjobs-5503b47f-0e702cdce44153d31
41+
template: templates/cronjob.yaml
42+
- equal:
43+
path: metadata.name
44+
value: cronjobs-5503b47f-0e702cdce44153d31
45+
template: templates/volumes.yaml
46+
documentIndex: 1

0 commit comments

Comments
 (0)