blob: 7d3ec75c0045c616c670bbfa01be06f20e3d114f [file] [log] [blame]
Akansha Dua3fb95ef2019-09-04 11:47:43 +00001{{/*
2# Copyright © 2019 Amdocs, Bell Canada
3#
4# Licensed under the Apache License, Version 2.0 (the "License");
5# you may not use this file except in compliance with the License.
6# You may obtain a copy of the License at
7#
8# http://www.apache.org/licenses/LICENSE-2.0
9#
10# Unless required by applicable law or agreed to in writing, software
11# distributed under the License is distributed on an "AS IS" BASIS,
12# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13# See the License for the specific language governing permissions and
14# limitations under the License.
15*/}}
16{{- if .Values.backup.enabled }}
17apiVersion: batch/v1beta1
18kind: CronJob
19metadata:
20 name: {{ include "common.fullname" . }}-backup
21 namespace: {{ include "common.namespace" . }}
22 labels:
23 app: {{ include "common.fullname" . }}
24 chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
25 release: {{ .Release.Name }}
26 heritage: {{ .Release.Service }}
27spec:
28 schedule: {{ .Values.backup.cron | quote }}
29 concurrencyPolicy: Forbid
30 startingDeadlineSeconds: 120
31 jobTemplate:
32 spec:
33 template:
34 spec:
35 restartPolicy: Never
36 initContainers:
37 - command:
38 - /root/ready.py
39 args:
40 - --container-name
41 - {{ include "common.name" . }}
42 env:
43 - name: NAMESPACE
44 valueFrom:
45 fieldRef:
46 apiVersion: v1
47 fieldPath: metadata.namespace
48 image: "{{ .Values.global.readinessRepository }}/{{ .Values.global.readinessImage }}"
49 imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
50 name: {{ include "common.name" . }}-readiness
51 - name: mariadb-galera-backup-init
52 image: "{{ include "common.repository" . }}/{{ .Values.backupImage }}"
53 imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
54 command:
55 - /bin/bash
56 - -c
57 - |
58 remove_dir(){
59 dirToRemove=$1
60 rm -rf $dirToRemove
61 echo "Failed" > /backup/backup.log
62 echo "Backup failed!!!"
63 }
64
65 target_dir=/backup/backup-`date +%s`
66 mkdir -p $target_dir
67
68 mysqlhost={{ include "common.fullname" . }}-{{ sub .Values.replicaCount 1 }}.{{ .Values.service.name }}
69
70 mariabackup --backup --target-dir=$target_dir --user=root --password=$DB_PASS --host=$mysqlhost
71
72 ret_code=$?
73 if [ $ret_code -ne 0 ]; then
74 remove_dir $target_dir
75 exit 0
76 fi
77
78 echo "Starting Backup Preparation!!!"
79 mariabackup --prepare --target-dir=$target_dir
80 ret_code=$?
81 if [ $ret_code -ne 0 ]; then
82 remove_dir $target_dir
83 exit 0
84 fi
85 echo "Success" > /backup/backup.log
86 echo "Backup Successful!!!"
87 env:
88 - name: DB_PASS
89 valueFrom:
90 secretKeyRef:
91 name: {{ include "common.fullname" . }}
92 key: db-root-password
93 volumeMounts:
94 - name: backup-data
95 mountPath: /backup
96 - name: db-data
97 mountPath: /var/lib/mysql
98 containers:
99 - name: mariadb-backup-validate
100 image: "{{ include "common.repository" . }}/{{ .Values.backupImage }}"
101 imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
102 env:
103 - name: MYSQL_ROOT_PASSWORD
104 valueFrom:
105 secretKeyRef:
106 name: {{ include "common.fullname" . }}
107 key: db-root-password
108 command:
109 - /bin/bash
110 - -c
111 - |
112 remove_dir(){
113 dirToRemove=$1
114 rm -rf $dirToRemove
115 echo "Validation Failed!!!";
116 }
117
118 backup_result=`cat /backup/backup.log`
119 rm -rf /backup/backup.log
120
121 if [ "$backup_result" == "Failed" ]; then
122 echo "Backup Failed!!! So Validation Failed!!!";
123 exit 0
124 fi
125
126 target_dir=$(ls -td -- /backup/backup-* | head -n 1)
127 cp -Ra $target_dir/* /var/lib/mysql/
128
129 if [ ! "$(ls -A /var/lib/mysql)" ]; then
130 remove_dir $target_dir
131 exit 0
132 fi
133
134 /docker-entrypoint.sh mysqld &
135
136 count=0
137 until mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SELECT 1";
138 do sleep 3;
139 count=`expr $count + 1`;
140 if [ $count -ge 30 ]; then
141 remove_dir $target_dir
142 exit 0;
143 fi;
144 done
145
146 mysqlcheck -A --user=root --password=$MYSQL_ROOT_PASSWORD > /tmp/output.log
147 error_lines=`cat /tmp/output.log| grep -v "OK" | wc -l`
148
149 cat /tmp/output.log
150
151 if [ $error_lines -gt 1 ];then
152 remove_dir $target_dir
153 else
154 echo "Validation successful!!!"
155 cd /backup
156 totalFiles=`ls -t | grep "backup-" | wc -l`
157 if [ $totalFiles -gt {{ .Values.backup.retentionPeriod }} ]; then
158 filestoDelete=`expr $totalFiles - {{ .Values.backup.retentionPeriod }}`
159 ls -tr | grep backup | head -$filestoDelete | xargs rm -rf
160 fi
161 fi
162 volumeMounts:
163 - mountPath: /etc/localtime
164 name: localtime
165 readOnly: true
166 - name: backup-data
167 mountPath: /backup
168 volumes:
169 - name: localtime
170 hostPath:
171 path: /etc/localtime
172 - name: db-data
173 persistentVolumeClaim:
174 claimName: {{ include "common.fullname" . }}-db-data
175 - name: backup-data
176 persistentVolumeClaim:
177 claimName: {{ include "common.fullname" . }}-backup
178{{- end }}