From 118e30597315cb59d42491fdb16645307a82c653 Mon Sep 17 00:00:00 2001
From: "Ruben S. Montero" <rsmontero@opennebula.org>
Date: Mon, 13 Nov 2023 12:15:37 +0100
Subject: [PATCH] F #6333: Fix ssh-replica issues

- Remove self-link when saving persistent images
- Adjust migrate to new structure (>6.8) that not use symlinks
---
 src/tm_mad/ssh/mvds             |  5 +++++
 src/vmm_mad/remotes/kvm/migrate | 28 ++++++++++++++++------------
 2 files changed, 21 insertions(+), 12 deletions(-)

diff --git a/src/tm_mad/ssh/mvds b/src/tm_mad/ssh/mvds
index 735c5f2be1..1594a21ac9 100755
--- a/src/tm_mad/ssh/mvds
+++ b/src/tm_mad/ssh/mvds
@@ -65,6 +65,11 @@ CONVERT_CMD=$(cat <<EOF
 
        if [ -e $SRC_PATH_SNAP/base ]; then
            rm -f $SRC_PATH_SNAP/base $SRC_PATH_SNAP/base.1 $SRC_PATH_SNAP/rs_tmp
+
+           if [ "\$(ls $SRC_PATH_SNAP)" = "${SRC_FILE}.snap" ]; then
+               rm -f $SRC_PATH_SNAP/${SRC_FILE}.snap
+           fi
+
            rmdir $SRC_PATH_SNAP
        elif [ -d $SRC_PATH_SNAP ]; then
            rm -rf $SRC_PATH_SNAP
diff --git a/src/vmm_mad/remotes/kvm/migrate b/src/vmm_mad/remotes/kvm/migrate
index 4b1890d7a9..8d51749421 100755
--- a/src/vmm_mad/remotes/kvm/migrate
+++ b/src/vmm_mad/remotes/kvm/migrate
@@ -41,15 +41,12 @@ get_size_and_format_of_disk_img() {
     local QEMU_IMG_PATH="$1"
     local PARAM="$2"
 
-    if [ -L "$QEMU_IMG_PATH" ]; then
-        TARGET=$(readlink "$QEMU_IMG_PATH")A
-        # symlink to disk.X.snap/base.1
-        if [[ "$TARGET" =~ disk.[0-9]*.snap/base.1  ]]; then
-            echo unknown qcow2-symlink
-            return
-        fi
-
-        # symlink, assume network disk
+    if [[ "$TARGET" =~ disk.[0-9]*.snap/ ]]; then
+        #Disk lives in snap dir it is a link (includes replica)
+        echo unknown qcow2-symlink
+        return
+    elif [ -L "$QEMU_IMG_PATH" ]; then
+        #Disk is a synlink, assume network-disk
         echo unknown network-disk
         return
     fi
@@ -175,10 +172,17 @@ else
 
         # recreate symlinks
         if [ -L "$DISK_PATH" ]; then
-            LINK_TARGET=$(readlink $DISK_PATH)
-            ssh_exec_and_log "$DEST_HOST" "[ -L \"$DISK_PATH\" ] || ln -s \"$LINK_TARGET\" \"$DISK_PATH\""
-                "Failed to create symlink $DISK_PATH -> $LINK_TARGET on $DEST_HOST"
+            TARGET=$(readlink $DISK_PATH)
+            LNAME=$DISK_PATH
+        elif [[ "$DISK_PATH" =~ (disk.([0-9]*).snap/[0-9]*) ]]; then
+            TARGET=${BASH_REMATCH[1]}
+            LNAME="disk.${BASH_REMATCH[2]}"
+        else
+            continue
         fi
+
+        ssh_exec_and_log "$DEST_HOST" "[ -L \"$LNAME\" ] || ln -s \"$TARGET\" \"$LNAME\""
+            "Failed to create symlink $TARGET -> $LNAME on $DEST_HOST"
     done
 
     # copy vm.xml and ds.xml from the $VM_DIR