|
57 | 57 | import org.apache.cloudstack.api.command.admin.vm.MigrateVMCmd; |
58 | 58 | import org.apache.cloudstack.api.command.admin.volume.MigrateVolumeCmdByAdmin; |
59 | 59 | import org.apache.cloudstack.api.command.user.volume.MigrateVolumeCmd; |
| 60 | +import org.apache.cloudstack.backup.Backup; |
60 | 61 | import org.apache.cloudstack.backup.BackupManager; |
| 62 | +import org.apache.cloudstack.backup.dao.BackupDao; |
61 | 63 | import org.apache.cloudstack.ca.CAManager; |
62 | 64 | import org.apache.cloudstack.context.CallContext; |
63 | 65 | import org.apache.cloudstack.engine.orchestration.service.NetworkOrchestrationService; |
@@ -412,6 +414,8 @@ public class VirtualMachineManagerImpl extends ManagerBase implements VirtualMac |
412 | 414 | VmWorkJobDao vmWorkJobDao; |
413 | 415 | @Inject |
414 | 416 | BackupManager backupManager; |
| 417 | + @Inject |
| 418 | + BackupDao backupDao; |
415 | 419 |
|
416 | 420 | private SingleCache<List<Long>> vmIdsInProgressCache; |
417 | 421 |
|
@@ -2345,6 +2349,17 @@ public void doInTransactionWithoutResult(final TransactionStatus status) throws |
2345 | 2349 | throw new CloudRuntimeException("Unable to destroy " + vm); |
2346 | 2350 | } else { |
2347 | 2351 | if (expunge) { |
| 2352 | + if (vm.getBackupOfferingId() != null) { |
| 2353 | + List<Backup> backupsForVm = backupDao.listByVmId(vm.getDataCenterId(), vm.getId()); |
| 2354 | + if (CollectionUtils.isEmpty(backupsForVm)) { |
| 2355 | + backupManager.removeVMFromBackupOffering(vm.getId(), true); |
| 2356 | + } else { |
| 2357 | + throw new CloudRuntimeException(String.format("This VM [uuid: %s, name: %s] has a " |
| 2358 | + + "Backup Offering [id: %s, external id: %s] with %s backups. Please, remove the backup offering " |
| 2359 | + + "before proceeding to VM exclusion!", vm.getUuid(), vm.getInstanceName(), vm.getBackupOfferingId(), |
| 2360 | + vm.getBackupExternalId(), backupsForVm.size())); |
| 2361 | + } |
| 2362 | + } |
2348 | 2363 | if (!stateTransitTo(vm, VirtualMachine.Event.ExpungeOperation, vm.getHostId())) { |
2349 | 2364 | logger.debug("Unable to expunge the vm because it is not in the correct state: {}", vm); |
2350 | 2365 | throw new CloudRuntimeException("Unable to expunge " + vm); |
|
0 commit comments