From ebf42dac504b77595543aff508a5e98c4cc05041 Mon Sep 17 00:00:00 2001 From: nvazquez Date: Mon, 4 Jun 2018 10:28:33 -0300 Subject: [PATCH] Add vmware dependency on Veeam plugin --- .../cloudstack/backup/dao/BackupDaoImpl.java | 4 --- plugins/backup/veeam/pom.xml | 5 +++ .../backup/VeeamBackupProvider.java | 34 ++++++++++++++++--- .../cloudstack/backup/BackupManagerImpl.java | 10 ++++-- 4 files changed, 42 insertions(+), 11 deletions(-) diff --git a/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java b/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java index 1e2eb4b6f2c..0661ab8645d 100644 --- a/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java +++ b/engine/schema/src/main/java/org/apache/cloudstack/backup/dao/BackupDaoImpl.java @@ -112,10 +112,6 @@ public class BackupDaoImpl extends GenericDaoBase implements Bac @Override public List syncVMBackups(Long zoneId, Long vmId, List externalBackups) { - List existingVMBackups = listByVmId(zoneId, vmId); - if (CollectionUtils.isNotEmpty(existingVMBackups)) { - removeExistingVMBackups(zoneId, vmId); - } for (Backup backup : externalBackups) { BackupVO backupVO = getBackupVO(backup); persist(backupVO); diff --git a/plugins/backup/veeam/pom.xml b/plugins/backup/veeam/pom.xml index 4cb1f72effd..4a6769ea28b 100644 --- a/plugins/backup/veeam/pom.xml +++ b/plugins/backup/veeam/pom.xml @@ -28,6 +28,11 @@ + + org.apache.cloudstack + cloud-plugin-hypervisor-vmware + ${project.version} + com.fasterxml.jackson.dataformat jackson-dataformat-xml diff --git a/plugins/backup/veeam/src/main/java/org/apache/cloudstack/backup/VeeamBackupProvider.java b/plugins/backup/veeam/src/main/java/org/apache/cloudstack/backup/VeeamBackupProvider.java index e664edd806f..14cf6c35b14 100644 --- a/plugins/backup/veeam/src/main/java/org/apache/cloudstack/backup/VeeamBackupProvider.java +++ b/plugins/backup/veeam/src/main/java/org/apache/cloudstack/backup/VeeamBackupProvider.java @@ -22,6 +22,10 @@ import java.security.KeyManagementException; import java.security.NoSuchAlgorithmException; import java.util.List; +import com.cloud.hypervisor.vmware.VmwareDatacenterVO; +import com.cloud.hypervisor.vmware.VmwareDatacenterZoneMapVO; +import com.cloud.hypervisor.vmware.dao.VmwareDatacenterDao; +import com.cloud.hypervisor.vmware.dao.VmwareDatacenterZoneMapDao; import org.apache.cloudstack.backup.veeam.VeeamClient; import org.apache.cloudstack.framework.config.ConfigKey; import org.apache.cloudstack.framework.config.Configurable; @@ -32,9 +36,18 @@ import com.cloud.utils.component.AdapterBase; import com.cloud.utils.exception.CloudRuntimeException; import com.cloud.vm.VirtualMachine; +import javax.inject.Inject; + public class VeeamBackupProvider extends AdapterBase implements BackupProvider, Configurable { + private static final Logger LOG = Logger.getLogger(VeeamBackupProvider.class); + @Inject + VmwareDatacenterZoneMapDao vmwareDatacenterZoneMapDao; + + @Inject + VmwareDatacenterDao vmwareDatacenterDao; + private ConfigKey VeeamUrl = new ConfigKey<>("Advanced", String.class, "backup.plugin.veeam.url", "http://localhost:9399/api/", @@ -69,17 +82,28 @@ public class VeeamBackupProvider extends AdapterBase implements BackupProvider, throw new CloudRuntimeException("Failed to build Veeam API client"); } + private String getVCenterIp(Long zoneId) { + VmwareDatacenterZoneMapVO map = vmwareDatacenterZoneMapDao.findByZoneId(zoneId); + if (map == null) { + throw new CloudRuntimeException("No vCenter associated to zone " + zoneId); + } + long vmwareDcId = map.getVmwareDcId(); + VmwareDatacenterVO dataCenterVO = vmwareDatacenterDao.findById(vmwareDcId); + return dataCenterVO.getVcenterHost(); + } + @Override public boolean addVMToBackupPolicy(Long zoneId, String policyId, VirtualMachine vm) { String instanceName = vm.getInstanceName(); - //TODO: Get vcenter ip - return getClient(zoneId).addVMToVeeamJob(policyId, instanceName, ""); + String vCenterIp = getVCenterIp(zoneId); + return getClient(zoneId).addVMToVeeamJob(policyId, instanceName, vCenterIp); } @Override public boolean removeVMFromBackupPolicy(Long zoneId, String policyId, VirtualMachine vm) { - //TODO: Remove VM from backup policy on the client - return false; + String instanceName = vm.getInstanceName(); + String vCenterIp = getVCenterIp(zoneId); + return getClient(zoneId).removeVMFromVeeamJob(policyId, instanceName, vCenterIp); } @Override @@ -107,7 +131,7 @@ public class VeeamBackupProvider extends AdapterBase implements BackupProvider, @Override public List listVMBackups(Long zoneId, VirtualMachine vm) { - //TODO + //return getClient(zoneId).listAllBackups(); return null; } diff --git a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java index daffec08399..31db797b178 100644 --- a/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java +++ b/server/src/main/java/org/apache/cloudstack/backup/BackupManagerImpl.java @@ -49,6 +49,7 @@ import org.apache.cloudstack.backup.dao.BackupPolicyDao; import org.apache.cloudstack.backup.dao.BackupPolicyVMMapDao; import org.apache.cloudstack.context.CallContext; import org.apache.cloudstack.framework.config.ConfigKey; +import org.apache.commons.collections.CollectionUtils; import org.apache.commons.lang.BooleanUtils; import org.apache.log4j.Logger; import org.springframework.stereotype.Component; @@ -165,8 +166,13 @@ public class BackupManagerImpl extends ManagerBase implements BackupManager { if (vm == null) { throw new CloudRuntimeException("VM " + vmId + " does not exist"); } - List externalBackups = backupProvider.listVMBackups(zoneId, vm); - return backupDao.syncVMBackups(zoneId, vmId, externalBackups); + List existingBackups = backupDao.listByVmId(zoneId, vmId); + if (CollectionUtils.isNotEmpty(existingBackups)) { + return existingBackups; + } else { + List externalBackups = backupProvider.listVMBackups(zoneId, vm); + return backupDao.syncVMBackups(zoneId, vmId, externalBackups); + } } /**