diff --git a/docker-volume-recover.sh b/docker-volume-recover.sh index 26dd3b5..43c1408 100644 --- a/docker-volume-recover.sh +++ b/docker-volume-recover.sh @@ -1,36 +1,61 @@ #!/bin/bash + +# Check minimum number of arguments +if [ $# -lt 3 ]; then + echo "ERROR: Not enough arguments. Please provide at least a volume name, backup hash, and version." + exit 1 +fi + volume_name="$1" # Volume-Name backup_hash="$2" # Hashed Machine ID version="$3" # version to backup -container="$4" # optional -mysql_root_password="$5" # optional -database="$6" # optional +container="${4:-}" # optional +mysql_root_password="${5:-}" # optional +database="${6:-}" # optional backup_folder="Backups/$backup_hash/docker-volume-backup/$version/$volume_name" backup_files="/$backup_folder/files" backup_sql="/$backup_folder/sql/backup.sql" + echo "Inspect volume $volume_name" docker volume inspect "$volume_name" exit_status_volume_inspect=$? + if [ $exit_status_volume_inspect -eq 0 ]; then - echo "Volume $volume_name allready exists" - else + echo "Volume $volume_name already exists" +else echo "Create volume $volume_name" docker volume create "$volume_name" + if [ $? -ne 0 ]; then + echo "ERROR: Failed to create volume $volume_name" + exit 1 + fi fi if [ -f "$backup_sql" ]; then if [ -n "$container" ] && [ -n "$mysql_root_password" ] && [ -n "$database" ]; then echo "recover mysql dump" - cat $backup_sql | docker exec -i "$container" /usr/bin/mysql -u root --password="$mysql_root_password" $database - exit 0 + cat "$backup_sql" | docker exec -i "$container" /usr/bin/mysql -u root --password="$mysql_root_password" "$database" + if [ $? -ne 0 ]; then + echo "ERROR: Failed to recover mysql dump" + exit 1 + else + exit 0 + fi fi - echo "a database backup exists, but a parameter is missing. Files will be recovered instead." + echo "A database backup exists, but a parameter is missing. Files will be recovered instead." fi if [ -d "$backup_files" ]; then echo "recover files" docker run --rm -v "$volume_name:/recover/" -v "$backup_files:/backup/" "kevinveenbirkenbach/alpine-rsync" sh -c "rsync -avv --delete /backup/ /recover/" + if [ $? -ne 0 ]; then + echo "ERROR: Failed to recover files" + exit 1 + fi +else + echo "ERROR: $backup_files doesn't exist" + exit 1 fi -echo "ERROR: $backup_files and $backup_sql don't exist" -exit 1 +echo "ERROR: Unhandled case" +exit 1 \ No newline at end of file