diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java index 7652a2b0609..441b91c871e 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmAndCloneImageCommand.java @@ -322,7 +322,10 @@ protected DiskImage getDiskImageToRemoveByParam(MoveOrCopyImageGroupParameters p protected void executeVmCommand() { super.executeVmCommand(); setVm(null); - getVm().setVmtGuid(VmTemplateHandler.BLANK_VM_TEMPLATE_ID); + if (getActionType() != ActionType.CloneVmNoCollapse) { + getVm().setVmtGuid(VmTemplateHandler.BLANK_VM_TEMPLATE_ID); + } + vmStaticDao.update(getVm().getStaticData()); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java index 9dcc31db13f..dc39cc4e3f8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmCommand.java @@ -303,6 +303,7 @@ protected boolean validate() { protected void updateOriginalTemplate(VmStatic vmStatic) { vmStatic.setOriginalTemplateGuid(getVm().getOriginalTemplateGuid()); vmStatic.setOriginalTemplateName(getVm().getOriginalTemplateName()); + vmStatic.setVmtGuid(getVm().getVmtGuid()); } private VmManagementParametersBase createUpdateVmParameters() { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmNoCollapseCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmNoCollapseCommand.java index dbc24b4f7c4..bcaaba8f324 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmNoCollapseCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CloneVmNoCollapseCommand.java @@ -160,6 +160,9 @@ private VM initClonedVm(VM oldVm) { oldVm.setId(getVmId()); oldVm.setDiskMap(getVm().getDiskMap()); oldVm.setName(getVm().getName()); + oldVm.setOriginalTemplateGuid(getVm().getOriginalTemplateGuid()); + oldVm.setOriginalTemplateName(getVm().getOriginalTemplateName()); + oldVm.setVmtGuid(getVm().getVmtGuid()); oldVm.getInterfaces().forEach(iface -> { iface.setId(Guid.newGuid()); iface.setVmId(getVmId()); diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/CloneImageGroupVolumesStructureCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/CloneImageGroupVolumesStructureCommand.java index 6f43cf539f1..86634a472f7 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/CloneImageGroupVolumesStructureCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/CloneImageGroupVolumesStructureCommand.java @@ -121,13 +121,13 @@ public boolean performNextOperation(int completedChildren) { private Guid determineSourceImageGroup(DiskImage image) { if (Guid.Empty.equals(image.getParentId())) { return Guid.Empty; + } else if (image.getImageTemplateId().equals(image.getParentId())) { + return imageDao.get(image.getImageTemplateId()).getDiskId(); } else if (!getParameters().getDestImages().isEmpty()) { return getParameters().getDestImageGroupId(); } - return image.getImageTemplateId().equals(image.getParentId()) ? - imageDao.get(image.getImageTemplateId()).getDiskId() - : getParameters().getImageGroupID(); + return getParameters().getImageGroupID(); } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/ImagesHandler.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/ImagesHandler.java index 7fc7a5d27f4..2cee1f595be 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/ImagesHandler.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/storage/disk/image/ImagesHandler.java @@ -1073,7 +1073,7 @@ public Map mapChainToNewIDs(Guid sourceImageGroupID, DbUser user) { List oldChain = diskImageDao.getAllSnapshotsForImageGroup(sourceImageGroupID); Map oldToNewChain = new HashMap<>(oldChain.size()); - Guid nextParentId = Guid.Empty; + Guid nextParentId = oldChain.get(0).getImageTemplateId() != Guid.Empty ? oldChain.get(0).getParentId() : Guid.Empty; sortImageList(oldChain); for (DiskImage diskImage : oldChain) {