#!/bin/bash

usage() {
    echo "usage: domain-lock [-l|-u|-s] [-n <vm name>] [-i <vm uuid>] [-p <physical host>] path"
    echo ""
    echo "-l    lock"
    echo "-u    unlock"
    echo "-s    status (default)"
    echo "-n    Virtual Machine name"
    echo "-i    Virtual Machine Id or UUID"
    echo "-p    Virtual Machine Server (physical host) name"
    echo "path  A per-VM, unique location where external lock will be managed"
    exit 1
}

create_lock() {
    local path=$1
    local name=$2
    local uuid=$3
    local host=$4

    path=$path/lock
    cat > $path <<EOF
$name $uuid $host
EOF
}

remove_lock(){
    local path=$1/lock

    rm -f $path
}

get_status() {
    local path=$1/lock

    [ -f $path ] || exit 1
    echo `cat $path`
}

mode="status"

while getopts ":lusn:i:p:" opt; do
    case $opt in
        l )
            mode="lock"
            ;;
	u )
	    mode="unlock"
	    ;;
	s )
            mode="status"
            ;;
	p )
            vm_host=$OPTARG
            ;;
	n )
            vm_name=$OPTARG
            ;;
	i )
            vm_uuid=$OPTARG
            ;;
	\? )
	    usage
            ;;
    esac
done

shift $(($OPTIND - 1))
vm_path=$1
[ -z $vm_path ] && usage

case $mode in
    lock )
        create_lock $vm_path $vm_name $vm_uuid $vm_host
        ;;
    unlock )
        remove_lock $vm_path
        ;;
    status )
        get_status $vm_path
	;;
esac
