1
1
sovereign-stack/deployment/deploy_vm.sh

122 lines
4.4 KiB
Bash
Raw Normal View History

2023-04-07 14:23:04 +00:00
#!/bin/bash
2023-09-15 23:28:48 +00:00
set -exu
2023-04-07 14:23:04 +00:00
cd "$(dirname "$0")"
2023-04-07 18:02:24 +00:00
. ./base.sh
2023-04-07 14:23:04 +00:00
## This is a weird if clause since we need to LEFT-ALIGN the statement below.
SSH_STRING="Host ${FQDN}"
if ! grep -q "$SSH_STRING" "$SSH_HOME/config"; then
########## BEGIN
2023-04-12 14:09:47 +00:00
cat >> "$SSH_HOME/config" <<-EOF
2023-04-07 14:23:04 +00:00
${SSH_STRING}
HostName ${FQDN}
User ubuntu
EOF
###
fi
# if the machine doesn't exist, we create it.
2023-11-29 19:04:24 +00:00
if ! incus list --format csv | grep -q "$INCUS_VM_NAME"; then
2023-04-07 14:23:04 +00:00
# create a base image if needed and instantiate a VM.
if [ -z "$MAC_ADDRESS_TO_PROVISION" ]; then
2023-08-12 16:25:23 +00:00
echo "ERROR: You MUST define a MAC Address for all your machines in your project definition."
2023-04-07 14:23:04 +00:00
echo "INFO: IMPORTANT! You MUST have DHCP Reservations for these MAC addresses. You also need records established the DNS."
exit 1
fi
# TODO ensure we are only GROWING the volume--never shrinking per zfs volume docs.
BACKUP_DISK_SIZE_GB=
SSDATA_DISK_SIZE_GB=
DOCKER_DISK_SIZE_GB=
if [ "$VIRTUAL_MACHINE" = www ]; then
2023-12-14 17:47:16 +00:00
if [ "$SKIP_WWW_SERVER" = true ]; then
2023-08-12 16:14:00 +00:00
exit 0
fi
2023-04-07 14:23:04 +00:00
BACKUP_DISK_SIZE_GB="$WWW_BACKUP_DISK_SIZE_GB"
SSDATA_DISK_SIZE_GB="$WWW_SSDATA_DISK_SIZE_GB"
DOCKER_DISK_SIZE_GB="$WWW_DOCKER_DISK_SIZE_GB"
fi
if [ "$VIRTUAL_MACHINE" = btcpayserver ]; then
2023-12-14 17:47:16 +00:00
if [ "$SKIP_BTCPAY_SERVER" = true ]; then
2023-08-12 16:14:00 +00:00
exit 0
fi
BACKUP_DISK_SIZE_GB="$BTCPAYSERVER_BACKUP_DISK_SIZE_GB"
SSDATA_DISK_SIZE_GB="$BTCPAYSERVER_SSDATA_DISK_SIZE_GB"
DOCKER_DISK_SIZE_GB="$BTCPAYSERVER_DOCKER_DISK_SIZE_GB"
fi
2023-04-07 14:23:04 +00:00
2023-12-14 17:50:49 +00:00
SSDATA_VOLUME_NAME=
BACKUP_VOLUME_NAME=
if [ "$VIRTUAL_MACHINE" != lnplayserver ]; then
DOCKER_VOLUME_NAME="$VIRTUAL_MACHINE-docker"
if ! incus storage volume list ss-base | grep -q "$DOCKER_VOLUME_NAME"; then
incus storage volume create ss-base "$DOCKER_VOLUME_NAME" --type=block
incus storage volume set ss-base "$DOCKER_VOLUME_NAME" size="${DOCKER_DISK_SIZE_GB}GB"
2023-12-14 17:50:49 +00:00
fi
2023-04-07 14:23:04 +00:00
2023-12-14 17:50:49 +00:00
SSDATA_VOLUME_NAME="$VIRTUAL_MACHINE-ss-data"
if ! incus storage volume list ss-base | grep -q "$SSDATA_VOLUME_NAME"; then
incus storage volume create ss-base "$SSDATA_VOLUME_NAME" --type=filesystem
incus storage volume set ss-base "$SSDATA_VOLUME_NAME" size="${SSDATA_DISK_SIZE_GB}GB"
2023-12-14 17:50:49 +00:00
fi
2023-04-07 14:23:04 +00:00
2023-12-14 17:50:49 +00:00
BACKUP_VOLUME_NAME="$VIRTUAL_MACHINE-backup"
if ! incus storage volume list ss-base | grep -q "$BACKUP_VOLUME_NAME"; then
incus storage volume create ss-base "$BACKUP_VOLUME_NAME" --type=filesystem
incus storage volume set ss-base "$BACKUP_VOLUME_NAME" size="${BACKUP_DISK_SIZE_GB}GB"
2023-12-14 17:50:49 +00:00
fi
fi
2023-04-07 14:23:04 +00:00
2023-11-30 02:33:45 +00:00
bash -c "./stub_profile.sh --vm=$VIRTUAL_MACHINE --incus-hostname=$INCUS_VM_NAME --ss-volume-name=$SSDATA_VOLUME_NAME --backup-volume-name=$BACKUP_VOLUME_NAME"
2023-04-07 14:23:04 +00:00
2024-02-12 01:31:27 +00:00
INCUS_LNPLAYSERVER_IMAGE_NAME="lnplayserver-$DOMAIN_NAME"
if ! incus image list -q --format csv | grep -q "$INCUS_LNPLAYSERVER_IMAGE_NAME"; then
2024-02-09 16:31:09 +00:00
script -q -c "incus init -q $DOCKER_BASE_IMAGE_NAME $INCUS_VM_NAME --vm --profile=$INCUS_VM_NAME" /dev/null
2023-12-17 21:50:41 +00:00
elif [ "$VIRTUAL_MACHINE" = lnplayserver ]; then
2024-02-12 01:31:27 +00:00
script -q -c "incus init -q $INCUS_LNPLAYSERVER_IMAGE_NAME $INCUS_VM_NAME --vm --profile=$INCUS_VM_NAME" /dev/null
2023-12-17 21:50:41 +00:00
fi
2023-04-07 14:23:04 +00:00
# let's PIN the HW address for now so we don't exhaust IP
# and so we can set DNS internally.
2023-11-29 19:04:24 +00:00
incus config set "$INCUS_VM_NAME" "volatile.enp5s0.hwaddr=$MAC_ADDRESS_TO_PROVISION"
2023-04-07 14:23:04 +00:00
2023-12-14 17:50:49 +00:00
if [ "$VIRTUAL_MACHINE" != lnplayserver ]; then
# attack the docker block device.
incus storage volume attach ss-base "$DOCKER_VOLUME_NAME" "$INCUS_VM_NAME"
fi
2023-04-07 14:23:04 +00:00
# if [ "$VIRTUAL_MACHINE" = btcpayserver ]; then
# # attach any volumes
# for CHAIN in testnet mainnet; do
# for DATA in blocks chainstate; do
# MOUNT_PATH="/$CHAIN-$DATA"
2023-11-29 19:04:24 +00:00
# incus config device add "$INCUS_VM_NAME" "$CHAIN-$DATA" disk pool=ss-base source="$CHAIN-$DATA" path="$MOUNT_PATH"
2023-04-07 14:23:04 +00:00
# done
# done
# fi
2023-11-29 19:04:24 +00:00
incus start "$INCUS_VM_NAME"
2023-12-17 21:50:24 +00:00
sleep 15
2023-04-07 14:23:04 +00:00
2023-11-30 02:33:45 +00:00
bash -c "./wait_for_ip.sh --incus-name=$INCUS_VM_NAME"
2023-04-07 14:23:04 +00:00
# scan the remote machine and install it's identity in our SSH known_hosts file.
2023-04-12 14:05:25 +00:00
ssh-keyscan -H "$FQDN" >> "$SSH_HOME/known_hosts"
2023-04-07 14:23:04 +00:00
2023-12-14 17:50:49 +00:00
if [ "$VIRTUAL_MACHINE" != lnplayserver ]; then
ssh "$FQDN" "sudo chown ubuntu:ubuntu $REMOTE_DATA_PATH"
ssh "$FQDN" "sudo chown -R ubuntu:ubuntu $REMOTE_BACKUP_PATH"
fi
2023-04-07 14:23:04 +00:00
fi