diff --git a/src/tm_mad/shared/mv b/src/tm_mad/shared/mv deleted file mode 120000 index 300563f2ad..0000000000 --- a/src/tm_mad/shared/mv +++ /dev/null @@ -1 +0,0 @@ -../common/dummy.sh \ No newline at end of file diff --git a/src/tm_mad/shared/mv b/src/tm_mad/shared/mv new file mode 100755 index 0000000000..9d885a1b02 --- /dev/null +++ b/src/tm_mad/shared/mv @@ -0,0 +1,67 @@ +#!/bin/bash + +# -------------------------------------------------------------------------- # +# Copyright 2002-2015, 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. # +#--------------------------------------------------------------------------- # + +# MV vmid dsid +# +# - hostX is the target host to deploy the VM +# - 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) + +SRC=$1 +DST=$2 + +VMID=$3 +DSID=$4 + +if [ -z "${ONE_LOCATION}" ]; then + TMCOMMON=/var/lib/one/remotes/tm/tm_common.sh +else + TMCOMMON=$ONE_LOCATION/var/remotes/tm/tm_common.sh +fi + +. $TMCOMMON + +SRC=`fix_dir_slashes $SRC` +DST=`fix_dir_slashes $DST` + +SRC_PATH=`arg_path $SRC` +DST_PATH=`arg_path $DST` + +SRC_HOST=`arg_host $SRC` +DST_HOST=`arg_host $DST` + +DST_DIR=`dirname $DST_PATH` + +SRC_DS_DIR=`dirname $SRC_PATH` +SRC_VM_DIR=`basename $SRC_PATH` + +# Return if moving a disk, we will move them when moving the whole system_ds +# directory for the VM +if [ `is_disk $DST_PATH` -eq 1 ]; then + exit 0 +fi + +# Return if the target path is the same as the source path. No need to move +# anything. This is *not* a system ds migration. +if [ "$SRC_PATH" == "$DST_PATH" ]; then + exit 0 +fi + +ssh_exec_and_log "$DST_HOST" "mv $SRC_PATH $DST_PATH" \ + "Error moving VM files to another System DS: $SRC_PATH to $DST_PATH in $DST_HOST" diff --git a/src/vmm_mad/remotes/kvm/restore b/src/vmm_mad/remotes/kvm/restore index de2032b841..301ca7eab7 100755 --- a/src/vmm_mad/remotes/kvm/restore +++ b/src/vmm_mad/remotes/kvm/restore @@ -19,9 +19,37 @@ source $(dirname $0)/kvmrc source $(dirname $0)/../../scripts_common.sh -file=$1 +# Checkpoint file: /var/lib/one//datastores///checkpoint +FILE=$1 +FILE_XML=${FILE}.xml -exec_and_log "virsh --connect $LIBVIRT_URI restore $file" \ - "Could not restore from $file" +HOST=$2 +DEPLOY_ID=$3 +VMID=$4 -rm "$file" +DS_ID=$(basename $(dirname $(dirname $FILE))) +DS_LOCATION=$(dirname $(dirname $(dirname $FILE))) + +RECALCULATE_CMD=$(cat < $FILE_XML + +# Eeplace all occurrences of the DS_LOCATION// with the specific +# DS_ID where the checkpoint is placed. This is done in case there was a +# system DS migration + +sed -i "s%$DS_LOCATION/[0-9]\+/$VMID/%$DS_LOCATION/$DS_ID/$VMID/%g" $FILE_XML +EOF +) + +multiline_exec_and_log "$RECALCULATE_CMD" \ + "Could not recalculate paths in $FILE_XML" + +exec_and_log "virsh --connect $LIBVIRT_URI restore $FILE --xml $FILE_XML" \ + "Could not restore from $FILE" + +rm "$FILE" +rm "$FILE_XML"