job-restore.yaml
3.82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
---
apiVersion: v1
kind: PersistentVolumeClaim
metadata:
name: {{ include "postgresql-rclone.fullname" . }}-restores
spec:
storageClassName: {{ .Values.restore.pvc.storageClassName }}
accessModes:
- ReadWriteOnce
resources:
requests:
storage: {{ .Values.restore.pvc.size }}
---
apiVersion: batch/v1
kind: Job
metadata:
name: {{ include "postgresql-rclone.fullname" . }}-restore
labels:
{{- include "postgresql-rclone.labels" . | nindent 4 }}
spec:
ttlSecondsAfterFinished: {{ .Values.restore.job.ttlSecondsAfterFinished }}
template:
spec:
restartPolicy: OnFailure
imagePullSecrets:
{{- toYaml .Values.imagePullSecrets | nindent 12 }}
volumes:
- name: restores
persistentVolumeClaim:
claimName: {{ include "postgresql-rclone.fullname" . }}-restores
{{- if .Values.rclone.enabled }}
- name: rclone-auth
secret:
secretName: {{ include "postgresql-rclone.fullname" . }}-rclone
- name: rclone-config
configMap:
name: {{ include "postgresql-rclone.fullname" . }}-rclone
{{- end }}
initContainers:
{{- if .Values.rclone.enabled }}
- name: rclone
image: "{{ .Values.rclone.image.repository }}:{{ .Values.rclone.image.tag }}"
imagePullPolicy: {{ .Values.rclone.image.pullPolicy }}
volumeMounts:
- name: restores
mountPath: /restores
- name: rclone-config
mountPath: /config
- name: rclone-auth
mountPath: /secret
envFrom:
- configMapRef:
name: {{ include "postgresql-rclone.fullname" . }}-rclone
- secretRef:
name: {{ include "postgresql-rclone.fullname" . }}-rclone
env:
{{- if .Values.rclone.crypt.enabled }}
- name: RCLONE_CRYPT_REMOTE
{{- if .Values.restore.url }}
value: ":{{ .Values.restore.url }}"
{{- else }}
value: ":s3:$(S3_BUCKET)/$(S3_PREFIX)/last/"
{{- end }}
{{- end }}
{{- if .Values.rclone.crypt.enabled }}
args: ["copy", ":crypt:", "/restores/.work/"]
{{- else }}
{{- if .Values.restore.url }}
args: ["-v", "copy", ":s3:{{ .Values.restore.url }}", "/restores/.work/"]
{{- else }}
args: ["-v", "copy", ":s3:$(S3_BUCKET)/$(S3_PREFIX)/last/", "/restores/.work/"]
{{- end }}
{{- end }}
{{- end }}
- name: link-latest
image: "{{ .Values.bash.image.repository }}:{{ .Values.bash.image.tag }}"
imagePullPolicy: {{ .Values.bash.image.pullPolicy }}
volumeMounts:
- name: restores
mountPath: /restores
command:
- bash
- -cx
- |-
{{- if .Values.restore.url }}
find /restores/.work -maxdepth 1 -mindepth 1 | \
{{- else }}
find /restores/.work -maxdepth 1 -mindepth 1 -name '*.sql.gz' | \
sort | \
awk '{split($1, a, /-([^-]*)-([^-]*)$/)} !uniq[a[1] a[2] a[3]]++' | \
{{- end }}
while read file; do \
ln -f "$file" "/restores/"
done
- name: show-restores
image: "{{ .Values.bash.image.repository }}:{{ .Values.bash.image.tag }}"
imagePullPolicy: {{ .Values.bash.image.pullPolicy }}
volumeMounts:
- name: restores
mountPath: /restores
command: ["ls"]
args: ["-alR", "/restores"]
containers:
- name: ready
image: "{{ .Values.bash.image.repository }}:{{ .Values.bash.image.tag }}"
imagePullPolicy: {{ .Values.bash.image.pullPolicy }}
volumeMounts:
- name: restores
mountPath: /restores
command:
- bash
- -cx
- |-
touch /restores/.restored