#!/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 "-v|--vm vm name" echo "-h|--host host name" echo "Example:" echo "drbl_VM_migrate -l -v pc131 -h pc102" } # [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 check_drbl_vm