#!/bin/bash

# -------------------------------------------------------------------------- #
# Copyright 2002-2013, OpenNebula Project (OpenNebula.org), C12G Labs        #
#                                                                            #
# 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.                                             #
#--------------------------------------------------------------------------- #

###############################################################################
# This script is used to remove a VM image (SRC) from the image repository
###############################################################################

# ------------ Set up the environment to source common tools ------------

if [ -z "${ONE_LOCATION}" ]; then
    LIB_LOCATION=/usr/lib/one
    VMWARERC=/etc/one/vmwarerc
else
    LIB_LOCATION=$ONE_LOCATION/lib
    VMWARERC=$ONE_LOCATION/etc/vmwarerc
fi

. $LIB_LOCATION/sh/scripts_common.sh

DRIVER_PATH=$(dirname $0)
source ${DRIVER_PATH}/../libfs.sh
source ${DRIVER_PATH}/vmfs.conf

# -------- Get rm and datastore arguments from OpenNebula core ------------

DRV_ACTION=$1
ID=$2

XPATH="${DRIVER_PATH}/../xpath.rb -b $DRV_ACTION"

unset i XPATH_ELEMENTS

while IFS= read -r -d '' element; do
    XPATH_ELEMENTS[i++]="$element"
done < <($XPATH     /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \
                    /DS_DRIVER_ACTION_DATA/DATASTORE/ID \
                    /DS_DRIVER_ACTION_DATA/DATASTORE/TEMPLATE/DS_USE_SSH \
                    /DS_DRIVER_ACTION_DATA/IMAGE/ID)

SRC="${XPATH_ELEMENTS[0]}"
DS_ID="${XPATH_ELEMENTS[1]}"
USE_SSH="${XPATH_ELEMENTS[4]:-$DS_USE_SSH}"
IMAGE_ID="${XPATH_ELEMENTS[2]}"

DST_HOST=`get_destination_host $IMAGE_ID`
DST_FOLDER=`basename $SRC`

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

vmfs_set_up

# ------------ Remove the image from the repository ------------

log "Removing $SRC from the image repository"

if [ "$USE_SSH" == "yes" ]; then   
    if [ -n $DS_ID -a -n $DST_FOLDER ]; then
    	ssh_exec_and_log $DST_HOST "rm -rf /vmfs/volumes/$DS_ID/$DST_FOLDER" \
                                   "Error deleting $SRC"
    fi
else
	# We have to erase the contents of the folder one by one
	FILES_TO_ERASE=`vifs $VI_PARAMS --dir [$DS_ID]$DST_FOLDER|grep -v "Content Listing"|grep -v "\-\-\-\-\-\-\-\-"|egrep -v "^[[:space:]]*$"`
	for file in $FILES_TO_ERASE; do
		exec_and_log "vifs $VI_PARAMS --force --rm [$DS_ID]$DST_FOLDER/$file" \
                     "Cannot delete $DST_FOLDER/$file in $DST_HOST"
	done
	exec_and_log "vifs $VI_PARAMS --force --rm [$DS_ID]$DST_FOLDER" \
                 "Cannot delete $DST_FOLDER in $DST_HOST"
fi

exit 0
