#!/bin/bash # Vitastor OpenNebula driver # Copyright (c) Vitaliy Filippov, 2024+ # License: Apache-2.0 http://www.apache.org/licenses/LICENSE-2.0 # cpds host:remote_system_ds/disk.i fe:SOURCE snapid vmid dsid # - fe is the front-end hostname # - SOURCE is the path of the disk image in the form DS_BASE_PATH/disk # - host is the target host to deploy the VM # - remote_system_ds is the path for the system datastore in the host # - snapid is the snapshot id. "-1" for none SRC=$1 DST=$2 SNAP_ID=$3 VM_ID=$4 DS_ID=$5 #-------------------------------------------------------------------------------- if [ -z "${ONE_LOCATION}" ]; then TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh LIB_LOCATION=/usr/lib/one else TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh LIB_LOCATION=$ONE_LOCATION/lib fi DRIVER_PATH=$(dirname $0) source $TMCOMMON source ${DRIVER_PATH}/../../datastore/libfs.sh source ${DRIVER_PATH}/../../etc/vmm/kvm/kvmrc #------------------------------------------------------------------------------- # Set dst path and dir #------------------------------------------------------------------------------- SRC_HOST=`arg_host $SRC` SRC_PATH=`arg_path $SRC` #------------------------------------------------------------------------------- # Get Image information #------------------------------------------------------------------------------- DISK_ID=$(echo "$SRC_PATH" | $AWK -F. '{print $NF}') XPATH="${DRIVER_PATH}/../../datastore/xpath.rb --stdin" unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" done < <(onevm show -x $VM_ID | $XPATH \ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/SOURCE \ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/CLONE \ /VM/TEMPLATE/DISK[DISK_ID=$DISK_ID]/VITASTOR_CONF \ /VM/LCM_STATE) SRC_IMAGE="${XPATH_ELEMENTS[j++]}" CLONE="${XPATH_ELEMENTS[j++]}" VITASTOR_CONF="${XPATH_ELEMENTS[j++]}" LCM_STATE="${XPATH_ELEMENTS[j++]}" #------------------------------------------------------------------------------- # Get Datastore information #------------------------------------------------------------------------------- unset i j XPATH_ELEMENTS while IFS= read -r -d '' element; do XPATH_ELEMENTS[i++]="$element" done < <(onedatastore show -x $DS_ID | $XPATH \ /DATASTORE/TEMPLATE/POOL_NAME \ /DATASTORE/TEMPLATE/BRIDGE_LIST) POOL_NAME="${XPATH_ELEMENTS[j++]}" BRIDGE_LIST="${XPATH_ELEMENTS[j++]}" #------------------------------------------------------------------------------- # Copy Image back to the datastore #------------------------------------------------------------------------------- if [ "$CLONE" = "YES" ]; then SRC_IMAGE="${SRC_IMAGE}-${VM_ID}-${DISK_ID}" fi CLI=vitastor-cli if [ -n "$VITASTOR_CONF" ]; then CLI="$CLI --config_path ${VITASTOR_CONF}" fi if [ -n "$POOL_NAME" ]; then CLI="$CLI --pool ${POOL_NAME}" fi # Undeployed VM state, do not use front-end, choose host from bridge_list if [ "$LCM_STATE" = '67' ] || [ "$LCM_STATE" = '68' ]; then if [ -n "$BRIDGE_LIST" ]; then SRC_HOST=`get_destination_host` fi fi if [ "$SNAP_ID" != "-1" ]; then SRC_IMAGE=$SRC_IMAGE@$SNAP_ID fi COPY_CMD=$(cat <