#!/bin/bash
# Maintainer: Martin Weise <martin.weise@tuwien.ac.at>
# Short:      Create Analyst-VM
# Synopsis:   ./bin/analyst-create
# id=$ID -e type=$TYPE -e internal_name=$INTERNAL_NAME -e virthost_name=$1
function usage () {
  echo "USAGE: $0 username"
}

if [ $# -ne 1 ]; then
  usage
  exit 1
fi

echo -e "VM CREATE [Start] **************************************************************"
ANALYST_ID=$(ssh -i ~/.ssh/id_hypervisor_rsa -n root@proinstaller "/opt/users/bin/add_vm ${1} analyst 100")
if [[ $? -ne 0 ]]; then
  echo -e "\e[91mfailed: PROinstaller not responded correctly: $ANALYST_ID\e[39m"
  exit 4
fi
ANALYST_VIRTHOST_NAME="ossdipanalyst${ANALYST_ID}"
ANALYST_NETWORK_NAME="anaanalyst${ANALYST_ID}"
DESKTOP_ID=$(LANG="en_US.UTF-8" ssh -i ~/.ssh/id_hypervisor_rsa -n root@proinstaller "/opt/users/bin/add_vm ${1} desktop 100")
if [[ $? -ne 0 ]]; then
  echo -e "\e[91mfailed: PROinstaller not responded correctly: $DESKTOP_ID\e[39m"
  exit 4
fi
DESKTOP_VIRTHOST_NAME="ossdipdesktop${DESKTOP_ID}"
DESKTOP_NETWORK_NAME="vncdesktop${DESKTOP_ID}"
if [[ $ANALYST_ID -lt 0 ]]; then
  echo -e "\e[91mfailed: analyst id is invalid: $ANALYST_ID\e[39m"
  exit 2
fi
if [[ $DESKTOP_ID -lt 0 ]]; then
  echo -e "\e[91mfailed: desktop id is invalid: $DESKTOP_ID\e[39m"
  exit 3
fi
echo -e "\e[92mok: [localhost]\e[39m\n"
# Templating cannot be (well) done in Ansible
echo -e "VM CREATE [Fill out Analyst-VM template] ***************************************"
cp ./resources/ossdipdesktop/desktop_ks.cfg.example "./resources/ossdipanalyst/${ANALYST_VIRTHOST_NAME}_ks.cfg"
sed -i "s/MACHINE_NAME/$ANALYST_VIRTHOST_NAME/g" "./resources/ossdipanalyst/${ANALYST_VIRTHOST_NAME}_ks.cfg"
sed -i "s/USER_NAME/$1/g" "./resources/ossdipanalyst/${ANALYST_VIRTHOST_NAME}_ks.cfg"
echo -e "\e[92mok: [localhost]\e[39m\n"
echo -e "VM CREATE [Fill out Remote Desktop-VM template] ********************************"
cp ./resources/ossdipdesktop/desktop_ks.cfg.example "./resources/ossdipdesktop/${DESKTOP_VIRTHOST_NAME}_ks.cfg"
sed -i "s/MACHINE_NAME/$DESKTOP_VIRTHOST_NAME/g" "./resources/ossdipdesktop/${DESKTOP_VIRTHOST_NAME}_ks.cfg"
sed -i "s/USER_NAME/$1/g" "./resources/ossdipdesktop/${DESKTOP_VIRTHOST_NAME}_ks.cfg"
echo -e "\e[92mok: [localhost]\e[39m\n"

# Ansible makes the rest
ansible-playbook ./create-analyst-vm.yml -e username=$1 -e desktop_virthost_name=$DESKTOP_VIRTHOST_NAME \
  -e desktop_network_name=$DESKTOP_NETWORK_NAME -e analyst_virthost_name=$ANALYST_VIRTHOST_NAME \
  -e analyst_network_name=$ANALYST_NETWORK_NAME -e analyst_id=$ANALYST_ID -e desktop_id=$DESKTOP_ID

status=$?
if [ $status -eq 0 ]; then
  echo -e "VM CREATE [Done] ***************************************************************"
  echo -e "\e[92mok: [localhost]\e[39m\n"
  cat /tmp/credentials.txt
  exit 0
else
  echo -e "VM CREATE [Done] ***************************************************************"
  echo -e "\e[91mfailed: playbook returned non-zero exit code\e[39m"
  exit 1
fi
