{{- if .Values.scheduledBackup.create }}
apiVersion: batch/v1beta1
kind: CronJob
metadata:
  name: {{ template "cluster.name" . }}-scheduled-backup
  namespace: {{ .Release.Namespace }}
  labels:
    app.kubernetes.io/name: {{ template "chart.name" . }}
    app.kubernetes.io/managed-by: {{ .Release.Service }}
    app.kubernetes.io/instance: {{ .Release.Name }}
    app.kubernetes.io/component: scheduled-backup
    helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+"  "_" }}
spec:
  schedule: {{ .Values.scheduledBackup.schedule | quote }}
  concurrencyPolicy: Forbid
  suspend: {{ .Values.scheduledBackup.suspend }}
  successfulJobsHistoryLimit: {{ .Values.scheduledBackup.successfulJobsHistoryLimit }}
  failedJobsHistoryLimit: {{ .Values.scheduledBackup.failedJobsHistoryLimit }}
  startingDeadlineSeconds: {{ .Values.scheduledBackup.startingDeadlineSeconds }}
  jobTemplate:
    metadata:
      labels:
        app.kubernetes.io/name: {{ template "chart.name" . }}
        app.kubernetes.io/managed-by: {{ .Release.Service }}
        app.kubernetes.io/instance: {{ .Release.Name }}
        app.kubernetes.io/component: scheduled-backup
        helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+"  "_" }}
    spec:
      backoffLimit: {{ .Values.scheduledBackup.backoffLimit | default 6 }}
    {{- if .Values.scheduledBackup.activeDeadlineSeconds }}
      activeDeadlineSeconds: {{ .Values.scheduledBackup.activeDeadlineSeconds }}
    {{- end }}
      template:
        metadata:
          labels:
            app.kubernetes.io/name: {{ template "chart.name" . }}
            app.kubernetes.io/managed-by: {{ .Release.Service }}
            app.kubernetes.io/instance: {{ .Release.Name }}
            app.kubernetes.io/component: scheduled-backup
            helm.sh/chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+"  "_" }}
        spec:
          containers:
          - name: scheduled-backup
            image: {{ .Values.scheduledBackup.mydumperImage }}
            imagePullPolicy: {{ .Values.scheduledBackup.mydumperImagePullPolicy | default "IfNotPresent" }}
            command:
            - /bin/sh
            - -c
            - |-
{{ tuple "scripts/_start_scheduled_backup.sh.tpl" . | include "helm-toolkit.utils.template" | indent 14 }}
            volumeMounts:
            - name: data
              mountPath: "/data"
          {{- if .Values.scheduledBackup.gcp }}
            - name: gcp-credentials
              mountPath: "/gcp"
              readOnly: true
          {{- end }}
            resources:
{{ toYaml .Values.scheduledBackup.resources | indent 14 }}
            env:
            - name: POD_NAME
              valueFrom:
                fieldRef:
                  fieldPath: metadata.name
            - name: POD_NAMESPACE
              valueFrom:
                fieldRef:
                  fieldPath: metadata.namespace
          {{- if and (ne .Values.timezone "UTC") (ne .Values.timezone "") }}
            - name: TZ
              value: {{ .Values.timezone | default "UTC" }}
          {{- end }}
          {{- if .Values.scheduledBackup.gcp }}
            - name: GOOGLE_APPLICATION_CREDENTIALS
              value: /gcp/credentials.json
          {{- end }}
          {{- if or .Values.scheduledBackup.ceph.secretName .Values.scheduledBackup.s3.secretName }}
            - name: AWS_ACCESS_KEY_ID
              valueFrom:
                secretKeyRef:
                  name: {{ or .Values.scheduledBackup.ceph.secretName .Values.scheduledBackup.s3.secretName }}
                  key: access_key
            - name: AWS_SECRET_ACCESS_KEY
              valueFrom:
                secretKeyRef:
                  name: {{ or .Values.scheduledBackup.ceph.secretName .Values.scheduledBackup.s3.secretName }}
                  key: secret_key
          {{- end }}
            - name: TIDB_USER
              valueFrom:
                secretKeyRef:
                  name: {{ .Values.scheduledBackup.secretName }}
                  key: user
            - name: TIDB_PASSWORD
              valueFrom:
                secretKeyRef:
                  name: {{ .Values.scheduledBackup.secretName }}
                  key: password
          restartPolicy: {{ .Values.scheduledBackup.restartPolicy | default "OnFailure" }}
        {{- if .Values.scheduledBackup.affinity }}
          affinity:
{{ toYaml .Values.scheduledBackup.affinity | indent 12 }}
        {{- end }}
        {{- if .Values.scheduledBackup.tolerations }}
          tolerations:
{{ toYaml .Values.scheduledBackup.tolerations | indent 12 }}
        {{- end }}
          volumes:
          - name: data
            persistentVolumeClaim:
              claimName: {{ template "cluster.name" . }}-scheduled-backup
        {{- if .Values.scheduledBackup.gcp }}
          - name: gcp-credentials
            secret:
              secretName: {{ .Values.scheduledBackup.gcp.secretName }}
        {{- end }}
{{- end }}
