#!/bin/bash
#############################################
# VirtualBox vbox => template converter v0.1
# by ulisse aka A. Livio Beccaria
#
# It replaces some info in a vbox file to
# make it suitable to be used as a template
#############################################

# source folder
SRC_DIR="$(dirname $(readlink -f $0))"

#include common code
. ${SRC_DIR}/settings/common

[ "$#" -eq 2 ] || usage_vbox2template "Error: missing arguments."

IN_FILE=$1
VM_ID=$2

# include settings
. $SRC_DIR/settings/settings

# override settings variables
TMP_DIR="/var/tmp/vbox-user"
#IMG_HOME="/opt/test"
#SF_LINUX_TARGET="/home/target"
#SF_MEDIA_TARGET="/media/usb"

TPL_FILE=`basename -s .vbox ${IN_FILE}`-tpl.vbox

# prepare template
cp "$1" "${TPL_FILE}"

# SharedFolder
#sed -i 's:\(SharedFolder.*name="'"`echo "${SF_LINUX_NAME}"`"'".*hostPath="\)\([^"]*\)\("\):\1'"`echo "${SF_LINUX_TARGET}"`"'\3:g' "${TPL_FILE}"
perl -pi -e 's:(SharedFolder.*name="'"`echo "${SF_LINUX_NAME}"`"'".*hostPath=")(.*?)("):$1'"`echo "${SF_LINUX_TARGET}"`"'$3:g' "${TPL_FILE}"
#sed -i 's:\(SharedFolder.*name="'"`echo "${SF_MEDIA_NAME}"`"'".*hostPath="\)\([^"]*\)\("\):\1'"`echo "${SF_MEDIA_TARGET}"`"'\3:g' "${TPL_FILE}"
perl -pi -e 's:(SharedFolder.*name="'"`echo "${SF_MEDIA_NAME}"`"'".*hostPath=")(.*?)("):$1'"`echo "${SF_MEDIA_TARGET}"`"'$3:g' "${TPL_FILE}"

# Machine snapshotFolder
perl -pi -e 's:(Machine.*?snapshotFolder=")(.+?)("):$1'`echo "${TMP_DIR}"`'$3:g' "${TPL_FILE}"

# MACAddress
perl -pi -e 's:(MACAddress=")(.+?)("):$1'`echo ""`'$3:g' "${TPL_FILE}"

# stateFile
#perl -pi -e 's:(stateFile=")(.*)(/)(.*\.sav)("):$1'`echo "${IMG_HOME}/${VM_ID}/"`'$4$5:g' "${TPL_FILE}"
perl -pi -e 's:(stateFile=")([/]+.*[/]+)(.*?\.sav"):$1'`echo "${IMG_HOME}/${VM_ID}/"`'$3:g' "${TPL_FILE}"

# HardDisks
perl -pi -e 's:(HardDisk.*?location=")([/]+.*[/]+)(.*?\.vdi"):$1'`echo "${IMG_HOME}/${VM_ID}/"`'$3:g' "${TPL_FILE}"
echo "Please check harddisks locations:"
perl -ln -e 'BEGIN{undef $/} while (/<HardDisks>(.*?)<\/HardDisks>/sg){print $1}' "${TPL_FILE}"

exit 0