backup-docker/vvv.sh

122 lines
2.9 KiB
Bash
Executable File

#!/bin/bash
#set -o xtrace
set -u
set -o pipefail
usage () {
printf "Usage: vvv.sh <project>\n"
printf " project = Compose project folder.\n"
printf " Option r: restore operation\n"
printf " Option d: keep containers down - don't bring back up\n"
}
RESTORE="false"
DOWN="false"
OUTPUT=""
while getopts ':rd' OPT; do
case $OPT in
r) RESTORE="true"; OUTPUT="${OUTPUT} Option: RESTORE OPERATION";;
d) DOWN="true"; OUTPUT="${OUTPUT} Option: KEEP DOWN";;
\?) usage; exit;;
esac
done
shift $((OPTIND -1))
if [[ $RESTORE == "true" ]] && [[ ! -f docker-restore.sh ]]; then
echo "Problem: docker-restore.sh missing!"
exit 1
fi
scripts () {
for MODE in backup restore; do
FILE="docker-${MODE}.sh"
SCRIPT="#!/bin/bash"$'\n'
SCRIPT="${SCRIPT}sudo docker run --rm \\"$'\n'
SCRIPT="${SCRIPT} --name volumerize \\"$'\n'
SCRIPT="${SCRIPT} -e TZ=Australia/Perth \\"$'\n'
SCRIPT="${SCRIPT} -e VOLUMERIZE_SOURCE=/source \\"$'\n'
SCRIPT="${SCRIPT} -e VOLUMERIZE_TARGET=file:///backup \\"$'\n'
SCRIPT="${SCRIPT} -v backup_${PROJECT}-cache:/volumerize-cache \\"$'\n'
if [[ $MODE == "restore" ]]; then
SCRIPT="${SCRIPT} -v backup_${PROJECT}-volume:/backup:ro \\"$'\n'
for VOL in $VOLUMES; do
SCRIPT="${SCRIPT} -v ${VOL}:/source/${VOL} \\"$'\n'
done
SCRIPT="${SCRIPT} blacklabelops/volumerize:1.7.1 restore"$'\n'$'\n'
elif [[ $MODE == "backup" ]]; then
SCRIPT="${SCRIPT} -v backup_${PROJECT}-volume:/backup \\"$'\n'
for VOL in $VOLUMES; do
SCRIPT="${SCRIPT} -v ${VOL}:/source/${VOL}:ro \\"$'\n'
done
SCRIPT="${SCRIPT} blacklabelops/volumerize:1.7.1 backup"$'\n'$'\n'
else
printf "Fatal error 1.\n"
exit 1
fi
printf "${SCRIPT}" > "${FILE}"
chmod +x "${FILE}"
done
}
if [[ $# -lt 1 ]]; then
usage
exit 1
fi
PROJECT="$1"
if [[ ! -d "../${PROJECT}" ]]; then
printf "Folder ${1} does not exist!\n"
exit 1
fi
VOLUMES="$(sudo ls /var/lib/docker/volumes |grep "${PROJECT}_")"
if [[ -z "$VOLUMES" ]]; then
printf "There are no volumes found to backup/restore!\n"
exit 1
fi
pushd "../${PROJECT}" > /dev/null || exit 1
if [[ ! $RESTORE == "true" ]]; then
scripts
fi
COMMAND="sudo docker compose stop"
printf "${COMMAND}\n"
${COMMAND}
if ! ${COMMAND}; then
printf "Services 'docker compose stop' error."
exit 1
fi
COMMAND="sudo docker compose rm -f"
printf "${COMMAND}\n"
${COMMAND}
if ! ${COMMAND}; then
printf "Services 'docker compose rm' error."
exit 1
fi
if [[ $RESTORE == "true" ]]; then
"./docker-restore.sh"
else
"./docker-backup.sh"
if [[ $DOWN = "false" ]]; then
COMMAND="sudo docker compose up -d"
printf "${COMMAND}\n"
if ! ${COMMAND}; then
printf "Services 'up' error."
exit 1
fi
fi
fi
COMMAND="sudo docker compose up -d"
printf "${COMMAND}\n"
if ! ${COMMAND}; then
printf "Services 'up' error."
exit 1
fi
popd > /dev/null || exit 1