#!/bin/bash
set -e

# Setup ENV
source ~/cloud-env.sh

echo export REGION_NAME=${REGION_NAME} >> ~/cloud-env.sh


HOST_AZ1PD1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az1pd1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ1PD2_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az1pd2" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ2PD1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az2pd1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ2PD2_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az2pd2" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ1KV1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az1kv1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ1KV2_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az1kv2" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ2KV1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az2kv1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ2KV2_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az2kv2" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ1DB1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az1db1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ2DB1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az2db1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ1MONITOR1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az1monitor1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

HOST_AZ2MONITOR1_AZ=`aws ec2 describe-instances \
--filter "Name=instance-state-name,Values=running" "Name=tag:role,Values=az2monitor1" "Name=tag:trainer,Values=${USER_UNIQUE_TAG}" \
--query "Reservations[0].Instances[0].Placement.AvailabilityZone" \
--output text \
--region ${REGION_CODE}`

echo export HOST_AZ1MONITOR1_PRIVATE_IP=${HOST_AZ1MONITOR1_PRIVATE_IP} > ./hosts-env.sh
echo export HOST_AZ1MONITOR1_PUBLIC_IP=${HOST_AZ1MONITOR1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ1MONITOR1_AZ=${HOST_AZ1MONITOR1_AZ} >> ./hosts-env.sh
echo export HOST_AZ2MONITOR1_PRIVATE_IP=${HOST_AZ2MONITOR1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ2MONITOR1_PUBLIC_IP=${HOST_AZ2MONITOR1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ2MONITOR1_AZ=${HOST_AZ2MONITOR1_AZ} >> ./hosts-env.sh
echo export HOST_CM_PRIVATE_IP=${HOST_AZ1MONITOR1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_CM_PUBLIC_IP=${HOST_AZ1MONITOR1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ1PD1_PRIVATE_IP=${HOST_AZ1PD1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ1PD1_PUBLIC_IP=${HOST_AZ1PD1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ1PD1_AZ=${HOST_AZ1PD1_AZ} >> ./hosts-env.sh
echo export HOST_AZ1PD2_PRIVATE_IP=${HOST_AZ1PD2_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ1PD2_PUBLIC_IP=${HOST_AZ1PD2_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ1PD2_AZ=${HOST_AZ1PD2_AZ} >> ./hosts-env.sh
echo export HOST_AZ2PD1_PRIVATE_IP=${HOST_AZ2PD1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ2PD1_PUBLIC_IP=${HOST_AZ2PD1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ2PD1_AZ=${HOST_AZ2PD1_AZ} >> ./hosts-env.sh
echo export HOST_AZ2PD2_PRIVATE_IP=${HOST_AZ2PD2_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ2PD2_PUBLIC_IP=${HOST_AZ2PD2_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ2PD2_AZ=${HOST_AZ2PD2_AZ} >> ./hosts-env.sh
echo export HOST_AZ1DB1_PRIVATE_IP=${HOST_AZ1DB1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ1DB1_PUBLIC_IP=${HOST_AZ1DB1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ1DB1_AZ=${HOST_AZ1DB1_AZ} >> ./hosts-env.sh
echo export HOST_AZ2DB1_PRIVATE_IP=${HOST_AZ2DB1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ2DB1_PUBLIC_IP=${HOST_AZ2DB1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ2DB1_AZ=${HOST_AZ2DB1_AZ} >> ./hosts-env.sh
echo export HOST_AZ1KV1_PRIVATE_IP=${HOST_AZ1KV1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ1KV1_PUBLIC_IP=${HOST_AZ1KV1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ1KV1_AZ=${HOST_AZ1KV1_AZ} >> ./hosts-env.sh
echo export HOST_AZ1KV2_PRIVATE_IP=${HOST_AZ1KV2_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ1KV2_PUBLIC_IP=${HOST_AZ1KV2_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ1KV2_AZ=${HOST_AZ1KV2_AZ} >> ./hosts-env.sh
echo export HOST_AZ2KV1_PRIVATE_IP=${HOST_AZ2KV1_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ2KV1_PUBLIC_IP=${HOST_AZ2KV1_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ2KV1_AZ=${HOST_AZ2KV1_AZ} >> ./hosts-env.sh
echo export HOST_AZ2KV2_PRIVATE_IP=${HOST_AZ2KV2_PRIVATE_IP} >> ./hosts-env.sh
echo export HOST_AZ2KV2_PUBLIC_IP=${HOST_AZ2KV2_PUBLIC_IP} >> ./hosts-env.sh
echo export HOST_AZ2KV2_AZ=${HOST_AZ2KV2_AZ} >> ./hosts-env.sh

source ./hosts-env.sh

echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ1PD1_PRIVATE_IP} > ./ssh-to-az1pd1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ1PD2_PRIVATE_IP} > ./ssh-to-az1pd2.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ2PD1_PRIVATE_IP} > ./ssh-to-az2pd1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ2PD2_PRIVATE_IP} > ./ssh-to-az2pd2.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ1DB1_PRIVATE_IP} > ./ssh-to-az1db1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ2DB1_PRIVATE_IP} > ./ssh-to-az2db1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ1MONITOR1_PRIVATE_IP} > ./ssh-to-az1monitor1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ2MONITOR1_PRIVATE_IP} > ./ssh-to-az2monitor1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ1KV1_PRIVATE_IP} > ./ssh-to-az1kv1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ1KV2_PRIVATE_IP} > ./ssh-to-az1kv2.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ2KV1_PRIVATE_IP} > ./ssh-to-az2kv1.sh
echo ssh -i ~/.ssh/pe-class-key-${REGION_NAME}.pem ${HOST_AZ2KV2_PRIVATE_IP} > ./ssh-to-az2kv2.sh
chmod +x ./*.sh

# Setup 11 Nodes TiDB Cluster Topology
cp ./template-dr-auto-sync.yaml ./dr-auto-sync.yaml
sed -i'' \
  -e "s/<HOST_AZ1PD1_PUBLIC_IP>/${HOST_AZ1PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD2_PUBLIC_IP>/${HOST_AZ1PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD1_PUBLIC_IP>/${HOST_AZ2PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD2_PUBLIC_IP>/${HOST_AZ2PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD1_PRIVATE_IP>/${HOST_AZ1PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1PD2_PRIVATE_IP>/${HOST_AZ1PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD1_PRIVATE_IP>/${HOST_AZ2PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD2_PRIVATE_IP>/${HOST_AZ2PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV1_PRIVATE_IP>/${HOST_AZ1KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV2_PRIVATE_IP>/${HOST_AZ1KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV1_PRIVATE_IP>/${HOST_AZ2KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV2_PRIVATE_IP>/${HOST_AZ2KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1DB1_PRIVATE_IP>/${HOST_AZ1DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2DB1_PRIVATE_IP>/${HOST_AZ2DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PRIVATE_IP>/${HOST_AZ1MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PUBLIC_IP>/${HOST_AZ1MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PRIVATE_IP>/${HOST_AZ2MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PUBLIC_IP>/${HOST_AZ2MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_BD1_AZ>/${HOST_BD1_AZ}/g" \
  -e "s/<HOST_BD2_AZ>/${HOST_BD2_AZ}/g" \
  ./dr-auto-sync.yaml 2>/dev/null

# Setup majority-DC2
cp ./template-majority-DC2.yaml ./majority-DC2.yaml
sed -i'' \
  -e "s/<TIDB_VERSION>/${TIDB_VERSION}/g" \
  -e "s/<HOST_AZ1PD1_PUBLIC_IP>/${HOST_AZ1PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD2_PUBLIC_IP>/${HOST_AZ1PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD1_PUBLIC_IP>/${HOST_AZ2PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD2_PUBLIC_IP>/${HOST_AZ2PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD1_PRIVATE_IP>/${HOST_AZ1PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1PD2_PRIVATE_IP>/${HOST_AZ1PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD1_PRIVATE_IP>/${HOST_AZ2PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD2_PRIVATE_IP>/${HOST_AZ2PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV1_PRIVATE_IP>/${HOST_AZ1KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV2_PRIVATE_IP>/${HOST_AZ1KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV1_PRIVATE_IP>/${HOST_AZ2KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV2_PRIVATE_IP>/${HOST_AZ2KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1DB1_PRIVATE_IP>/${HOST_AZ1DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2DB1_PRIVATE_IP>/${HOST_AZ2DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PRIVATE_IP>/${HOST_AZ1MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PUBLIC_IP>/${HOST_AZ1MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PRIVATE_IP>/${HOST_AZ2MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PUBLIC_IP>/${HOST_AZ2MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_BD1_AZ>/${HOST_BD1_AZ}/g" \
  -e "s/<HOST_BD2_AZ>/${HOST_BD2_AZ}/g" \
  ./majority-DC2.yaml 2>/dev/null

# Setup scale-out-pd
cp ./template-scale-out-pd.yaml ./scale-out-pd.yaml
sed -i'' \
  -e "s/<HOST_AZ1PD1_PUBLIC_IP>/${HOST_AZ1PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD2_PUBLIC_IP>/${HOST_AZ1PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD1_PUBLIC_IP>/${HOST_AZ2PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD2_PUBLIC_IP>/${HOST_AZ2PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD1_PRIVATE_IP>/${HOST_AZ1PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1PD2_PRIVATE_IP>/${HOST_AZ1PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD1_PRIVATE_IP>/${HOST_AZ2PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD2_PRIVATE_IP>/${HOST_AZ2PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV1_PRIVATE_IP>/${HOST_AZ1KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV2_PRIVATE_IP>/${HOST_AZ1KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV1_PRIVATE_IP>/${HOST_AZ2KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV2_PRIVATE_IP>/${HOST_AZ2KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1DB1_PRIVATE_IP>/${HOST_AZ1DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2DB1_PRIVATE_IP>/${HOST_AZ2DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PRIVATE_IP>/${HOST_AZ1MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PUBLIC_IP>/${HOST_AZ1MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PRIVATE_IP>/${HOST_AZ2MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PUBLIC_IP>/${HOST_AZ2MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_BD1_AZ>/${HOST_BD1_AZ}/g" \
  -e "s/<HOST_BD2_AZ>/${HOST_BD2_AZ}/g" \
  ./scale-out-pd.yaml 2>/dev/null

cp ./template-scale-out-DC1.yaml ./scale-out-DC1.yaml
sed -i'' \
  -e "s/<HOST_AZ1PD1_PUBLIC_IP>/${HOST_AZ1PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD2_PUBLIC_IP>/${HOST_AZ1PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD1_PUBLIC_IP>/${HOST_AZ2PD1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2PD2_PUBLIC_IP>/${HOST_AZ2PD2_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ1PD1_PRIVATE_IP>/${HOST_AZ1PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1PD2_PRIVATE_IP>/${HOST_AZ1PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD1_PRIVATE_IP>/${HOST_AZ2PD1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2PD2_PRIVATE_IP>/${HOST_AZ2PD2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV1_PRIVATE_IP>/${HOST_AZ1KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1KV2_PRIVATE_IP>/${HOST_AZ1KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV1_PRIVATE_IP>/${HOST_AZ2KV1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2KV2_PRIVATE_IP>/${HOST_AZ2KV2_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1DB1_PRIVATE_IP>/${HOST_AZ1DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2DB1_PRIVATE_IP>/${HOST_AZ2DB1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PRIVATE_IP>/${HOST_AZ1MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ1MONITOR1_PUBLIC_IP>/${HOST_AZ1MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PRIVATE_IP>/${HOST_AZ2MONITOR1_PRIVATE_IP}/g" \
  -e "s/<HOST_AZ2MONITOR1_PUBLIC_IP>/${HOST_AZ2MONITOR1_PUBLIC_IP}/g" \
  -e "s/<HOST_BD1_AZ>/${HOST_BD1_AZ}/g" \
  -e "s/<HOST_BD2_AZ>/${HOST_BD2_AZ}/g" \
  ./scale-out-DC1.yaml 2>/dev/null

echo "11 nodes are prepared for user ${USER_UNIQUE_TAG}." > MONITOR_PREPARE_DONE

rm -rf /home/ec2-user/template-*
