Skip to content

Commit 753d80f

Browse files
committed
Restore backup to VM plugin change for VeeamBackupProvider
1 parent d3439ad commit 753d80f

File tree

8 files changed

+29
-20
lines changed

8 files changed

+29
-20
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public interface BackupProvider {
8585
*/
8686
boolean deleteBackup(Backup backup, boolean forced);
8787

88-
boolean restoreBackupToVM(VirtualMachine vm, Backup backup);
88+
boolean restoreBackupToVM(VirtualMachine vm, Backup backup, String hostIp, String dataStoreUuid);
8989

9090
/**
9191
* Restore VM from backup

plugins/backup/dummy/src/main/java/org/apache/cloudstack/backup/DummyBackupProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -148,7 +148,7 @@ public void syncBackups(VirtualMachine vm, Backup.Metric metric) {
148148
}
149149

150150
@Override
151-
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup) {
151+
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup, String hostIp, String dataStoreUuid) {
152152
return true;
153153
}
154154
}

plugins/backup/nas/src/main/java/org/apache/cloudstack/backup/NASBackupProvider.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -218,7 +218,7 @@ private BackupVO createBackupObject(VirtualMachine vm, String backupPath) {
218218
}
219219

220220
@Override
221-
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup) {
221+
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup, String hostIp, String dataStoreUuid) {
222222
return restoreVMBackup(vm, backup);
223223
}
224224

plugins/backup/networker/src/main/java/org/apache/cloudstack/backup/NetworkerBackupProvider.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -524,7 +524,9 @@ public boolean takeBackup(VirtualMachine vm) {
524524
BackupVO backup = getClient(vm.getDataCenterId()).registerBackupForVm(vm, backupJobStart, saveTime);
525525
if (backup != null) {
526526
backup.setBackedUpVolumes(BackupManagerImpl.createVolumeInfoFromVolumes(volumeDao.findByInstance(vm.getId())));
527-
Map<String, String> details = backupManager.getBackupDiskOfferingDetails(vm.getId());
527+
Map<String, String> details = backupManager.getBackupVmDetails(vm);
528+
backup.setDetails(details);
529+
details = backupManager.getBackupDiskOfferingDetails(vm.getId());
528530
backup.addDetails(details);
529531
backupDao.persist(backup);
530532
return true;
@@ -671,7 +673,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) {
671673
public boolean willDeleteBackupsOnOfferingRemoval() { return false; }
672674

673675
@Override
674-
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup) {
676+
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup, String hostIp, String dataStoreUuid) {
675677
return true;
676678
}
677679
}

plugins/backup/networker/src/main/java/org/apache/cloudstack/backup/networker/NetworkerClient.java

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,6 @@
2525

2626
import org.apache.cloudstack.api.ApiErrorCode;
2727
import org.apache.cloudstack.api.ServerApiException;
28-
import org.apache.cloudstack.backup.BackupManager;
2928
import org.apache.cloudstack.backup.BackupOffering;
3029
import org.apache.cloudstack.backup.BackupVO;
3130
import org.apache.cloudstack.backup.networker.api.NetworkerBackup;
@@ -47,7 +46,6 @@
4746
import org.apache.logging.log4j.Logger;
4847
import org.apache.logging.log4j.LogManager;
4948

50-
import javax.inject.Inject;
5149
import javax.net.ssl.SSLContext;
5250
import javax.net.ssl.X509TrustManager;
5351
import java.io.IOException;
@@ -64,7 +62,6 @@
6462
import java.util.Base64;
6563
import java.util.Date;
6664
import java.util.List;
67-
import java.util.Map;
6865

6966
import static org.apache.cloudstack.backup.NetworkerBackupProvider.BACKUP_IDENTIFIER;
7067

@@ -75,9 +72,6 @@ public class NetworkerClient {
7572
private final String apiPassword;
7673
private final HttpClient httpClient;
7774

78-
@Inject
79-
BackupManager backupManager;
80-
8175
public NetworkerClient(final String url, final String username, final String password, final boolean validateCertificate, final int timeout) throws URISyntaxException, NoSuchAlgorithmException, KeyManagementException {
8276

8377
apiName = username;
@@ -274,8 +268,6 @@ public BackupVO registerBackupForVm(VirtualMachine vm, Date backupJobStart, Stri
274268
backup.setAccountId(vm.getAccountId());
275269
backup.setDomainId(vm.getDomainId());
276270
backup.setZoneId(vm.getDataCenterId());
277-
Map<String, String> details = backupManager.getBackupVmDetails(vm);
278-
backup.setDetails(details);
279271

280272
return backup;
281273
} catch (final IOException e) {

plugins/backup/veeam/src/main/java/org/apache/cloudstack/backup/VeeamBackupProvider.java

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,7 @@
5050
import com.cloud.hypervisor.vmware.VmwareDatacenterZoneMap;
5151
import com.cloud.dc.dao.VmwareDatacenterDao;
5252
import com.cloud.hypervisor.vmware.dao.VmwareDatacenterZoneMapDao;
53+
import com.cloud.storage.dao.VolumeDao;
5354
import com.cloud.user.User;
5455
import com.cloud.utils.Pair;
5556
import com.cloud.utils.component.AdapterBase;
@@ -111,6 +112,8 @@ public class VeeamBackupProvider extends AdapterBase implements BackupProvider,
111112
private VirtualMachineManager virtualMachineManager;
112113
@Inject
113114
private BackupManager backupManager;
115+
@Inject
116+
private VolumeDao volumeDao;
114117

115118
protected VeeamClient getClient(final Long zoneId) {
116119
try {
@@ -296,7 +299,7 @@ private void prepareForBackupRestoration(VirtualMachine vm) {
296299
public Pair<Boolean, String> restoreBackedUpVolume(Backup backup, String volumeUuid, String hostIp, String dataStoreUuid, Pair<String, VirtualMachine.State> vmNameAndState) {
297300
final Long zoneId = backup.getZoneId();
298301
final String restorePointId = backup.getExternalId();
299-
return getClient(zoneId).restoreVMToDifferentLocation(restorePointId, hostIp, dataStoreUuid);
302+
return getClient(zoneId).restoreVMToDifferentLocation(restorePointId, null, hostIp, dataStoreUuid);
300303
}
301304

302305
@Override
@@ -383,7 +386,7 @@ public void doInTransactionWithoutResult(TransactionStatus status) {
383386
backup.setBackedUpVolumes(BackupManagerImpl.createVolumeInfoFromVolumes(volumeDao.findByInstance(vm.getId())));
384387
Map<String, String> details = backupManager.getBackupVmDetails(vm);
385388
backup.setDetails(details);
386-
Map<String, String> details = backupManager.getBackupDiskOfferingDetails(vm.getId());
389+
details = backupManager.getBackupDiskOfferingDetails(vm.getId());
387390
backup.addDetails(details);
388391

389392
logger.debug(String.format("Creating a new entry in backups: [uuid: %s, vm_id: %s, external_id: %s, type: %s, date: %s, backup_offering_id: %s, account_id: %s, "
@@ -405,8 +408,11 @@ public void doInTransactionWithoutResult(TransactionStatus status) {
405408
}
406409

407410
@Override
408-
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup) {
409-
return true;
411+
public boolean restoreBackupToVM(VirtualMachine vm, Backup backup, String hostIp, String dataStoreUuid) {
412+
final Long zoneId = backup.getZoneId();
413+
final String restorePointId = backup.getExternalId();
414+
final String restoreLocation = vm.getInstanceName();
415+
return getClient(zoneId).restoreVMToDifferentLocation(restorePointId, restoreLocation, hostIp, dataStoreUuid).first();
410416
}
411417

412418
@Override

plugins/backup/veeam/src/main/java/org/apache/cloudstack/backup/veeam/VeeamClient.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -925,8 +925,10 @@ private Date formatDate(String date) throws ParseException {
925925
return dateFormat.parse(StringUtils.substring(date, 0, 19));
926926
}
927927

928-
public Pair<Boolean, String> restoreVMToDifferentLocation(String restorePointId, String hostIp, String dataStoreUuid) {
929-
final String restoreLocation = RESTORE_VM_SUFFIX + UUID.randomUUID().toString();
928+
public Pair<Boolean, String> restoreVMToDifferentLocation(String restorePointId, String restoreLocation, String hostIp, String dataStoreUuid) {
929+
if (restoreLocation == null) {
930+
restoreLocation = RESTORE_VM_SUFFIX + UUID.randomUUID().toString();
931+
}
930932
final String datastoreId = dataStoreUuid.replace("-","");
931933
final List<String> cmds = Arrays.asList(
932934
"$points = Get-VBRRestorePoint",

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

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -905,8 +905,15 @@ public boolean restoreBackupToVM(final Long backupId, final Long vmId) throws Re
905905
vm.getId(), ApiCommandResourceType.VirtualMachine.toString(),
906906
true, 0);
907907

908+
String host = null;
909+
String dataStore = null;
910+
if (!"nas".equals(offering.getProvider())) {
911+
Pair<HostVO, StoragePoolVO> restoreInfo = getRestoreVolumeHostAndDatastore(vm);
912+
host = restoreInfo.first().getPrivateIpAddress();
913+
dataStore = restoreInfo.second().getUuid();
914+
}
908915
final BackupProvider backupProvider = getBackupProvider(offering.getProvider());
909-
if (!backupProvider.restoreBackupToVM(vm, backup)) {
916+
if (!backupProvider.restoreBackupToVM(vm, backup, host, dataStore)) {
910917
ActionEventUtils.onCompletedActionEvent(User.UID_SYSTEM, vm.getAccountId(), EventVO.LEVEL_ERROR, EventTypes.EVENT_VM_BACKUP_RESTORE,
911918
String.format("Failed to restore VM %s from backup %s", vm.getInstanceName(), backup.getUuid()),
912919
vm.getId(), ApiCommandResourceType.VirtualMachine.toString(),0);

0 commit comments

Comments
 (0)