From 6df3a61c1976f7ce57080ddc530fa800d2ba12c2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Jun 2019 21:57:28 -0300 Subject: Restore from backup in fresh volume --- scripts/box/create-backup.env.sh | 14 ++++++++++++++ scripts/box/restore-backup.env.sh | 18 ++++++++++++++++++ scripts/box/run-backup.env.sh | 13 ------------- scripts/ci/provision.sh | 35 ++++++++++++++++++++++++++--------- 4 files changed, 58 insertions(+), 22 deletions(-) create mode 100755 scripts/box/create-backup.env.sh create mode 100755 scripts/box/restore-backup.env.sh delete mode 100755 scripts/box/run-backup.env.sh (limited to 'scripts') diff --git a/scripts/box/create-backup.env.sh b/scripts/box/create-backup.env.sh new file mode 100755 index 0000000..c9b2d3d --- /dev/null +++ b/scripts/box/create-backup.env.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash + +export BORG_REMOTE_PATH="${BORG_REMOTE_PATH}" +export BORG_PASSPHRASE="${BORG_PASSPHRASE}" +# The configured $BORG_REPO is already the rsync remote. +# No need to send the files after the backup is done. +echo xiu +borg create \ + --verbose \ + --stats \ + --progress \ + --compression lzma,6 \ + "${BORG_REPO}::{hostname}-{now}-${VPS_COMMIT_SHA}" \ + ${VOLUME_HOME}/* diff --git a/scripts/box/restore-backup.env.sh b/scripts/box/restore-backup.env.sh new file mode 100755 index 0000000..b12d4f0 --- /dev/null +++ b/scripts/box/restore-backup.env.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash + +export BORG_REMOTE_PATH="${BORG_REMOTE_PATH}" +export BORG_PASSPHRASE="${BORG_PASSPHRASE}" + +pushd "$(mktemp -d)" +ARCHIVE="$(borg list "${BORG_REPO}" --last 1 --short)" + +echo "Extracting archive ${ARCHIVE}" +borg extract \ + --verbose \ + --stats \ + --progress \ + "${BORG_REPO}"::"${ARCHIVE}" +echo "Done." + +mv home/vps/volumes/* /home/vps/volumes/ +popd diff --git a/scripts/box/run-backup.env.sh b/scripts/box/run-backup.env.sh deleted file mode 100755 index bd506e9..0000000 --- a/scripts/box/run-backup.env.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -export BORG_REMOTE_PATH="${BORG_REMOTE_PATH}" -export BORG_PASSPHRASE="${BORG_PASSPHRASE}" -# The configured $BORG_REPO is already the rsync remote. -# No need to send the files after the backup is done. -borg create \ - --verbose \ - --stats \ - --progress \ - --compression lzma,6 \ - "${BORG_REPO}::{hostname}-{now}-${VPS_COMMIT_SHA}" \ - "${VOLUME_HOME}" diff --git a/scripts/ci/provision.sh b/scripts/ci/provision.sh index 1000a55..87bb4c5 100755 --- a/scripts/ci/provision.sh +++ b/scripts/ci/provision.sh @@ -8,25 +8,38 @@ cd ../../ VPS_COMMIT_SHA="$(git rev-parse HEAD)" export VPS_COMMIT_SHA +# FIXME: use Ansible instead +setup_borg_files() { + local -r template_file="${1}" + local -r destination_name="${2}" + scp ./secrets/borg/borg-remote.pub "$TLD":/root/.ssh/id_rsa.pub + scp ./secrets/borg/borg-remote "$TLD":/root/.ssh/id_rsa + scp ./secrets/borg/known-hosts.txt "$TLD":/root/.ssh/known_hosts + ssh "$TLD" 'chmod 600 /root/.ssh/id_rsa' + envsubst < "${template_file}" | ssh "$TLD" "cat > /home/vps/${destination_name} && chmod +x /home/vps/${destination_name}" + ssh "$TLD" "chmod +x /home/vps/${destination_name}" +} + echo "Shutting down running containers and backing up data..." ssh "$TLD" "cd /home/vps/ && docker-compose down" -scp ./secrets/borg/borg-remote.pub "$TLD":/root/.ssh/id_rsa.pub -scp ./secrets/borg/borg-remote "$TLD":/root/.ssh/id_rsa -scp ./secrets/borg/known-hosts.txt "$TLD":/root/.ssh/known_hosts -ssh "$TLD" 'chmod 600 /root/.ssh/id_rsa' -envsubst < ./scripts/box/run-backup.env.sh | ssh "$TLD" 'cat > /home/vps/run-backup.sh && chmod +x /home/vps/run-backup.sh' -ssh "$TLD" /home/vps/run-backup.sh +setup_borg_files ./scripts/box/create-backup.env.sh create-backup.sh +ssh "$TLD" /home/vps/create-backup.sh echo "Done." -echo "Running 'terraform plan' and storing the planfile..." +echo "Initializing Terraform..." terraform --version terraform init +echo "Done." + +echo "Destroying existing infrastructure..." +terraform destroy -input=false -auto-approve +echo "Done." + +echo "Running 'terraform plan' and storing the planfile..." mkdir -p "../vps-state/secrets/plan-files/" PLAN_FILE_NAME="$(date -Iseconds)-$VPS_COMMIT_SHA.tfplan" PLAN_FILE_PATH="../vps-state/secrets/plan-files/$PLAN_FILE_NAME" - terraform plan -input=false -out="$PLAN_FILE_PATH" - pushd ../vps-state/ git add "secrets/plan-files/$PLAN_FILE_NAME" git commit -m "CI: add .tfplan plan file for CI run $VPS_COMMIT_SHA" @@ -46,6 +59,10 @@ git push origin master popd echo "Done." +echo "Restoring data from backup into volume..." +setup_borg_files ./scripts/box/restore-backup.env.sh restore-backup.sh +echo "Done." + echo "Running the Ansible playbook..." ansible-playbook provision.yaml echo "Done." -- cgit v1.2.3