diff --git a/src/tm_mad/qcow2/clone b/src/tm_mad/qcow2/clone index 07a773602a..225b90c250 100755 --- a/src/tm_mad/qcow2/clone +++ b/src/tm_mad/qcow2/clone @@ -79,6 +79,17 @@ ssh_make_path $DST_HOST $DST_DIR #------------------------------------------------------------------------------- # Clone (cp) SRC into DST #------------------------------------------------------------------------------- + +CLONE_CMD=$(cat < # - DOC=" - ${SNAP_ID} - snap ${SNAP_ID} + ${DISK_ID}-${SNAP_ID} + snap ${DISK_ID}-${SNAP_ID} " for disk in $ALL_DISKS; do @@ -142,44 +133,30 @@ if [ ! -d "${SNAP_DIR}" ]; then mkdir "${SNAP_DIR}" fi +PREVIOUS_SNAP=$(readlink $SYSTEM_DS_DISK_PATH) + # 57 is DISK_SNAPSHOT. When the snapshot is done with the VM in running state +# TODO: LCM_STATE will *always* be 57. Need to check virsh status. if [ "$LCM_STATE" = "57" ] && [ "$VMMMAD" = "kvm" ] ; then # The file must be created beforehand or libvirt complains with # "permission denied" touch $SNAP_PATH # Temporary xml file - FILENAME="/tmp/snapshot-\$(date +%s)" + FILENAME="/tmp/snapshot-$VMID-$DISK_ID-$SNAP_ID" echo -e "$DOC" > \$FILENAME - virsh -c qemu:///system snapshot-create one-$VMID --disk-only --atomic \ - --xmlfile \$FILENAME --quiesce + virsh -c qemu:///system snapshot-create $DEPLOY_ID --disk-only --atomic \ + --xmlfile \$FILENAME + rm \${FILENAME} + + qemu-img rebase -u -b "\${PREVIOUS_SNAP}" "${SNAP_PATH}" ln -sf $SNAP_PATH $SYSTEM_DS_DISK_PATH - - rm \$FILENAME else - if [ "$SNAP_ID" = "1" ]; then - ORIG="$DISK_PATH_ORIG" - else - ORIG="$LAST_SNAP_PATH" - fi - - qemu-img create -f qcow2 -b "\${ORIG}" "${SNAP_PATH}" + qemu-img create -f qcow2 -b "\${PREVIOUS_SNAP}" "${SNAP_PATH}" ln -sf $SNAP_PATH $SYSTEM_DS_DISK_PATH fi - -if [ "$SNAP_ID" = "1" ] && [ "$CLONE" != "YES" ]; then - ln -sf "${DISK_PATH_ORIG}" "${SNAP_DIR}/0" -fi - -BACKING_FILE=\$(qemu-img info ${SNAP_PATH} | grep '^backing file:' | \ - cut -d: -f2 | sed 's/^ //') - -if [ "\${BACKING_FILE}" = "${SYSTEM_DS_DISK_PATH}" ]; then - REAL_BACKING_FILE="${DISK_PATH_ORIG}" - qemu-img rebase -u -b "\${REAL_BACKING_FILE}" "${SNAP_PATH}" -fi EOT ) diff --git a/src/tm_mad/qcow2/snap_delete b/src/tm_mad/qcow2/snap_delete index 18033b17b3..eb2bed5b19 100755 --- a/src/tm_mad/qcow2/snap_delete +++ b/src/tm_mad/qcow2/snap_delete @@ -69,8 +69,6 @@ fi SNAP_DIR="${DISK_PATH}.snap" SNAP_PATH="${SNAP_DIR}/${SNAP_ID}" -SNAP_PATH_RELATIVE=$(basename ${SNAP_PATH}) -CURRENT_PATH=${DISK_PATH} ssh_exec_and_log "${SRC_HOST}" "rm ${SNAP_PATH}" \ "Error deleting snapshot ${SNAP_PATH}" diff --git a/src/tm_mad/qcow2/snap_revert b/src/tm_mad/qcow2/snap_revert index 3218e83134..783b062806 100755 --- a/src/tm_mad/qcow2/snap_revert +++ b/src/tm_mad/qcow2/snap_revert @@ -57,27 +57,20 @@ done < <(onevm show -x $VMID| $XPATH \ DISK_SRC="${XPATH_ELEMENTS[j++]}" CLONE="${XPATH_ELEMENTS[j++]}" - SYSTEM_DS_PATH=$(dirname ${SRC_PATH}) IMAGE_DS_PATH=$(dirname ${DISK_SRC}) -if [ "$CLONE" = "YES" ]; then - DISK_PATH="${SYSTEM_DS_PATH}/disk.${DISK_ID}" +DISK_PATH="${SYSTEM_DS_PATH}/disk.${DISK_ID}" + +if [ "${CLONE}" = "YES" ]; then + SNAP_DIR="${DISK_PATH}.snap" else - DISK_PATH=$DISK_SRC + SNAP_DIR="${DISK_SRC}.snap" fi -NEXT_ID=$(( $SNAP_ID + 1 )) -SNAP_DIR="${DISK_PATH}.snap" SNAP_PATH="${SNAP_DIR}/${SNAP_ID}" -SNAP_PATH_NEXT="${SNAP_DIR}/${NEXT_ID}" -SNAP_PATH_RELATIVE=$(basename ${SNAP_PATH}) -CURRENT_PATH=${DISK_PATH} -CMD="set -ex ; \ -qemu-img create -f qcow2 -b \"${SNAP_PATH}\" \"${CURRENT_PATH}\"; \ -" +SNAP_CMD="qemu-img create -f qcow2 -b \"${SNAP_PATH}\" \"\$(readlink ${DISK_PATH})\"" -ssh_exec_and_log "${SRC_HOST}" "${CMD}" \ +ssh_exec_and_log "${SRC_HOST}" "${SNAP_CMD}" \ "Error reverting snapshot to ${SNAP_PATH}" - diff --git a/src/tm_mad/shared/ln b/src/tm_mad/shared/ln index baf5a21d80..932fbfd815 100755 --- a/src/tm_mad/shared/ln +++ b/src/tm_mad/shared/ln @@ -52,6 +52,7 @@ DST_DS_PATH="$(dirname $(dirname $(dirname $DST_PATH)))" SRC_DS_PATH="$(dirname $(dirname $SRC_ARG_PATH))" SRC_PATH="${DST_DS_PATH}${SRC_ARG_PATH##$SRC_DS_PATH}" +SNAP_DIR="${SRC_PATH}.snap" #------------------------------------------------------------------------------- # Create DST path @@ -66,18 +67,19 @@ log "Linking $SRC_PATH in $DST" CMD=$(cat <