{{- define "system.backup.cronjob" -}} --- apiVersion: batch/v1 kind: CronJob metadata: name: {{ .system_name }}-{{ .backup.pvc_name }}-backup spec: schedule: {{ required "Values.backups.volumes[n].schedule required in crontab format" .backup.schedule }} successfulJobsHistoryLimit: 1 failedJobsHistoryLimit: 1 jobTemplate: spec: template: spec: restartPolicy: OnFailure volumes: - name: nfs-backup nfs: server: {{ required "Values.backups.volumes[n].nas_ip required to make nfs connection" .nas_ip }} path: {{ required "Values.backups.volumes[n].nas_path required to store backup to a nfs connection" .backup.nas_path }} - name: {{ required "Values.backups.volumes[n].pvc_name required" .backup.pvc_name }} persistentVolumeClaim: claimName: {{ .backup.pvc_name }} containers: - name: config-backup image: {{ .image | default "alpine" }} imagePullPolicy: IfNotPresent command: - sh - -c - date; echo "Creating backup for {{ .system_name }}"; echo -e "\nCreating {{ .system_name }} directory if it doesnt already exist"; mkdir -p /nas/backup/{{ .system_name }}; echo -e "\nProcessing {{ .backup.pvc_name }}"; echo " - Creating backup of {{ .backup.pvc_name }} volume"; tar -czf /nas/backup/{{ .system_name }}/{{ .backup.pvc_name }}_$(date +%Y-%m-%d).tar.gz /backup_source; echo " - Enforcing backup retention policy for {{ .backup.pvc_name }} to latest {{ required "Values.backups.volumes[n].retention required as an integer" .backup.retention }}"; ls -t /nas/backup/{{ required "Values.backups.system_name required" .system_name }}/{{ .backup.pvc_name }}_*.tar.gz | sort -r | tail -n +{{ add1 .backup.retention }} | xargs rm -f; echo -e "\nCompleted backup of {{ .backup.pvc_name }}"; date; volumeMounts: - name: nfs-backup mountPath: /nas/backup - name: {{ .backup.pvc_name }} mountPath: /backup_source {{- end }} {{ if .Values.backups.enabled }} {{- range $parent, $backup := .Values.backups.volumes -}} {{- if $backup.enabled }} {{ include "system.backup.cronjob" (dict "backup" $backup "image" $.Values.backups.image "nas_ip" $.Values.backups.nas_ip "system_name" $.Values.backups.system_name) }} {{- end }} {{- end }} {{- end }}