#!/bin/bash
#
# Wrapper for vcbRestore backup tool
#
# (C) 2005-2007 VMware, Inc. All rights reserved.

hostd_libs=/usr/lib/vmware/hostd
vcb_libs=/usr/lib/vmware/vcb

cfg=${VCB_CONFIG_FILE:-"/etc/vmware/backuptools.conf"}

. "$vcb_libs/plugins/lib"
. "$vcb_libs/plugins/vm-convert"

if [ -e "$cfg" ] ; then
    . "$cfg"
fi

export HOST_THUMBPRINT

#
# Description:
# Runs vcbRestore. Takes care of converting legacy VMs backed up with
# vmsnap.pl. Calls transport plugins to handle scp and potentially
# other transport mechanism.
#
# Arguments:
# None. Uses global variables set by argument interception.
#
# Result:
# 0 on success != 0 on failure.
#
function run_restore
{
    local workdir
    local prefix
    local sane_path
    local rv
    local result
    local have_legacy_vm
    local legacy_dir
    local legacy_result=0

    if [ -n "$SOURCEDIR" ] ; then
	prefix=`check_transport_plugin "$SOURCEDIR"`
	rv=$?
	if [ "$rv" != "0" ] ; then
	    return $rv
	fi
	load_transport_plugin "$prefix"
	sane_path=`remove_transport_prefix "$SOURCEDIR"`
	workdir=`${prefix}_get "$sane_path" fullvm`
	rv=$?
	if [ "$rv" != "0" ] ; then
	    echo "Could not obtain VM data using ${prefix}." >&2
	    return 10
	fi

	# Now see if we are dealing with a legacy VM
	is_legacy_vm "$workdir"
	have_legacy_vm=$?

	case $have_legacy_vm in 
	0) # We are trying to import a legacy VM
	   legacy_dir=`convert_legacy_vm "$workdir"`
	   legacy_result=$?
	   ;;
	1) # We are importing a stock ESX 3.x VM
	   legacy_dir="$workdir"
	   legacy_result=0
	   ;;
	2) # $workdir does not contain anything that makes sense
	   legacy_result=1
	   ;;
	esac
    fi

    if [ "$legacy_result" = "0" ] ; then
	local arg
	if [ -n "$VCHOST" ] ; then
	    arg=$arg" -h \"\$VCHOST\""
	fi
	if [ -n "$USERNAME" ] ; then
	    arg=$arg" -u \"\$USERNAME\""
	fi
	if [ -n "$DATASTORE" ] ; then
	    arg=$arg" -C \"\$DATASTORE\""
	fi
	if [ -n "$legacy_dir" ] ; then
	    arg=$arg" -s \"\$legacy_dir\""
	fi

	if have_password ; then
	    eval LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$hostd_libs" \
		 VCB_PASSWORD='"$PASSWORD"' \
		"$vcb_libs/vcbRestore" $arg "$UNPARSED_ARGUMENTS"
	    result=$?
	else
	    eval LD_LIBRARY_PATH="$LD_LIBRARY_PATH":"$hostd_libs" \
		"$vcb_libs/vcbRestore" $arg "$UNPARSED_ARGUMENTS"
	    result=$?
	fi
    else
	# We did not find anything we can restore
	result=10
    fi

    if [ -n "$SOURCEDIR" ] ; then
	if [ "$have_legacy_vm" = "0" ] ; then
	    if [ "$legacy_result" = "0" ] ; then
		rm -fr "$legacy_dir"
	    else
		result=10
	    fi
	fi

	${prefix}_get_done "$workdir"
    fi

    return $result
}

intercept_arguments "h:u:p:C:s:" "$@"
if [ -n "${INTERCEPT_h}" ] ; then 
    VCHOST="${INTERCEPT_h}"
fi
if [ -n "${INTERCEPT_u}" ] ; then 
    USERNAME="${INTERCEPT_u}"
fi
if [ "${VCB_PASSWORD+EXISTS}" = "EXISTS" ] ; then
    PASSWORD="${VCB_PASSWORD}"
else
    if [ "${INTERCEPT_p+EXISTS}" = "EXISTS" ] ; then
	PASSWORD="${INTERCEPT_p}"
    fi
fi
if [ -n "${INTERCEPT_C}" ] ; then 
    DATASTORE="${INTERCEPT_C}"
fi
SOURCEDIR="${INTERCEPT_s}"
run_restore


    
