aboutsummaryrefslogtreecommitdiff
path: root/scripts
diff options
context:
space:
mode:
authorEuAndreh <eu@euandre.org>2019-06-05 21:57:28 -0300
committerEuAndreh <eu@euandre.org>2019-06-05 21:57:28 -0300
commit6df3a61c1976f7ce57080ddc530fa800d2ba12c2 (patch)
treefd8aa35db5a38780604f476ba4e1c8306a6dc370 /scripts
parentAdd Ansible to shell derivation (diff)
downloadserver-6df3a61c1976f7ce57080ddc530fa800d2ba12c2.tar.gz
server-6df3a61c1976f7ce57080ddc530fa800d2ba12c2.tar.xz
Restore from backup in fresh volume
Diffstat (limited to 'scripts')
-rwxr-xr-xscripts/box/create-backup.env.sh (renamed from scripts/box/run-backup.env.sh)3
-rwxr-xr-xscripts/box/restore-backup.env.sh18
-rwxr-xr-xscripts/ci/provision.sh35
3 files changed, 46 insertions, 10 deletions
diff --git a/scripts/box/run-backup.env.sh b/scripts/box/create-backup.env.sh
index bd506e9..c9b2d3d 100755
--- a/scripts/box/run-backup.env.sh
+++ b/scripts/box/create-backup.env.sh
@@ -4,10 +4,11 @@ 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}"
+ ${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/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."