From 8feec0460113b82ebad3aee1715776baba9c43e9 Mon Sep 17 00:00:00 2001 From: Nils Schneider Date: Tue, 11 Nov 2025 16:06:44 +0100 Subject: [PATCH] helm migration --- k8s/papercrate/templates/migrate-job.yaml | 89 ++++++++++++++++++++ k8s/papercrate/templates/migrate-secret.yaml | 27 ++++++ k8s/papercrate/values.yaml | 15 ++++ 3 files changed, 131 insertions(+) create mode 100644 k8s/papercrate/templates/migrate-job.yaml create mode 100644 k8s/papercrate/templates/migrate-secret.yaml diff --git a/k8s/papercrate/templates/migrate-job.yaml b/k8s/papercrate/templates/migrate-job.yaml new file mode 100644 index 0000000..7a100dd --- /dev/null +++ b/k8s/papercrate/templates/migrate-job.yaml @@ -0,0 +1,89 @@ +{{- if .Values.migrateJob.enabled }} +{{- $defaultMigrateSecret := printf "%s-migrate-env" (include "papercrate.fullname" .) }} +{{- $migrateSecretName := default $defaultMigrateSecret .Values.migrateJob.databaseUrlSecret.name }} +{{- $migrateSecretKey := default "DATABASE_URL" .Values.migrateJob.databaseUrlSecret.key }} +{{- if and (not .Values.migrateJob.databaseUrlSecret.create) (not .Values.migrateJob.databaseUrlSecret.name) }} + {{- fail "migrateJob.databaseUrlSecret.name must be set when create=false" }} +{{- end }} +apiVersion: batch/v1 +kind: Job +metadata: + name: {{ include "papercrate.fullname" . }}-migrate + labels: + {{- include "papercrate.labels" . | nindent 4 }} + app.kubernetes.io/component: migrate + annotations: + "helm.sh/hook": post-install,post-upgrade + "helm.sh/hook-delete-policy": before-hook-creation,hook-succeeded + "helm.sh/hook-weight": "5" + {{- range $key, $value := .Values.migrateJob.annotations }} + {{ $key }}: {{ $value | quote }} + {{- end }} +spec: + template: + metadata: + labels: + {{- include "papercrate.selectorLabels" . | nindent 8 }} + app.kubernetes.io/component: migrate + spec: + restartPolicy: OnFailure + {{- if or .Values.global.imagePullSecrets .Values.imagePullSecrets }} + imagePullSecrets: + {{- range .Values.global.imagePullSecrets }} + - name: {{ . }} + {{- end }} + {{- range .Values.imagePullSecrets }} + - name: {{ . }} + {{- end }} + {{- end }} + containers: + - name: migrate + image: {{ include "papercrate.backend.image" . }}:{{ include "papercrate.image.tag" (dict "image" .Values.backend.image "Chart" .Chart) }} + imagePullPolicy: {{ .Values.backend.image.pullPolicy }} + command: + - /usr/local/bin/papercrate-admin + - migrate-database + env: + - name: SERVER_HOST + value: 0.0.0.0 + - name: SERVER_PORT + value: {{ .Values.backend.service.port | quote }} + {{- with .Values.global.s3.endpoint }} + - name: AWS_ENDPOINT_URL + value: {{ . | quote }} + {{- end }} + {{- with .Values.global.s3.region }} + - name: AWS_REGION + value: {{ . | quote }} + {{- end }} + {{- with .Values.global.s3.bucket }} + - name: S3_BUCKET + value: {{ . | quote }} + {{- end }} + - name: MIGRATIONS_DATABASE_URL + valueFrom: + secretKeyRef: + name: {{ $migrateSecretName }} + key: {{ $migrateSecretKey }} + {{- range .Values.migrateJob.extraEnv }} + - name: {{ .name }} + value: {{ .value | quote }} + {{- end }} + envFrom: + - secretRef: + name: {{ if .Values.backend.env.existingSecret }}{{ .Values.backend.env.existingSecret }}{{ else }}{{ include "papercrate.fullname" . }}-backend-env{{ end }} + {{- with .Values.global.s3.credentialsSecret }} + - secretRef: + name: {{ . }} + {{- end }} + {{- range .Values.backend.envFrom }} + - {{ toYaml . | nindent 12 | trim }} + {{- end }} + {{- range .Values.migrateJob.envFrom }} + - {{ toYaml . | nindent 12 | trim }} + {{- end }} + {{- with .Values.migrateJob.resources }} + resources: + {{- toYaml . | nindent 12 }} + {{- end }} +{{- end }} diff --git a/k8s/papercrate/templates/migrate-secret.yaml b/k8s/papercrate/templates/migrate-secret.yaml new file mode 100644 index 0000000..7c66db7 --- /dev/null +++ b/k8s/papercrate/templates/migrate-secret.yaml @@ -0,0 +1,27 @@ +{{- if and .Values.migrateJob.enabled .Values.migrateJob.databaseUrlSecret.create }} +{{- $defaultName := printf "%s-migrate-env" (include "papercrate.fullname" .) }} +{{- $secretName := default $defaultName .Values.migrateJob.databaseUrlSecret.name }} +{{- $databaseUrl := .Values.migrateJob.databaseUrlSecret.databaseUrl }} +{{- $username := default .Values.postgres.auth.username .Values.migrateJob.databaseUrlSecret.username }} +{{- $password := default .Values.postgres.auth.password .Values.migrateJob.databaseUrlSecret.password }} +{{- $database := default (default "papercrate" .Values.backend.env.databaseName) .Values.migrateJob.databaseUrlSecret.databaseName }} +{{- $dbHost := printf "%s-postgres" (include "papercrate.fullname" .) }} +{{- if not $databaseUrl }} + {{- if not .Values.postgres.enabled }} + {{- fail "migrateJob.databaseUrlSecret.databaseUrl must be set when postgres.enabled is false" }} + {{- end }} + {{- if or (not $username) (not $password) }} + {{- fail "migrateJob.databaseUrlSecret.username/password (or postgres.auth.username/password) must be provided" }} + {{- end }} + {{- $databaseUrl = printf "postgres://%s:%s@%s:5432/%s" $username $password $dbHost $database }} +{{- end }} +apiVersion: v1 +kind: Secret +metadata: + name: {{ $secretName }} + labels: + {{- include "papercrate.labels" . | nindent 4 }} + app.kubernetes.io/component: migrate +stringData: + {{ default "DATABASE_URL" .Values.migrateJob.databaseUrlSecret.key }}: {{ $databaseUrl | quote }} +{{- end }} diff --git a/k8s/papercrate/values.yaml b/k8s/papercrate/values.yaml index 67c747c..1dfd128 100644 --- a/k8s/papercrate/values.yaml +++ b/k8s/papercrate/values.yaml @@ -59,6 +59,21 @@ worker: tolerations: [] affinity: {} +migrateJob: + enabled: true + annotations: {} + databaseUrlSecret: + name: "" + key: DATABASE_URL + create: true + databaseUrl: "" + username: "" + password: "" + databaseName: papercrate + extraEnv: [] + envFrom: [] + resources: {} + frontend: enabled: true replicaCount: 1