Add vmware dependency on Veeam plugin

This commit is contained in:
nvazquez 2018-06-04 10:28:33 -03:00
parent cd327b165f
commit ebf42dac50
4 changed files with 42 additions and 11 deletions

View File

@ -112,10 +112,6 @@ public class BackupDaoImpl extends GenericDaoBase<BackupVO, Long> implements Bac
@Override
public List<Backup> syncVMBackups(Long zoneId, Long vmId, List<Backup> externalBackups) {
List<Backup> existingVMBackups = listByVmId(zoneId, vmId);
if (CollectionUtils.isNotEmpty(existingVMBackups)) {
removeExistingVMBackups(zoneId, vmId);
}
for (Backup backup : externalBackups) {
BackupVO backupVO = getBackupVO(backup);
persist(backupVO);

View File

@ -28,6 +28,11 @@
</parent>
<dependencies>
<dependency>
<groupId>org.apache.cloudstack</groupId>
<artifactId>cloud-plugin-hypervisor-vmware</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.dataformat</groupId>
<artifactId>jackson-dataformat-xml</artifactId>

View File

@ -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<String> 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<Backup> listVMBackups(Long zoneId, VirtualMachine vm) {
//TODO
//return getClient(zoneId).listAllBackups();
return null;
}

View File

@ -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<Backup> externalBackups = backupProvider.listVMBackups(zoneId, vm);
return backupDao.syncVMBackups(zoneId, vmId, externalBackups);
List<Backup> existingBackups = backupDao.listByVmId(zoneId, vmId);
if (CollectionUtils.isNotEmpty(existingBackups)) {
return existingBackups;
} else {
List<Backup> externalBackups = backupProvider.listVMBackups(zoneId, vm);
return backupDao.syncVMBackups(zoneId, vmId, externalBackups);
}
}
/**