helm migration

This commit is contained in:
2025-11-11 16:06:44 +01:00
parent 31db4ede38
commit 8feec04601
3 changed files with 131 additions and 0 deletions
+89
View File
@@ -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 }}
@@ -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 }}
+15
View File
@@ -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