1
0
mirror of https://github.com/OpenNebula/one.git synced 2025-03-21 14:50:08 +03:00

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)
This commit is contained in:
Jan Orel 2019-12-04 12:55:11 +01:00 committed by Ruben S. Montero
parent 5d118e4c2d
commit eaf878531c
No known key found for this signature in database
GPG Key ID: A0CEA6FA880A1D87
2 changed files with 35 additions and 3 deletions

View File

@ -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 <<EOF
set -e -o pipefail
@ -99,4 +100,17 @@ fi
rm "$FILE"
rm "$FILE_XML"
# redefine potential snapshots
for SNAPSHOT_MD_XML in $(ls ${VM_DIR}/snap-*.xml 2>/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%<uuid>[[:alnum:]-]*</uuid>%<uuid>$UUID</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

View File

@ -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