use of org.ovirt.engine.core.common.businessentities.OvfEntityData in project ovirt-engine by oVirt.
the class GetUnregisteredVmsQueryTest method setUpQueryEntities.
private void setUpQueryEntities() throws OvfReaderException {
// Set up the expected result
VM vmReturnForOvf = new VM();
vmReturnForOvf.setId(newVmGuid);
vmReturnForOvf.setName("Name");
String ovfData = new String("OVF data for the first VM");
OvfEntityData ovfEntityData = new OvfEntityData(vmReturnForOvf.getId(), vmReturnForOvf.getName(), VmEntityType.VM, null, null, storageDomainId, ovfData, null);
ovfEntityData.setStatus(vmStatus);
List<OvfEntityData> expectedResultQuery1 = new ArrayList<>();
expectedResultQuery1.add(ovfEntityData);
List<OvfEntityData> expectedResult = new ArrayList<>();
expectedResult.add(ovfEntityData);
VM vmReturnForOvf2 = new VM();
vmReturnForOvf2.setId(newVmGuid2);
vmReturnForOvf2.setName("Name2");
String ovfData2 = new String("OVF data for the second VM");
OvfEntityData ovfEntityData2 = new OvfEntityData(vmReturnForOvf2.getId(), vmReturnForOvf2.getName(), VmEntityType.VM, null, null, storageDomainId, ovfData2, null);
ovfEntityData2.setStatus(vmStatus2);
expectedResult.add(ovfEntityData2);
List<OvfEntityData> expectedResultQuery2 = new ArrayList<>();
expectedResultQuery2.add(ovfEntityData);
// Mock the Daos
when(unregisteredOVFDataDaoMock.getAllForStorageDomainByEntityType(storageDomainId, entityType)).thenReturn(expectedResult);
when(unregisteredOVFDataDaoMock.getByEntityIdAndStorageDomain(newVmGuid2, storageDomainId)).thenReturn(expectedResultQuery2);
when(unregisteredOVFDataDaoMock.getByEntityIdAndStorageDomain(newVmGuid, storageDomainId)).thenReturn(expectedResultQuery1);
// Mock OVF
when(ovfHelperMock.readVmFromOvf(ovfData)).thenReturn(new FullEntityOvfData(vmReturnForOvf));
when(ovfHelperMock.readVmFromOvf(ovfData2)).thenReturn(new FullEntityOvfData(vmReturnForOvf2));
}
use of org.ovirt.engine.core.common.businessentities.OvfEntityData in project ovirt-engine by oVirt.
the class ScanStorageForUnregisteredDisksCommandTest method setUpCommandEntities.
@Before
public void setUpCommandEntities() throws OvfReaderException {
QueryReturnValue vdcRetVal = generateQueryReturnValueForGetDiskImages();
doReturn(vdcRetVal).when(cmd).getUnregisteredDisksFromHost();
List<OvfEntityData> allEntities = new ArrayList<>();
OvfEntityData ovf = new OvfEntityData();
ovf.setEntityId(Guid.newGuid());
ovf.setEntityName("Any Name");
allEntities.add(ovf);
when(unregisteredOVFDataDaoMock.getAllForStorageDomainByEntityType(storageId, null)).thenReturn(allEntities);
doNothing().when(cmd).setVmsForUnregisteredDisks(allEntities);
when(unregisteredOVFDataDaoMock.getAllForStorageDomainByEntityType(storageId, null)).thenReturn(allEntities);
doNothing().when(cmd).removeUnregisteredDisks();
doNothing().when(cmd).saveUnregisterDisk(any());
}
use of org.ovirt.engine.core.common.businessentities.OvfEntityData in project ovirt-engine by oVirt.
the class ScanStorageForUnregisteredDisksCommand method executeCommand.
@Override
protected void executeCommand() {
// Get all disks from the Storage.
QueryReturnValue vdcRetVal = getUnregisteredDisksFromHost();
if (!vdcRetVal.getSucceeded()) {
log.error("An error occurred while fetching unregistered disks from Storage Domain id '{}'", getParameters().getStorageDomainId());
setSucceeded(false);
return;
}
List<DiskImage> disksFromStorage = vdcRetVal.getReturnValue();
castDiskImagesToUnregisteredDisks(disksFromStorage);
// Filter out all existing disks in the setup.
List<OvfEntityData> allEntities = unregisteredOVFDataDao.getAllForStorageDomainByEntityType(getParameters().getStorageDomainId(), null);
setVmsForUnregisteredDisks(allEntities);
// Initialize the unregistered Disks table - Remove all the data related to the Storage Domain.
removeUnregisteredDisks();
// Initialize all the disks in the DB.
initUnregisteredDisksToDB();
setSucceeded(true);
}
use of org.ovirt.engine.core.common.businessentities.OvfEntityData in project ovirt-engine by oVirt.
the class ScanStorageForUnregisteredDisksCommand method setVmsForUnregisteredDisks.
protected void setVmsForUnregisteredDisks(List<OvfEntityData> allEntities) {
for (OvfEntityData ovfEntity : allEntities) {
try {
XmlDocument xmlDocument = new XmlDocument(ovfEntity.getOvfData());
ovfUtils.updateUnregisteredDisksWithVMs(unregisteredDisks, ovfEntity.getEntityId(), ovfEntity.getEntityName(), xmlDocument);
} catch (Exception e) {
log.warn("Could not parse OVF data of VM");
continue;
}
}
}
use of org.ovirt.engine.core.common.businessentities.OvfEntityData in project ovirt-engine by oVirt.
the class AttachStorageDomainToPoolCommand method executeCommand.
@Override
protected void executeCommand() {
if (isCinderStorageDomain()) {
handleCinderDomain();
return;
}
if (getStoragePool().getStatus() == StoragePoolStatus.Uninitialized) {
StoragePoolWithStoragesParameter parameters = new StoragePoolWithStoragesParameter(getStoragePool(), Collections.singletonList(getStorageDomain().getId()), getParameters().getSessionId());
parameters.setIsInternal(true);
parameters.setTransactionScopeOption(TransactionScopeOption.Suppress);
ActionReturnValue returnValue = runInternalAction(ActionType.AddStoragePoolWithStorages, parameters, getContext().clone().withoutCompensationContext());
setSucceeded(returnValue.getSucceeded());
if (!returnValue.getSucceeded()) {
getReturnValue().setFault(returnValue.getFault());
}
} else {
map = storagePoolIsoMapDao.get(new StoragePoolIsoMapId(getStorageDomain().getId(), getParameters().getStoragePoolId()));
if (map == null) {
executeInNewTransaction(() -> {
map = new StoragePoolIsoMap(getStorageDomain().getId(), getParameters().getStoragePoolId(), StorageDomainStatus.Locked);
storagePoolIsoMapDao.save(map);
getCompensationContext().snapshotNewEntity(map);
getCompensationContext().stateChanged();
return null;
});
List<Pair<Guid, Boolean>> hostsConnectionResults = connectHostsInUpToDomainStorageServer();
if (isAllHostConnectionFailed(hostsConnectionResults)) {
log.error("Cannot connect storage connection server, aborting attach storage domain operation.");
setSucceeded(false);
return;
}
// Forcibly detach only data storage domains.
if (getStorageDomain().getStorageDomainType() == StorageDomainType.Data) {
@SuppressWarnings("unchecked") Pair<StorageDomainStatic, Guid> domainFromIrs = (Pair<StorageDomainStatic, Guid>) runVdsCommand(VDSCommandType.HSMGetStorageDomainInfo, new HSMGetStorageDomainInfoVDSCommandParameters(getVdsId(), getParameters().getStorageDomainId())).getReturnValue();
// If the storage domain is already related to another Storage Pool, detach it by force.
Guid storagePoolId = domainFromIrs.getSecond();
if (storagePoolId != null) {
// Master domain version is not relevant since force remove at
// DetachStorageDomainVdsCommand does not use it.
// Storage pool id can be empty
DetachStorageDomainVDSCommandParameters detachParams = new DetachStorageDomainVDSCommandParameters(getStoragePoolIdFromVds(), getParameters().getStorageDomainId(), Guid.Empty, 0);
detachParams.setForce(true);
detachParams.setDetachFromOldStoragePool(true);
try {
runVdsCommand(VDSCommandType.DetachStorageDomain, detachParams);
} catch (EngineException e) {
log.warn("Detaching Storage Domain '{}' from it's previous storage pool '{}'" + " has failed. The meta data of the Storage Domain might still" + " indicate that it is attached to a different Storage Pool.", getParameters().getStorageDomainId(), Guid.Empty, 0);
throw e;
}
}
if (diskProfileDao.getAllForStorageDomain(getStorageDomain().getId()).isEmpty()) {
createDefaultDiskProfile();
}
}
runVdsCommand(VDSCommandType.AttachStorageDomain, new AttachStorageDomainVDSCommandParameters(getParameters().getStoragePoolId(), getParameters().getStorageDomainId()));
final List<OvfEntityData> unregisteredEntitiesFromOvfDisk = new ArrayList<>();
if (getStorageDomain().getStorageDomainType().isDataDomain()) {
List<OvfEntityData> returnValueFromStorageOvfDisk = getEntitiesFromStorageOvfDisk(getParameters().getStorageDomainId(), getStoragePoolIdFromVds());
unregisteredEntitiesFromOvfDisk.addAll(returnValueFromStorageOvfDisk);
}
List<DiskImage> ovfStoreDiskImages = getAllOVFDisks(getParameters().getStorageDomainId(), getStoragePoolIdFromVds());
executeInNewTransaction(() -> {
final StorageDomainType sdType = getStorageDomain().getStorageDomainType();
map.setStatus(StorageDomainStatus.Maintenance);
storagePoolIsoMapDao.updateStatus(map.getId(), map.getStatus());
if (sdType == StorageDomainType.Master) {
calcStoragePoolStatusByDomainsStatus();
}
if (getStorageDomain().getStorageDomainType().isDataDomain()) {
registerAllOvfDisks(ovfStoreDiskImages, getParameters().getStorageDomainId());
// Update unregistered entities
for (OvfEntityData ovf : unregisteredEntitiesFromOvfDisk) {
unregisteredOVFDataDao.removeEntity(ovf.getEntityId(), getParameters().getStorageDomainId());
unregisteredOVFDataDao.saveOVFData(ovf);
log.info("Adding OVF data of entity id '{}' and entity name '{}'", ovf.getEntityId(), ovf.getEntityName());
}
initUnregisteredDisksToDB(getParameters().getStorageDomainId());
}
// upgrade the domain format to the storage pool format
updateStorageDomainFormatIfNeeded(getStorageDomain());
return null;
});
if (getParameters().getActivate()) {
attemptToActivateDomain();
}
setSucceeded(true);
}
}
}
Aggregations