#!/bin/bash
# Program:
#   Deploy PXE PV VM to DRBL client
# Author: 
#   Jazz, Rock {jazz, rock}@nchc.org.tw
# Version:
#    1.0
# History:                                                                                          
#   2010/08/27  Rock    First release (1.0) 

# [Source]
source /opt/drbl-virt/conf/drbl-virt.conf
source $Work_Path/functions_drbl_virt
#source ./functions_drbl_PXE_PV-VM_create


# [Declation]
# = 1. Varibales declation =
#vm_dir="/home/domains"
hypervisior=$(cat $Work_Home/etc/hypervisior)

# = 2. Functions declation =
Usage(){
echo "Usage: drbl_VM_migrate options"
echo "Options:"
echo "-l|--live           live migration"
echo "-h|--host           host name"
echo "-v|--vm             vm name"
echo "Example:"
echo "drbl_VM_migrate -l -h pc102 -v pc131"
}


# [Main]
check_root
# = 1. Parse parameters = 
if [ $# -eq 0 ]; then
Usage && exit
fi

while [ $# -gt 0 ]; do
    case "$1" in
        -h|--host)
            shift 
            if [ -z "$(echo $1 |grep ^-.)" ]; then
                if [ -n "$(echo $1)" ]; then
                    host="$1"
                else
                    echo "-h host value is null"
                    Usage && exit 2
                fi
            shift 
            fi 
            ;; 
        -v|--vm)
            shift 
            if [ -z "$(echo $1 |grep ^-.)" ]; then
                if [ -n "$(echo $1)" ]; then
                    vm="$1"
                else
                    echo "-v vm value is null"
                    Usage && exit 2
                fi  
            shift 
            fi  
            ;;
        -l|--live)
            shift
            xm_option="live"
            ;;
        -*)
            echo "$0 $1 invalid option" >&2
            echo ""
            Usage >&2
            exit 2
            ;;
        *)  Usage >&2
            exit 2
            ;;
    esac
done


# = 2. Check null value =
[ -z "$host" ] && echo "[Error] no host" && Usage && exit 2
[ -z "$vm" ] && echo "[Error] no vm" && Usage && exit 2


# = 3. ssh client to execute command  =
# check network
IP_status="online"
ping -c1 -w1 $host > /dev/null 2>&1 || IP_status="offline"

if [ $IP_status == "offline" ]; then
    echo "[Error] $host's network is offline !!!"
else
    host_hostnames="$(grep -v "#" $Work_Home/etc/IP_HOST_TABLE | awk '{print $2}')"

    for host_hostname in $host_hostnames
    do
        ssh -o StrictHostKeyChecking=no $host_hostname "xm list | grep $vm" > /tmp/vm_in_host_file$$
        vm_in_host=$(cat /tmp/vm_in_host_file$$)
        if [ -n "$vm_in_host" ]; then
            right_host=$host_hostname
            break
        fi
    echo "$host_name"
    done

    if [ -z $xm_option ]; then
        ssh -o StrictHostKeyChecking=no $right_host "xm migrate $vm $host"
    else
        ssh -o StrictHostKeyChecking=no $right_host "xm migrate --$xm_option $vm $host"
    fi
fi

rm /tmp/vm_in_host_file$$
check_drbl_VM 

