86 lines
2.1 KiB
Bash
Executable File
86 lines
2.1 KiB
Bash
Executable File
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
. "$SCRIPT_DIR/common.sh"
|
|
|
|
WHATIF=0
|
|
KEEP_DATA=0
|
|
for arg in "$@"; do
|
|
case "$arg" in
|
|
--what-if) WHATIF=1 ;;
|
|
--keep-data) KEEP_DATA=1 ;;
|
|
*) echo "Unknown argument: $arg" >&2; exit 1 ;;
|
|
esac
|
|
done
|
|
|
|
RESTORE_ROOT="/mnt/user/backups/restore-lab/vaultwarden"
|
|
REPORT_ROOT="/mnt/user/backups/restore-reports"
|
|
DATA_DIR="$RESTORE_ROOT/data"
|
|
EXTRACT_DIR="$BORG_RESTORE_HOST_ROOT/vaultwarden-extract"
|
|
COMPOSE_FILE="$SCRIPT_DIR/vaultwarden-compose.test.yml"
|
|
REPORT_FILE="$REPORT_ROOT/vaultwarden-$(date +%F).md"
|
|
|
|
if [ "$WHATIF" -eq 1 ]; then
|
|
cat <<EOF
|
|
Vaultwarden restore test
|
|
Mode: WhatIf
|
|
RestoreRoot: $RESTORE_ROOT
|
|
ReportRoot: $REPORT_ROOT
|
|
Expected Borg source path: local/appdata/vaultwarden
|
|
EOF
|
|
exit 0
|
|
fi
|
|
|
|
require_cmd docker
|
|
require_cmd curl
|
|
require_path "$BORG_PASSPHRASE_FILE_DEFAULT"
|
|
require_path "$COMPOSE_FILE"
|
|
|
|
cleanup() {
|
|
cleanup_compose "$COMPOSE_FILE"
|
|
if [ "$KEEP_DATA" -ne 1 ]; then
|
|
rm -rf "$DATA_DIR"
|
|
fi
|
|
rm -rf "$EXTRACT_DIR"
|
|
}
|
|
trap cleanup EXIT
|
|
|
|
rm -rf "$EXTRACT_DIR" "$RESTORE_ROOT"
|
|
mkdir -p "$RESTORE_ROOT"
|
|
|
|
archive="$(latest_archive_name)"
|
|
repo="$(borg_repo_url)"
|
|
borg_extract "/restore/vaultwarden-extract" "local/appdata/vaultwarden"
|
|
mv "$EXTRACT_DIR/local/appdata/vaultwarden" "$DATA_DIR"
|
|
|
|
docker compose -f "$COMPOSE_FILE" up -d >/dev/null
|
|
sleep 8
|
|
status="$(curl -s -o /tmp/vaultwarden-body.html -w '%{http_code}' http://127.0.0.1:18080)"
|
|
grep -qi "vaultwarden" /tmp/vaultwarden-body.html
|
|
|
|
write_report "$REPORT_FILE" <<EOF
|
|
# Vaultwarden Restore Test Report - $(date +%F)
|
|
|
|
- Service: \`vaultwarden\`
|
|
- Source repo: \`$repo\`
|
|
- Archive: \`$archive\`
|
|
- Restore target: \`$DATA_DIR\`
|
|
- Test container: \`restoretest-vaultwarden\`
|
|
- Test endpoint: \`http://127.0.0.1:18080\`
|
|
- Result: \`SUCCESS\`
|
|
|
|
## Checks
|
|
|
|
- Borg extract into isolated restore-lab: \`ok\`
|
|
- HTTP status: \`$status\`
|
|
- Login page content: \`ok\`
|
|
|
|
## Notes
|
|
|
|
- Test ran without Traefik and without the productive domain.
|
|
- Test data was cleaned after success: \`$([ "$KEEP_DATA" -eq 1 ] && echo no || echo yes)\`
|
|
EOF
|
|
|
|
echo "Vaultwarden restore test ok -> $REPORT_FILE"
|