1+ {{- range .Values.databases }}
2+ {{- if .backup.enabled }}
3+ ---
4+ apiVersion : v1
5+ kind : ConfigMap
6+ metadata :
7+ name : {{ .name }}-backup-script
8+ namespace : {{ $.Release.Namespace }}
9+ labels :
10+ app.kubernetes.io/name : {{ .name }}-backup
11+ data :
12+ backup-script.sh : |
13+ #!/bin/bash
14+ set -eo pipefail
15+
16+ # --- Configuration ---
17+ DB_SERVER="{{ .name }}-svc"
18+ DB_DATABASE="{{ .database }}"
19+ DB_USER="sa"
20+ DB_PASSWORD="${MSSQL_SA_PASSWORD}"
21+
22+ # S3 Backup details from values
23+ S3_BUCKET="{{ .backup.s3Bucket }}"
24+ S3_REGION="{{ .backup.s3Region }}"
25+ S3_ENDPOINT="${S3_BUCKET}.s3.${S3_REGION}.amazonaws.com"
26+ BACKUP_FILENAME="${DB_DATABASE}-$(date +%Y-%m-%d-%H-%M-%S).bak"
27+ S3_URL="s3://${S3_ENDPOINT}/backups/${BACKUP_FILENAME}"
28+ CREDENTIAL_NAME="s3://${S3_ENDPOINT}"
29+
30+ echo "Starting backup for database [${DB_DATABASE}] to ${S3_URL}"
31+
32+ # --- T-SQL Commands ---
33+ CREATE_CREDENTIAL_SQL="
34+ IF NOT EXISTS (SELECT 1 FROM sys.credentials WHERE name = '${CREDENTIAL_NAME}')
35+ BEGIN
36+ CREATE CREDENTIAL [${CREDENTIAL_NAME}]
37+ WITH IDENTITY = 'S3 Access Key',
38+ SECRET = '${AWS_ACCESS_KEY_ID}:${AWS_SECRET_ACCESS_KEY}'
39+ END"
40+
41+ BACKUP_DATABASE_SQL="
42+ BACKUP DATABASE [${DB_DATABASE}]
43+ TO URL = '${S3_URL}'
44+ WITH FORMAT, COMPRESSION, STATS = 10, MAXTRANSFERSIZE = 20971520;"
45+
46+ # --- Execution ---
47+ echo "Ensuring S3 credential exists..."
48+ sqlcmd -S "${DB_SERVER}" -U "${DB_USER}" -P "${DB_PASSWORD}" -Q "${CREATE_CREDENTIAL_SQL}" -b -C
49+
50+ echo "Executing backup..."
51+ sqlcmd -S "${DB_SERVER}" -U "${DB_USER}" -P "${DB_PASSWORD}" -Q "${BACKUP_DATABASE_SQL}" -b -C -t 600
52+
53+ echo "Backup of [${DB_DATABASE}] completed successfully."
54+ {{- end }}
55+ {{- end }}
0 commit comments