blob: a5f15781594327db9182bd61f626067435910b0a [file] [log] [blame]
{{/*
# Copyright © 2019 Amdocs, Bell Canada
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
*/}}
{{- if .Values.backup.enabled }}
apiVersion: batch/v1beta1
kind: CronJob
metadata:
name: {{ include "common.fullname" . }}-backup
namespace: {{ include "common.namespace" . }}
labels:
app: {{ include "common.fullname" . }}
chart: {{ .Chart.Name }}-{{ .Chart.Version | replace "+" "_" }}
release: {{ .Release.Name }}
heritage: {{ .Release.Service }}
spec:
schedule: {{ .Values.backup.cron | quote }}
concurrencyPolicy: Forbid
startingDeadlineSeconds: 120
jobTemplate:
spec:
template:
spec:
restartPolicy: Never
initContainers:
- command:
- /root/ready.py
args:
- --container-name
- {{ include "common.name" . }}
env:
- name: NAMESPACE
valueFrom:
fieldRef:
apiVersion: v1
fieldPath: metadata.namespace
image: "{{ .Values.global.readinessRepository }}/{{ .Values.global.readinessImage }}"
imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
name: {{ include "common.name" . }}-readiness
- name: mariadb-galera-backup-init
image: "{{ include "common.repository" . }}/{{ .Values.backupImage }}"
imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
command:
- /bin/bash
- -c
- |
remove_dir(){
dirToRemove=$1
rm -rf $dirToRemove
echo "Failed" > /backup/backup.log
echo "Backup failed!!!"
}
target_dir=/backup/backup-`date +%s`
mkdir -p $target_dir
mysqlhost={{ include "common.fullname" . }}-{{ sub .Values.replicaCount 1 }}.{{ .Values.service.name }}
mariabackup --backup --target-dir=$target_dir --user=root --password=$DB_PASS --host=$mysqlhost
ret_code=$?
if [ $ret_code -ne 0 ]; then
remove_dir $target_dir
exit 0
fi
echo "Starting Backup Preparation!!!"
mariabackup --prepare --target-dir=$target_dir
ret_code=$?
if [ $ret_code -ne 0 ]; then
remove_dir $target_dir
exit 0
fi
echo "Success" > /backup/backup.log
echo "Backup Successful!!!"
env:
- name: DB_PASS
valueFrom:
secretKeyRef:
name: {{ include "common.fullname" . }}
key: db-root-password
volumeMounts:
- name: backup-dir
mountPath: /backup
containers:
- name: mariadb-backup-validate
image: "{{ include "common.repository" . }}/{{ .Values.backupImage }}"
imagePullPolicy: {{ .Values.global.pullPolicy | default .Values.pullPolicy }}
env:
- name: MYSQL_ROOT_PASSWORD
valueFrom:
secretKeyRef:
name: {{ include "common.fullname" . }}
key: db-root-password
command:
- /bin/bash
- -c
- |
remove_dir(){
dirToRemove=$1
rm -rf $dirToRemove
echo "Validation Failed!!!";
}
backup_result=`cat /backup/backup.log`
rm -rf /backup/backup.log
if [ "$backup_result" == "Failed" ]; then
echo "Backup Failed!!! So Validation Failed!!!";
exit 0
fi
target_dir=$(ls -td -- /backup/backup-* | head -n 1)
cp -Ra $target_dir/* /var/lib/mysql/
if [ ! "$(ls -A /var/lib/mysql)" ]; then
remove_dir $target_dir
exit 0
fi
/docker-entrypoint.sh mysqld &
count=0
until mysql --user=root --password=$MYSQL_ROOT_PASSWORD -e "SELECT 1";
do sleep 3;
count=`expr $count + 1`;
if [ $count -ge 30 ]; then
remove_dir $target_dir
exit 0;
fi;
done
mysqlcheck -A --user=root --password=$MYSQL_ROOT_PASSWORD > /tmp/output.log
error_lines=`cat /tmp/output.log| grep -v "OK" | wc -l`
cat /tmp/output.log
if [ $error_lines -gt 1 ];then
remove_dir $target_dir
else
echo "Validation successful!!!"
cd /backup
totalFiles=`ls -t | grep "backup-" | wc -l`
if [ $totalFiles -gt {{ .Values.backup.retentionPeriod }} ]; then
filestoDelete=`expr $totalFiles - {{ .Values.backup.retentionPeriod }}`
ls -tr | grep backup | head -$filestoDelete | xargs rm -rf
fi
fi
volumeMounts:
- mountPath: /etc/localtime
name: localtime
readOnly: true
- name: backup-dir
mountPath: /backup
volumes:
- name: localtime
hostPath:
path: /etc/localtime
- name: backup-dir
persistentVolumeClaim:
claimName: {{ include "common.fullname" . }}-backup-data
{{- end }}