#!/bin/bash

#rbt
# Description in BREST-2936

source $(dirname $0)/../../scripts_common.sh

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

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/DATASTORE/BASE_PATH \
                    /DS_DRIVER_ACTION_DATA/IMAGE/SOURCE \
                    /DS_DRIVER_ACTION_DATA/IMAGE/SIZE \
                    /DS_DRIVER_ACTION_DATA/IMAGE/DATASTORE_ID)

unset i

BASE_PATH="${XPATH_ELEMENTS[i++]}"
SOURCE="${XPATH_ELEMENTS[i++]}"
SIZE="${XPATH_ELEMENTS[i++]}"
DS_ID="${XPATH_ELEMENTS[i++]}"
NEW_DS_ID=`echo $BASE_PATH | cut -d "/" -f 7`

LV_NAME="lv-one-image-${ID}"
NEW_VG_NAME="vg-one-${NEW_DS_ID}"
NEW_DEV="/dev/${NEW_VG_NAME}/${LV_NAME}"

# create the new volume
$SUDO $LVCREATE --wipesignatures n -L${SIZE}M -n $LV_NAME $NEW_VG_NAME > /dev/null 2>&1
# activate new volume
$SUDO $LVCHANGE -ay "${NEW_VG_NAME}/${LV_NAME}" > /dev/null 2>&1

# copy the content to new volume
$SUDO $QEMU_IMG convert -O qcow2 ${SOURCE} $NEW_DEV > /dev/null 2>&1

# check the result size
OFFSET=$($SUDO $QEMU_IMG check  --output=json $NEW_DEV | jq '."image-end-offset"')
OFFSET_MB=$(( $OFFSET / 1024 / 1024))
OFFSET8=$(bc<<<"scale=1;$OFFSET_MB*1.08"   | awk '{ print int($1) }')

if [ $OFFSET8 -eq 0 ]; then
    OFFSET8=100
fi

# reduce the result volume
if [ $OFFSET8 -lt $SIZE ]; then
    $SUDO $LVREDUCE -L"$OFFSET8"M  $NEW_DEV -f > /dev/null 2>&1
fi
# remove the source
if echo "$SOURCE" | grep "dev/vg-one" &>/dev/null; then
    $SUDO $LVREMOVE --yes $SOURCE > /dev/null 2>&1
else
    rm -rf $SOURCE > /dev/null 2>&1
fi

# deactivate new volume
$SUDO $LVCHANGE -an "${NEW_VG_NAME}/${LV_NAME}" > /dev/null 2>&1

# return the new dev - to use it to set SOURCE for image in oned handler
echo "$NEW_DEV $NEW_DS_ID"
