From 2c08c76512bb6c2296dd588f00701d501d42bbc7 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Thu, 30 Oct 2025 22:21:45 +0530 Subject: [PATCH 1/2] server: skip setting vm password when restored from backup Fixes #11941 Signed-off-by: Abhishek Kumar --- server/src/main/java/com/cloud/vm/UserVmManagerImpl.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java index 96c87c5376d8..a368436508e9 100644 --- a/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java +++ b/server/src/main/java/com/cloud/vm/UserVmManagerImpl.java @@ -5302,6 +5302,11 @@ private UserVm startVirtualMachine(long vmId, Long podId, Long clusterId, Long h updateVmStateForFailedVmCreation(vm.getId(), hostId); } + Object backupId = CallContext.current().getContextParameter(ApiConstants.BACKUP_ID); + if (backupId != null) { + logger.debug("VM is restored from backup, skipping password setting"); + return vm; + } // Check that the password was passed in and is valid VMTemplateVO template = _templateDao.findByIdIncludingRemoved(vm.getTemplateId()); if (template.isEnablePassword()) { @@ -9763,6 +9768,7 @@ public UserVm restoreVMFromBackup(CreateVMFromBackupCmd cmd) throws ResourceUnav } if (cmd.getStartVm()) { + CallContext.current().putContextParameter(ApiConstants.BACKUP_ID, cmd.getBackupId()); Long podId = null; Long clusterId = null; if (cmd instanceof CreateVMFromBackupCmdByAdmin) { From 5129b00637734e3b6d190730caf7057893154e80 Mon Sep 17 00:00:00 2001 From: Abhishek Kumar Date: Fri, 31 Oct 2025 12:33:09 +0530 Subject: [PATCH 2/2] fix test failure Signed-off-by: Abhishek Kumar --- server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java | 3 --- 1 file changed, 3 deletions(-) diff --git a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java index a21477aeb80e..7a5ad73669dd 100644 --- a/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java +++ b/server/src/test/java/com/cloud/vm/UserVmManagerImplTest.java @@ -3593,7 +3593,6 @@ public void testAllocateVMFromBackupUsingBackupValuesWithISO() throws Insufficie @Test public void testRestoreVMFromBackup() throws ResourceUnavailableException, InsufficientCapacityException, ResourceAllocationException { Long backupId = 5L; - Long templateId = 6L; CreateVMFromBackupCmd cmd = mock(CreateVMFromBackupCmd.class); when(cmd.getBackupId()).thenReturn(backupId); @@ -3603,7 +3602,6 @@ public void testRestoreVMFromBackup() throws ResourceUnavailableException, Insuf UserVmVO vm = mock(UserVmVO.class); when(vm.getId()).thenReturn(vmId); when(vm.getState()).thenReturn(VirtualMachine.State.Running); - when(vm.getTemplateId()).thenReturn(templateId); when(backupManager.restoreBackupToVM(backupId, vmId)).thenReturn(true); @@ -3612,7 +3610,6 @@ public void testRestoreVMFromBackup() throws ResourceUnavailableException, Insuf doReturn(vmPair).when(userVmManagerImpl).startVirtualMachine(anyLong(), isNull(), isNull(), isNull(), anyMap(), isNull()); doReturn(vmPair).when(userVmManagerImpl).startVirtualMachine(anyLong(), isNull(), isNull(), anyLong(), anyMap(), isNull()); when(userVmDao.findById(vmId)).thenReturn(vm); - when(templateDao.findByIdIncludingRemoved(templateId)).thenReturn(mock(VMTemplateVO.class)); UserVm result = userVmManagerImpl.restoreVMFromBackup(cmd);