|
| 1 | +#!/bin/bash |
| 2 | + |
| 3 | +# Copyright (c) 2024-2025 Hopsworks AB. All rights reserved. |
| 4 | + |
| 5 | +set -e |
| 6 | + |
| 7 | +{{- include "rondb.backups.defineBackupIdEnv" . }} |
| 8 | + |
| 9 | +REMOTE_BACKUP_BASE_DIR={{ include "rondb.rcloneBackupRemoteName" . }}:{{ include "rondb.backups.bucketName" (dict "backupConfig" .Values.backups "global" .Values.global) }}/{{ include "rondb.takeBackupPathPrefix" . }} |
| 10 | + |
| 11 | +if [ -z "$TTL" ]; then |
| 12 | + echo "No TTL configuration found." |
| 13 | + exit 0 |
| 14 | +fi |
| 15 | + |
| 16 | +echo "Check expired backups in $REMOTE_BACKUP_BASE_DIR with TTL $TTL " |
| 17 | + |
| 18 | +TTL_EXPIRED=$( |
| 19 | + rclone lsjson --recursive --files-only "$REMOTE_BACKUP_BASE_DIR" --min-age "$TTL" \ |
| 20 | + | jq -r '.[].Path | split("/") | .[0]' \ |
| 21 | + | sort -u |
| 22 | +) |
| 23 | + |
| 24 | +if [ -z "$TTL_EXPIRED" ]; then |
| 25 | + echo "No TTL expired backups found." |
| 26 | + exit 0 |
| 27 | +fi |
| 28 | + |
| 29 | +echo "TTL expired backups detected:" |
| 30 | +echo "$TTL_EXPIRED" |
| 31 | + |
| 32 | +echo "Deleting TTL-expired backups from object storage" |
| 33 | + |
| 34 | +{{- if include "rondb.backups.metadataStore.configMapName" . }} |
| 35 | +CONFIGMAPS=$(kubectl get cm -n {{ .Release.Namespace }} \ |
| 36 | + -l "app=backups-metadata,service=rondb,managed-by=cronjob" \ |
| 37 | + -o jsonpath='{.items[*].metadata.name}') |
| 38 | +{{- end }} |
| 39 | + |
| 40 | +for id in $TTL_EXPIRED; do |
| 41 | + if [ "$id" = "$BACKUP_ID" ]; then |
| 42 | + echo "Skipping $id since this is the last active backup" |
| 43 | + continue |
| 44 | + fi |
| 45 | + BACKUP_PATH="$REMOTE_BACKUP_BASE_DIR/$id" |
| 46 | + echo "Deleting $BACKUP_PATH" |
| 47 | + rclone delete -v "$BACKUP_PATH" --rmdirs |
| 48 | + |
| 49 | +{{- if include "rondb.backups.metadataStore.configMapName" . }} |
| 50 | + PATCH_JSON="{\"data\": {\"$id\": null}}" |
| 51 | + for cm in $CONFIGMAPS; do |
| 52 | + echo "Cleaning metadata from ConfigMap: $cm with $PATCH_JSON" |
| 53 | + kubectl patch cm "$cm" -n {{ .Release.Namespace }} --type merge -p "$PATCH_JSON" || true |
| 54 | + done |
| 55 | +{{- end }} |
| 56 | +done |
0 commit comments