33800 Docs

← Retour
#!/bin/bash # ═══════════════════════════════════════════════════════════════════════════ # ROLLBACK.SH - Script de rollback manuel # Permet de revenir à une version précédente d'un service # # Usage: rollback.sh <config_file> [steps] # Exemple: rollback.sh conf.prod.gouroubleu.yml 1 # ═══════════════════════════════════════════════════════════════════════════ set -euo pipefail # ─────────────────────────────────────────────────────────────────────────── # PATHS # ─────────────────────────────────────────────────────────────────────────── if [[ -d "/stock_8to/33800-stack" ]]; then STOCK_BASE="/stock_8to/33800-stack" elif [[ -d "/mnt/stock_8to/33800-stack" ]]; then STOCK_BASE="/mnt/stock_8to/33800-stack" else echo "ERROR: Cannot find 33800-stack directory" exit 1 fi SCRIPTS_DIR="${STOCK_BASE}/scripts/deploy" # ─────────────────────────────────────────────────────────────────────────── # LOAD LIBS # ─────────────────────────────────────────────────────────────────────────── source "${SCRIPTS_DIR}/lib/common.sh" source "${SCRIPTS_DIR}/lib/parse-yaml.sh" source "${SCRIPTS_DIR}/lib/targets.sh" [[ -f "${SCRIPTS_DIR}/lib/notifications.sh" ]] && source "${SCRIPTS_DIR}/lib/notifications.sh" [[ -f "${SCRIPTS_DIR}/lib/registry.sh" ]] && source "${SCRIPTS_DIR}/lib/registry.sh" # ─────────────────────────────────────────────────────────────────────────── # ARGUMENTS # ─────────────────────────────────────────────────────────────────────────── if [[ $# -lt 1 ]]; then echo "Usage: rollback.sh <config_file> [steps]" echo " config_file: Fichier conf.gouroubleu.yml" echo " steps: Nombre de versions à remonter (défaut: 1)" exit 1 fi CONFIG_FILE="$1" STEPS="${2:-1}" if [[ ! -f "$CONFIG_FILE" ]]; then log_error "Fichier de config non trouvé: $CONFIG_FILE" exit 1 fi # ─────────────────────────────────────────────────────────────────────────── # PARSE CONFIG # ─────────────────────────────────────────────────────────────────────────── parse_yaml "$CONFIG_FILE" "CFG_" parse_yaml_section "$CONFIG_FILE" "deploy" "CFG_" require_var CFG_name require_var CFG_target echo "═══════════════════════════════════════════════════════════════════════════" echo " ROLLBACK - ${CFG_name}" echo "═══════════════════════════════════════════════════════════════════════════" echo " Target: ${CFG_target}" echo " Steps: ${STEPS}" echo "═══════════════════════════════════════════════════════════════════════════" echo "" # ─────────────────────────────────────────────────────────────────────────── # RESOLVE TARGET # ─────────────────────────────────────────────────────────────────────────── resolve_target "${CFG_target}" # ─────────────────────────────────────────────────────────────────────────── # EXECUTE ROLLBACK # ─────────────────────────────────────────────────────────────────────────── STRATEGY_FILE="${SCRIPTS_DIR}/strategies/${TARGET_TYPE}.sh" if [[ ! -f "$STRATEGY_FILE" ]]; then log_error "Stratégie non trouvée: $STRATEGY_FILE" exit 1 fi source "$STRATEGY_FILE" # Appeler la fonction de rollback appropriée case "$TARGET_TYPE" in files) rollback_files "$STEPS" ;; remote) rollback_remote ;; docker) log_error "Rollback Docker non supporté (utiliser docker rollback ou redéployer)" exit 1 ;; *) log_error "Rollback non supporté pour: $TARGET_TYPE" exit 1 ;; esac # ─────────────────────────────────────────────────────────────────────────── # NOTIFY # ─────────────────────────────────────────────────────────────────────────── if type notify_rollback &>/dev/null; then notify_rollback "${CFG_name}" "${CFG_target}" "current" "previous-${STEPS}" fi if type registry_update_service &>/dev/null; then registry_update_service "${CFG_name}" "${CFG_target}" "${TARGET_TYPE}" "rollback" "rolled_back" fi echo "" echo "═══════════════════════════════════════════════════════════════════════════" log_success "Rollback terminé: ${CFG_name}" echo "═══════════════════════════════════════════════════════════════════════════"