Merge "Move PORTAL Storage access to RWO"
[oom.git] / kubernetes / common / mariadb-galera / templates / backup / cronjob.yaml
1 {{/*
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 }}
17 apiVersion: batch/v1beta1
18 kind: CronJob
19 metadata:
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 }}
27 spec:
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 }}