Skip to content

Commit fdb8349

Browse files
committed
Error out create instance early for other providers
1 parent cc69f4f commit fdb8349

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
lines changed

api/src/main/java/org/apache/cloudstack/backup/BackupManager.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -234,6 +234,8 @@ public interface BackupManager extends BackupService, Configurable, PluggableSer
234234

235235
Map<Long, Network.IpAddresses> getIpToNetworkMapFromBackup(Backup backup, boolean preserveIps, List<Long> networkIds);
236236

237+
Boolean canCreateInstanceFromBackup(Long backupId);
238+
237239
/**
238240
* Restore a backup to a new Instance
239241
*/

server/src/main/java/com/cloud/vm/UserVmManagerImpl.java

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9414,11 +9414,12 @@ private void checkRootDiskSizeAgainstBackup(Long instanceVolumeSize,DiskOffering
94149414

94159415
@Override
94169416
public UserVm allocateVMFromBackup(CreateVMFromBackupCmd cmd) throws InsufficientCapacityException, ResourceAllocationException, ResourceUnavailableException {
9417-
Account owner = _accountService.getActiveAccountById(cmd.getEntityOwnerId());
9418-
Long zoneId = cmd.getZoneId();
9419-
DataCenter zone = _dcDao.findById(zoneId);
9417+
if (!backupManager.canCreateInstanceFromBackup(cmd.getBackupId())) {
9418+
throw new CloudRuntimeException("Create instance from backup is not supported for this provider.");
9419+
}
9420+
DataCenter zone = _dcDao.findById(cmd.getZoneId());
94209421
if (zone == null) {
9421-
throw new InvalidParameterValueException("Unable to find zone by id=" + zoneId);
9422+
throw new InvalidParameterValueException("Unable to find zone by id=" + cmd.getZoneId());
94229423
}
94239424

94249425
BackupVO backup = backupDao.findById(cmd.getBackupId());
@@ -9527,6 +9528,7 @@ public UserVm allocateVMFromBackup(CreateVMFromBackupCmd cmd) throws Insufficien
95279528
}
95289529

95299530
List<Long> networkIds = cmd.getNetworkIds();
9531+
Account owner = _accountService.getActiveAccountById(cmd.getEntityOwnerId());
95309532
LinkedHashMap<Integer, Long> userVmNetworkMap = getVmOvfNetworkMapping(zone, owner, template, cmd.getVmNetworkMap());
95319533
if (MapUtils.isNotEmpty(userVmNetworkMap)) {
95329534
networkIds = new ArrayList<>(userVmNetworkMap.values());

server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1153,6 +1153,17 @@ public Map<Long, Network.IpAddresses> getIpToNetworkMapFromBackup(Backup backup,
11531153
return ipToNetworkMap;
11541154
}
11551155

1156+
@Override
1157+
public Boolean canCreateInstanceFromBackup(final Long backupId) {
1158+
final BackupVO backup = backupDao.findById(backupId);
1159+
BackupOffering offering = backupOfferingDao.findByIdIncludingRemoved(backup.getBackupOfferingId());
1160+
if (offering == null) {
1161+
throw new CloudRuntimeException("Failed to find backup offering");
1162+
}
1163+
final BackupProvider backupProvider = getBackupProvider(offering.getProvider());
1164+
return backupProvider.supportsInstanceFromBackup();
1165+
}
1166+
11561167
@Override
11571168
public boolean restoreBackupToVM(final Long backupId, final Long vmId) throws ResourceUnavailableException {
11581169
final BackupVO backup = backupDao.findById(backupId);

0 commit comments

Comments
 (0)