rollback.sh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. #!/usr/bin/env bash
  2. set -euo pipefail
  3. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  4. usage() {
  5. cat <<'EOF'
  6. Usage: rollback.sh --release-root PATH --backup-dir PATH --project-name NAME --confirm-project NAME [options]
  7. Load the explicitly selected prior offline release, then restore its matching
  8. pre-upgrade backup into a new recovery project. Database downgrade commands are
  9. never used.
  10. Options:
  11. --release-root PATH Extracted prior offline release.
  12. --backup-dir PATH Pre-upgrade WP13 backup.
  13. --project-name NAME New recovery project.
  14. --confirm-project NAME Must exactly match --project-name.
  15. --env-file PATH Optional recovery environment file.
  16. --start Start and health-check the recovery project.
  17. --help Show this help.
  18. EOF
  19. }
  20. RELEASE_ROOT=""
  21. BACKUP_DIR=""
  22. PROJECT_NAME=""
  23. CONFIRM_PROJECT=""
  24. ENV_FILE=""
  25. START_FLAG=""
  26. while [[ $# -gt 0 ]]; do
  27. case "$1" in
  28. --release-root) RELEASE_ROOT="$2"; shift 2 ;;
  29. --backup-dir) BACKUP_DIR="$2"; shift 2 ;;
  30. --project-name) PROJECT_NAME="$2"; shift 2 ;;
  31. --confirm-project) CONFIRM_PROJECT="$2"; shift 2 ;;
  32. --env-file) ENV_FILE="$2"; shift 2 ;;
  33. --start) START_FLAG="--start"; shift ;;
  34. --help|-h) usage; exit 0 ;;
  35. *) printf 'ERROR: unknown argument: %s\n' "$1" >&2; exit 1 ;;
  36. esac
  37. done
  38. [[ -n "${RELEASE_ROOT}" && -d "${RELEASE_ROOT}" ]] \
  39. || { printf 'ERROR: --release-root is required\n' >&2; exit 1; }
  40. [[ -n "${BACKUP_DIR}" ]] \
  41. || { printf 'ERROR: --backup-dir is required\n' >&2; exit 1; }
  42. [[ -n "${PROJECT_NAME}" && "${PROJECT_NAME}" == "${CONFIRM_PROJECT}" ]] \
  43. || { printf 'ERROR: project confirmation mismatch\n' >&2; exit 1; }
  44. bash "${RELEASE_ROOT}/operations/install_offline.sh" --help >/dev/null
  45. if [[ -f "${RELEASE_ROOT}/images/dataops-images.tar" ]]; then
  46. docker load -i "${RELEASE_ROOT}/images/dataops-images.tar" >/dev/null
  47. fi
  48. args=(
  49. --backup-dir "${BACKUP_DIR}"
  50. --compose-file "${RELEASE_ROOT}/deploy/docker/docker-compose.yml"
  51. --project-name "${PROJECT_NAME}"
  52. --confirm-project "${CONFIRM_PROJECT}"
  53. )
  54. [[ -z "${ENV_FILE}" ]] || args+=(--env-file "${ENV_FILE}")
  55. [[ -z "${START_FLAG}" ]] || args+=("${START_FLAG}")
  56. bash "${RELEASE_ROOT}/operations/restore.sh" "${args[@]}"