diff --git a/libvirtnbdbackup/restore/image.py b/libvirtnbdbackup/restore/image.py index dd8e315d..e2d22702 100644 --- a/libvirtnbdbackup/restore/image.py +++ b/libvirtnbdbackup/restore/image.py @@ -105,6 +105,7 @@ def getConfig( # pylint: disable=too-many-statements "QCOW image with data-file backend detected, keeping original path: [%s]", dataFile, ) + dataFilePath = dataFile opt.append("-o") opt.append(f"data_file={dataFilePath}") diff --git a/libvirtnbdbackup/restore/vmconfig.py b/libvirtnbdbackup/restore/vmconfig.py index 599b2b57..bc3525a1 100644 --- a/libvirtnbdbackup/restore/vmconfig.py +++ b/libvirtnbdbackup/restore/vmconfig.py @@ -141,21 +141,28 @@ def adjust( dataStore = disk.xpath("source/dataStore") if dataStore and dev == restoreDisk.target: - originalFile = os.path.basename( - disk.xpath("source/dataStore/source")[0].get("file") - ) - abspath = os.path.join( - os.path.abspath(os.path.dirname(targetFile)), originalFile - ) - logging.info( - "Adjusting dataStore setting for disk [%s] from [%s] to [%s]", - restoreDisk.target, - disk.xpath("source/dataStore/source")[0].get("file"), - abspath, - ) - disk.xpath("source/dataStore/source")[0].set("file", abspath) + sourceEl = disk.xpath("source/dataStore/source")[0] + originalFile = sourceEl.get("file") or sourceEl.get("dev") + if originalFile: + originalFile = os.path.basename(originalFile) + + abspath = os.path.join( + os.path.abspath(os.path.dirname(targetFile)), originalFile + ) + logging.info( + "Adjusting dataStore setting for disk [%s] from [%s] to [%s]", + restoreDisk.target, + originalFile, + abspath, + ) + if sourceEl.get("file") is not None: + sourceEl.set("file", abspath) + elif sourceEl.get("dev") is not None: + sourceEl.set("dev", abspath) + + sourceMain = disk.xpath("source")[0] + originalFile = sourceMain.get("file") or sourceMain.get("dev") - originalFile = disk.xpath("source")[0].get("file") if dev == restoreDisk.target: abspath = os.path.abspath(targetFile) logging.info( @@ -166,6 +173,11 @@ def adjust( ) disk.xpath("source")[0].set("file", abspath) + if sourceMain.get("file") is not None: + sourceMain.set("file", abspath) + elif sourceMain.get("dev") is not None: + sourceMain.set("dev", abspath) + return xml.ElementTree.tostring(tree, encoding="utf8", method="xml")