kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: backup-{{ .identity }}
  labels:
    app.kubernetes.io/instance: db 
    app.kubernetes.io/component: backup
    app.kubernetes.io/namespace: {{ .namespace }}
spec:
  accessModes:
    - ReadWriteOnce
  volumeMode: Filesystem
  resources:
    requests:
      storage: "{{ .storage }}"
  storageClassName: "{{ .storageClassName }}"
---
apiVersion: batch/v1
kind: Job
metadata:
  name: "backup-{{ .identity }}"
  labels:
    app.kubernetes.io/name: backup
    app.kubernetes.io/instance: "backup-{{ .identity }}"
    app.kubernetes.io/component: backup
    app.kubernetes.io/managed-by: dbaas
    jobgroup: "backup-gcp"
spec:
  template:
    spec:
      serviceAccount: operations
      initContainers:
      - name: get-ts
        image: "{{ .backup.binlogImage }}"
        imagePullPolicy: Always
        resources:
          requests:
            cpu: "0.8"
        command:
        - /binlogctl
        - -pd-urls=http://{{.pdClusterIP}}:2379
        - -cmd=generate_meta
        - -data-dir=/savepoint-dir
        volumeMounts:
        - name: savepoint-dir
          mountPath: "/savepoint-dir"
      containers:
      - name: backup
        image: "{{ .backup.mydumperImage }}"
        imagePullPolicy: Always
        resources:
          requests:
            cpu: 1
        command:
        - /bin/sh
        - -c
        - |
          set -euo pipefail
          {{- if .identity }}
          dirname='backup-{{ .identity  }}'
          {{- else }}
          dirname="$(date +%Y-%m-%dT%H%M%S)-${MY_POD_NAME}"
          {{- end }}
          mkdir -p /data/${dirname}/
          cp /savepoint-dir/savepoint /data/${dirname}/
          /mydumper \
            --outputdir=/data/${dirname} \
            --host={{.tidbClusterIP}} \
            --port=4000 \
            --user={{ .backup.user }} \
            "--password=${TIDB_PASSWORD}" \
            {{ .backup.options }}
          uploader \
            --cloud=gcp \
            --bucket={{ .bucket }} \
            --backup-dir=/data/${dirname}
        volumeMounts:
        - name: savepoint-dir
          mountPath: "/savepoint-dir"
        - name: data
          mountPath: "/data"
        - name: google-cloud-key
          mountPath: /var/secrets/google
        env:
        - name: GOOGLE_APPLICATION_CREDENTIALS
          value: /var/secrets/google/key.json
        - name: MY_POD_NAME
          valueFrom:
            fieldRef:
              fieldPath: metadata.name
        - name: TIDB_PASSWORD
          valueFrom:
            secretKeyRef:
              name: "{{ .passwordSecretName }}"
              key: dbaas
      restartPolicy: OnFailure
      volumes:
      - name: savepoint-dir
        emptyDir: {}
      - name: data
        persistentVolumeClaim:
          claimName: backup-{{.identity}}
      - name: google-cloud-key
        secret:
          secretName: dbaas-backup-key
