From eaf878531cb9aefd8f1e9b511b2125e10ee63b01 Mon Sep 17 00:00:00 2001 From: Jan Orel Date: Wed, 4 Dec 2019 12:55:11 +0100 Subject: [PATCH] B #4017: Redump VM snapshot xml after snap delete (#4018) And also redefine snapshot metadata also after the suspend/resume - not only stop/start. (cherry picked from commit 2af130c00a5d7cf0b51ab677c1cb755324accf12) --- src/vmm_mad/remotes/kvm/restore | 14 ++++++++++++++ src/vmm_mad/remotes/kvm/snapshot_delete | 24 +++++++++++++++++++++--- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/vmm_mad/remotes/kvm/restore b/src/vmm_mad/remotes/kvm/restore index c504babc2c..ef8d1e8d5e 100755 --- a/src/vmm_mad/remotes/kvm/restore +++ b/src/vmm_mad/remotes/kvm/restore @@ -55,6 +55,7 @@ fi DS_ID=$(basename $(dirname $(dirname $FILE))) DS_LOCATION=$(dirname $(dirname $(dirname $FILE))) DS_LOCATION_NON_DOUBLE_SLASH=$(echo "$DS_LOCATION" | sed 's|//|/|g') +VM_DIR=$(dirname $FILE) RECALCULATE_CMD=$(cat </dev/null); do + + # query UUID, but only once + UUID=${UUID:-$(virsh --connect $LIBVIRT_URI dominfo $DEPLOY_ID | grep UUID: | awk '{print $2}')} + + # replace uuid in the snapshot metadata xml + sed -i "s%[[:alnum:]-]*%$UUID%" $SNAPSHOT_MD_XML + + # redefine the snapshot using the xml metadata file + virsh --connect $LIBVIRT_URI snapshot-create $DEPLOY_ID $SNAPSHOT_MD_XML --redefine > /dev/null || true +done + exit 0 diff --git a/src/vmm_mad/remotes/kvm/snapshot_delete b/src/vmm_mad/remotes/kvm/snapshot_delete index 7ea19d53d6..22079a1727 100755 --- a/src/vmm_mad/remotes/kvm/snapshot_delete +++ b/src/vmm_mad/remotes/kvm/snapshot_delete @@ -38,14 +38,32 @@ done < <(echo "$METADATA_XML" | $XPATH /vm/system_datastore/) unset i DATASTORE_PATH="${XPATH_ELEMENTS[i++]}" - +if [ -z "$DATASTORE_PATH" ]; then + error_message "Cannot read 'system_datastore' from domain $DOMAIN" + exit 1 +fi # ------ Delete snapshot metadata and the snapshot itself ---------- -[ -n "$DATASTORE_PATH" ] && rm ${DATASTORE_PATH}/${NAME}.xml 2>/dev/null || true +rm ${DATASTORE_PATH}/${NAME}.xml 2>/dev/null || true exec_and_log \ "virsh --connect $LIBVIRT_URI snapshot-delete $DOMAIN $NAME" \ "Could not delete snapshot $NAME for domain $DOMAIN." -exit 0 + +# ------ Re-write the remaining snapshots metadata ---------- +SNAPSHOTS=$(virsh --connect $LIBVIRT_URI snapshot-list $DOMAIN \ + | grep snap- | awk '{print $1}') + +for SNAP_NAME in $SNAPSHOTS; do + SNAP_XML_PATH="${DATASTORE_PATH}/${SNAP_NAME}.xml" + + virsh --connect $LIBVIRT_URI snapshot-dumpxml $DOMAIN $SNAP_NAME \ + > $SNAP_XML_PATH + + if [ $? != 0 ]; then + error_message "Could not dump $NAME snapshot metadata for $DOMAIN" + fi + +done