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) { 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);