1
1
Fork 1
sovereign-stack/deployment/down.sh

151 lines
4.3 KiB
Bash
Executable File

#!/bin/bash
# https://www.sovereign-stack.org/ss-down/
set -exu
cd "$(dirname "$0")"
if lxc remote get-default -q | grep -q "local"; then
echo "ERROR: you are on the local lxc remote. Nothing to take down"
exit 1
fi
PURGE_STORAGE_VOLUMES=false
OTHER_SITES_LIST=
NON_INTERACTIVE_MODE=false
LNPLAY_ENV_FILE_PATH=
# grab any modifications from the command line.
for i in "$@"; do
case $i in
--purge-storage-volumes=*)
PURGE_STORAGE_VOLUMES="${i#*=}"
shift
;;
--non-interactive)
NON_INTERACTIVE_MODE=true
shift
;;
--lnplay-env-path=*)
LNPLAY_ENV_FILE_PATH="${i#*=}"
shift
;;
*)
echo "Unexpected option: $1"
exit 1
esac
done
export NON_INTERACTIVE_MODE="$NON_INTERACTIVE_MODE"
. ./deployment_defaults.sh
. ./remote_env.sh
. ./defaults.env
. ./project_env.sh
# let's bring down services on the remote deployment if necessary.
export DOMAIN_NAME="$PRIMARY_DOMAIN"
export SITE_PATH="$SITES_PATH/$PRIMARY_DOMAIN"
source "$SITE_PATH/site.conf"
source ./project/domain_env.sh
source ./domain_list.sh
function deleteVM {
IP_V4_ADDRESS=
LXD_VM_NAME="$1"
FORCE_DELETE_VM="$3"
if lxc list | grep -q "$1"; then
if [ "$FORCE_DELETE_VM" = false ]; then
if [ -n "$WWW_SERVER_MAC_ADDRESS" ]; then
DOCKER_HOST="ssh://ubuntu@$PRIMARY_WWW_FQDN" ./project/www/stop_docker_stacks.sh
fi
if [ -n "$BTCPAY_SERVER_MAC_ADDRESS" ]; then
if wait-for-it -t 5 "$BTCPAY_SERVER_FQDN":22; then
ssh "$BTCPAY_SERVER_FQDN" "bash -c $BTCPAY_SERVER_APPPATH/btcpay-down.sh"
else
echo "ERROR: the remote BTCPAY Server is not available on ssh."
exit 1
fi
fi
if [ -n "$LNPLAY_SERVER_MAC_ADDRESS" ]; then
bash -c "./project/lnplay/down.sh --non-interactive=true --env-file=$LNPLAY_ENV_FILE_PATH"
fi
# if [ "$VIRTUAL_MACHINE" = www ] && [ "$BACKUP_WWW_APPS" = true ]; then
# APP_LIST="letsencrypt ghost nextcloud gitea nostr"
# echo "INFO: Backing up WWW apps."
# for APP in $APP_LIST; do
# bash -c "$(pwd)/project/www/backup_www.sh --app=$APP"
# done
# fi
IP_V4_ADDRESS="$(lxc list "$LXD_VM_NAME" --format csv --columns=4 | grep enp5s0 | grep -Eo '[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}')" || true
if lxc list -q --format csv | grep "$1" | grep -q RUNNING; then
lxc stop -f "$LXD_VM_NAME"
fi
lxc delete -f "$LXD_VM_NAME"
else
lxc delete -f "$LXD_VM_NAME"
fi
fi
# remove the ssh known endpoint else we get warnings.
ssh-keygen -R "$SSH_HOME/known_hosts" -R "$2.$3" >> /dev/null
if [ -n "$IP_V4_ADDRESS" ]; then
ssh-keygen -R "$SSH_HOME/known_hosts" -R "$IP_V4_ADDRESS" >> /dev/null
fi
if lxc profile list | grep -q "$1"; then
lxc profile delete "$1" >> /dev/null
fi
}
LXD_NAME=
if [ -n "$WWW_SERVER_MAC_ADDRESS" ]; then
LXD_NAME="${WWW_HOSTNAME//./-}-${PRIMARY_DOMAIN//./-}"
deleteVM "$LXD_NAME" "$WWW_HOSTNAME" "$PRIMARY_DOMAIN" false
fi
if [ -n "$BTCPAY_SERVER_MAC_ADDRESS" ]; then
LXD_NAME="${BTCPAY_HOSTNAME//./-}-${PRIMARY_DOMAIN//./-}"
deleteVM "$LXD_NAME" "$BTCPAY_HOSTNAME" "$PRIMARY_DOMAIN" false
fi
if [ -n "$LNPLAY_SERVER_MAC_ADDRESS" ]; then
LXD_NAME="${LNPLAY_SERVER_HOSTNAME//./-}-${PRIMARY_DOMAIN//./-}"
deleteVM "$LXD_NAME" "$LNPLAY_SERVER_HOSTNAME" "$PRIMARY_DOMAIN" true
fi
if [ "$PURGE_STORAGE_VOLUMES" = true ]; then
EXISTING_STORAGE_VOLUMES=$(lxc storage volume list ss-base -q --format csv)
if echo "$EXISTING_STORAGE_VOLUMES" | grep -q docker; then
lxc storage volume delete ss-base docker >> /dev/null
fi
if echo "$EXISTING_STORAGE_VOLUMES" | grep -q ss-data; then
lxc storage volume delete ss-base ss-data >> /dev/null
fi
if echo "$EXISTING_STORAGE_VOLUMES" | grep -q backup; then
lxc storage volume delete ss-base backup >> /dev/null
fi
if lxc network list -q | grep -q ss-ovn; then
lxc network delete ss-ovn
fi
fi