This commit is contained in:
alessandro
2026-08-26 10:45:35 +02:00
parent c431fc36c5
commit 30d93adcad
26 changed files with 1796 additions and 0 deletions
+101
View File
@@ -0,0 +1,101 @@
#!/bin/bash
set -Eeuo pipefail
# Configuration
SOURCE_ENV="${1:-dbdev}"
DBNAME="${2:-geco}"
POD_NAME="${3:-postgresql-1-postgresql-0}"
CONTAINER_NAME="${4:-postgresql-server}"
BACKUP_REMOTE_DIR="${5:-/shared/backup}"
BACKUP_LOCAL_DIR="${6:-.}"
COMPRESSION="${7:-true}"
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Logging function
log() {
echo -e "${GREEN}[$(date '+%Y-%m-%d %H:%M:%S')]${NC} $*"
}
error() {
echo -e "${RED}[$(date '+%Y-%m-%d %H:%M:%S')] ERROR:${NC} $*" >&2
exit 1
}
warn() {
echo -e "${YELLOW}[$(date '+%Y-%m-%d %H:%M:%S')] WARN:${NC} $*"
}
# Determine backup file extension
if [ "${COMPRESSION}" = "true" ]; then
BACKUP_FILE="${DBNAME}-${SOURCE_ENV}-$(date +%Y%m%d-%H%M%S).backup.gz"
DUMP_FORMAT="c"
else
BACKUP_FILE="${DBNAME}-${SOURCE_ENV}-$(date +%Y%m%d-%H%M%S).backup"
DUMP_FORMAT="c"
fi
log "Inizio backup database PostgreSQL"
log "Namespace: ${SOURCE_ENV}"
log "Pod: ${POD_NAME}"
log "Database: ${DBNAME}"
log "File di backup: ${BACKUP_FILE}"
# Check if namespace exists
if ! kubectl get namespace "${SOURCE_ENV}" &>/dev/null; then
error "Namespace '${SOURCE_ENV}' non trovato"
fi
# Check if pod exists
if ! kubectl get pod "${POD_NAME}" -n "${SOURCE_ENV}" &>/dev/null; then
error "Pod '${POD_NAME}' non trovato nel namespace '${SOURCE_ENV}'"
fi
# Check if pod is running
POD_STATUS=$(kubectl get pod "${POD_NAME}" -n "${SOURCE_ENV}" -o jsonpath='{.status.phase}')
if [ "${POD_STATUS}" != "Running" ]; then
error "Pod '${POD_NAME}' non è in stato Running (stato attuale: ${POD_STATUS})"
fi
log "Creazione backup sul pod..."
# Create backup on remote pod
if [ "${COMPRESSION}" = "true" ]; then
kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${SOURCE_ENV}" \
-- pg_dump -U postgres -d "${DBNAME}" -F "${DUMP_FORMAT}" -b -v | gzip > "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" || error "Backup fallito"
else
kubectl exec -i "${POD_NAME}" \
-c "${CONTAINER_NAME}" \
-n "${SOURCE_ENV}" \
-- pg_dump -U postgres -d "${DBNAME}" -F "${DUMP_FORMAT}" -b -v > "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" || error "Backup fallito"
fi
log "Backup completato"
# Verify file exists and has content
if [ ! -f "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" ]; then
error "File di backup non trovato: ${BACKUP_LOCAL_DIR}/${BACKUP_FILE}"
fi
FILE_SIZE=$(du -h "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" | cut -f1)
if [ -z "${FILE_SIZE}" ] || [ "${FILE_SIZE}" = "0" ]; then
error "File di backup vuoto o non valido"
fi
log "✅ Backup completato con successo"
log "Percorso: ${BACKUP_LOCAL_DIR}/${BACKUP_FILE}"
log "Dimensione: ${FILE_SIZE}"
log "Inizio trasferimento file di backup su server remoto..."
if sshpass -p "POC-25_sts" scp "${BACKUP_LOCAL_DIR}/${BACKUP_FILE}" barucci@10.20.1.101:/home/barucci/froms/; then
log "✅ File trasferito con successo su 10.20.1.101"
log "Destinazione: barucci@10.20.1.101:/home/barucci/froms/${BACKUP_FILE}"
else
warn "Trasferimento file fallito, ma backup locale è disponibile in ${BACKUP_LOCAL_DIR}/${BACKUP_FILE}"
fi