#!/usr/bin/env bash

# Before running this:
# - Stop mysql on the instance
# - Unmount /mnt/data

# After running this:
# - Delete the old data ebs volume (we could do it here but, you know, things go wrong)

# Get prod data volume and running instance info
VOLUME=$(aws ec2 describe-volumes --filters Name=attachment.device,Values='/dev/sdb' Name=tag:service_name,Values=statementdb Name=tag:environment,Values=prod --region us-east-1 --query 'Volumes[0].VolumeId')
INSTANCE_ID=$(aws ec2 describe-instances --filters Name=tag:service_name,Values=statementdb Name=tag:environment,Values=qa --region us-east-1  --query 'Reservations[*].Instances[0].InstanceId' --output text)
INSTANCE_AZ=$(aws ec2 describe-instances --filters Name=tag:service_name,Values=statementdb Name=tag:environment,Values=qa --region us-east-1  --query 'Reservations[*].Instances[0].Placement.AvailabilityZone' --output text)

# Detach and delete the old QA data volume
OLD_QA_VOLUME=$(aws ec2 describe-volumes --filters Name=attachment.device,Values='/dev/sdb' Name=tag:service_name,Values=statementdb Name=tag:environment,Values=qa --region us-east-1 --query 'Volumes[0].VolumeId' --output text)
aws ec2 detach-volume --volume-id "${OLD_QA_VOLUME}" --force --instance-id "${INSTANCE_ID}" --region us-east-1

# Pick a recent snapshot
SNAPSHOT_DATE=$(date -v -2d '+%Y-%m-%d')
SNAPSHOT_ID=$(aws ec2 describe-snapshots --output text --filters Name=volume-id,Values="${VOLUME}" --region us-east-1 --query "Snapshots[?(StartTime>='${SNAPSHOT_DATE}')].[SnapshotId] | [0]")

# Create the new QA volume
NEW_VOLUME=$(aws ec2 create-volume --encrypted --availability-zone "${INSTANCE_AZ}" --snapshot-id "${SNAPSHOT_ID}" --tag-specifications 'ResourceType=volume,Tags=[{Key=Name,Value=qa-mysql-statementdb01},{Key=environment,Value=qa},{Key=service_name,Value=statementdb}]' --volume-type gp3 --query 'VolumeId' --region us-east-1 --output text)

echo "waiting for volume to be created, so let's lazily sleep for a bit"
sleep 120

# And now attach the volume to the running QA instance
aws ec2 attach-volume --volume-id "${NEW_VOLUME}" --instance-id "${INSTANCE_ID}" --device '/dev/sdb' --region us-east-1
