#!/bin/bash

# -------------------------------------------------------------------------- #
# Copyright 2002-2013, OpenNebula Project Leads (OpenNebula.org)             #
#                                                                            #
# Licensed under the Apache License, Version 2.0 (the "License"); you may    #
# not use this file except in compliance with the License. You may obtain    #
# a copy of the License at                                                   #
#                                                                            #
# http://www.apache.org/licenses/LICENSE-2.0                                 #
#                                                                            #
# Unless required by applicable law or agreed to in writing, software        #
# distributed under the License is distributed on an "AS IS" BASIS,          #
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.   #
# See the License for the specific language governing permissions and        #
# limitations under the License.                                             #
#--------------------------------------------------------------------------- #

# mkimage size format host:remote_system_ds/disk.i vmid dsid
#   - size in MB of the image
#   - format for the image
#   - host is the target host to deploy the VM
#   - remote_system_ds is the path for the system datastore in the host
#   - vmid is the id of the VM
#   - dsid is the target datastore (0 is the system datastore)

SIZE=$1
FSTYPE=$2
DST=$3

VMID=$4
DSID=$5

if [ -z "${ONE_LOCATION}" ]; then
    TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh
    VMWARERC=/etc/one/vmwarerc
else
    TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh
    VMWARERC=$ONE_LOCATION/etc/vmwarerc
fi

. $TMCOMMON

#-------------------------------------------------------------------------------
# Retrieve needed information, set dst path and dir
#-------------------------------------------------------------------------------
DST_PATH=`arg_path $DST`
DST_HOST=`arg_host $DST`
DST_DIR=`dirname $DST_PATH`
DST_FOLDER=`basename $DST_PATH`

USE_SSH=$(get_tm_use_ssh $DSID)
SYSTEM_DS_NAME=`basename $(dirname $(dirname $DST_PATH))`

#-------------------------------------------------------------------------------
# Set up datastore
#-------------------------------------------------------------------------------

vmfs_set_up

#-------------------------------------------------------------------------------
# Make the new image (file-based)
#-------------------------------------------------------------------------------

log "Making filesystem of ${SIZE}M and type $FSTYPE at $DST"

if [ "$USE_SSH" == "yes" ]; then
    ssh_make_path $DST_HOST $DST_PATH
    MKFS_CMD=`mkfs_command $DST_PATH $FSTYPE $SIZE`

MKSCRIPT=$(cat <<EOF
rm $DST_PATH/*
export PATH=/usr/sbin:/sbin:\$PATH
$MKFS_CMD
EOF
)

    ssh_exec_and_log $DST_HOST "$MKSCRIPT" "Could not create image $DST_PATH"
else
    vmfs_create_double_path $SYSTEM_DS_NAME $VMID $DST_FOLDER

    VMWARE_DISK_TYPE=`echo $FSTYPE|cut -d'_' -f 2`
    $VMKFSTOOLS $VI_PARAMS -U [$SYSTEM_DS_NAME]$VMID/$DST_FOLDER/disk.vmdk &> /dev/null

    # Erase in case that vmkfstool didn't recognize the disk
    FILES_TO_ERASE=`vifs $VI_PARAMS --dir [$SYSTEM_DS_NAME]$VMID/$DST_FOLDER|grep -v "Content Listing"|grep -v "\-\-\-\-\-\-\-\-"|egrep -v "^[[:space:]]*$"`
    for file in $FILES_TO_ERASE; do
      vifs $VI_PARAMS --force --rm [$SYSTEM_DS_NAME]$VMID/$DST_FOLDER/$file
    done

    exec_and_log "$VMKFSTOOLS $VI_PARAMS -c ${SIZE}M -d ${VMWARE_DISK_TYPE} [$SYSTEM_DS_NAME]$VMID/$DST_FOLDER/disk.vmdk" \
                 "Cannot create [$SYSTEM_DS_NAME]$VMID/$DST_FOLDER/disk.vmdk on $DST_HOST"
fi

exit 0
