use of org.ovirt.engine.core.common.businessentities.storage.Disk in project ovirt-engine by oVirt.
the class VmTemplateHandler method updateDisksFromDb.
public void updateDisksFromDb(VmTemplate vmt) {
vmt.getDiskTemplateMap().clear();
vmt.getDiskImageMap().clear();
vmt.getDiskList().clear();
List<Disk> diskList = diskDao.getAllForVm(vmt.getId());
for (Disk dit : diskList) {
DiskImage diskImage = (DiskImage) dit;
vmt.getDiskTemplateMap().put(dit.getId(), diskImage);
vmt.getDiskImageMap().put(dit.getId(), diskImage);
DiskVmElement dve = diskVmElementDao.get(new VmDeviceId(dit.getId(), vmt.getId()));
dit.setDiskVmElements(Collections.singletonList(dve));
vmt.getDiskList().add(diskImage);
}
}
use of org.ovirt.engine.core.common.businessentities.storage.Disk in project ovirt-engine by oVirt.
the class AddDiskCommand method validate.
@Override
protected boolean validate() {
if (!isFloatingDisk() && (!validate(new VmValidator(getVm()).isVmExists()) || !validateDiskVmData())) {
return false;
}
Disk diskInfo = getParameters().getDiskInfo();
if (diskInfo.getDiskStorageType() == DiskStorageType.IMAGE || diskInfo.getDiskStorageType() == DiskStorageType.CINDER) {
getDiskImageInfo().setDiskSnapshot(false);
}
VM vm = getVm();
DiskValidator diskValidator = getDiskValidator(getParameters().getDiskInfo());
DiskVmElementValidator diskVmElementValidator = getDiskVmElementValidator(getParameters().getDiskInfo(), getDiskVmElement());
if (vm != null) {
if (!validateDiskVmData() || !canRunActionOnNonManagedVm()) {
return false;
}
updateDisksFromDb();
if (getDiskVmElement().isBoot() && !validate(diskValidator.isVmNotContainsBootDisk(vm))) {
return false;
}
if (!validatePassDiscardSupported(diskVmElementValidator)) {
return false;
}
// if user sent drive check that its not in use
if (!isDiskPassPciAndIdeLimit()) {
return false;
}
if (!validate(diskVmElementValidator.isReadOnlyPropertyCompatibleWithInterface())) {
return false;
}
} else if (Boolean.TRUE.equals(getParameters().getPlugDiskToVm())) {
return failValidation(EngineMessage.CANNOT_ADD_FLOATING_DISK_WITH_PLUG_VM_SET);
}
if (!validateQuota()) {
return false;
}
if (DiskStorageType.IMAGE == getParameters().getDiskInfo().getDiskStorageType()) {
if (!checkIfImageDiskCanBeAdded(vm, diskVmElementValidator)) {
return false;
}
return setAndValidateDiskProfiles();
}
if (DiskStorageType.LUN == getParameters().getDiskInfo().getDiskStorageType()) {
return checkIfLunDiskCanBeAdded(diskValidator);
}
if (DiskStorageType.CINDER == getParameters().getDiskInfo().getDiskStorageType()) {
CinderDisk cinderDisk = (CinderDisk) getParameters().getDiskInfo();
cinderDisk.setStorageIds(new ArrayList<>(Collections.singletonList(getStorageDomainId())));
StorageDomainValidator storageDomainValidator = createStorageDomainValidator();
CinderDisksValidator cinderDisksValidator = new CinderDisksValidator(cinderDisk);
return validate(storageDomainValidator.isDomainExistAndActive()) && validate(cinderDisksValidator.validateCinderDiskLimits()) && validate(cinderDisksValidator.validateCinderVolumeTypesExist());
}
return true;
}
use of org.ovirt.engine.core.common.businessentities.storage.Disk in project ovirt-engine by oVirt.
the class GetAllDisksByVmIdQuery method executeQueryCommand.
@Override
protected void executeQueryCommand() {
List<Disk> allDisks = diskDao.getAllForVm(getParameters().getId(), getUserID(), getParameters().isFiltered());
List<Disk> disks = new ArrayList<>();
for (Disk disk : allDisks) {
if (disk.getDiskStorageType() == DiskStorageType.IMAGE || disk.getDiskStorageType() == DiskStorageType.CINDER) {
DiskImage diskImage = (DiskImage) disk;
diskImage.getSnapshots().addAll(diskImageDao.getAllSnapshotsForLeaf(diskImage.getImageId()));
}
DiskVmElement dve = getDiskVmElement(disk);
if (dve != null) {
disk.setDiskVmElements(Collections.singletonList(dve));
disks.add(disk);
}
}
getQueryReturnValue().setReturnValue(disks);
}
use of org.ovirt.engine.core.common.businessentities.storage.Disk in project ovirt-engine by oVirt.
the class VmHandlerTest method populateVmWithDisks.
private void populateVmWithDisks(List<Disk> disks, VM vm) {
vmHandler.updateDisksForVm(vm, disks);
for (Disk disk : disks) {
VmDevice device = new VmDevice(new VmDeviceId(disk.getId(), vm.getId()), VmDeviceGeneralType.DISK, VmDeviceType.DISK.getName(), "", null, true, true, false, "", null, disk.getDiskStorageType() == DiskStorageType.IMAGE ? ((DiskImage) disk).getSnapshotId() : null, null);
vm.getManagedVmDeviceMap().put(disk.getId(), device);
}
}
use of org.ovirt.engine.core.common.businessentities.storage.Disk in project ovirt-engine by oVirt.
the class LibvirtVmXmlBuilder method writeDevices.
private void writeDevices() {
List<VmDevice> devices = vmInfoBuildUtils.getVmDevices(vm.getId());
// replacement of some devices in run-once mode should eventually be done by the run-command
devices = overrideDevicesForRunOnce(devices);
devices = processPayload(devices);
devices.stream().filter(d -> d.getSpecParams() == null).forEach(d -> d.setSpecParams(Collections.emptyMap()));
writer.writeStartElement("devices");
if (vm.getClusterArch() != ArchitectureType.s390x && !(vm.getClusterArch().getFamily() == ArchitectureType.ppc && vm.getVmType() == VmType.HighPerformance)) {
// no mouse or tablet for s390x and for HP VMS with ppc architecture type
writeInput();
}
writeGuestAgentChannels();
if (vm.getClusterArch() == ArchitectureType.ppc64 || vm.getClusterArch() == ArchitectureType.ppc64le) {
writeEmulator();
}
Map<DiskInterface, Integer> controllerIndexMap = ArchStrategyFactory.getStrategy(vm.getClusterArch()).run(new GetControllerIndices()).returnValue();
int virtioScsiIndex = controllerIndexMap.get(DiskInterface.VirtIO_SCSI);
List<VmDevice> interfaceDevices = new ArrayList<>();
List<VmDevice> diskDevices = new ArrayList<>();
List<VmDevice> cdromDevices = new ArrayList<>();
VmDevice floppyDevice = null;
boolean spiceExists = false;
boolean balloonExists = false;
boolean forceRefreshDevices = false;
for (VmDevice device : devices) {
if (!device.isPlugged()) {
continue;
}
switch(device.getType()) {
case BALLOON:
balloonExists = true;
writeBalloon(device);
break;
case SMARTCARD:
writeSmartcard(device);
break;
case WATCHDOG:
writeWatchdog(device);
break;
case MEMORY:
// memory devices are only used for hot-plug
break;
case VIDEO:
writeVideo(device);
break;
case CONTROLLER:
switch(device.getDevice()) {
case "virtio-serial":
device.getSpecParams().put("index", 0);
device.getSpecParams().put("ports", 16);
break;
case "virtio-scsi":
device.setDevice(VdsProperties.Scsi);
device.getSpecParams().put("index", virtioScsiIndex++);
device.getSpecParams().put("model", "virtio-scsi");
break;
}
writeController(device);
break;
case GRAPHICS:
writeGraphics(device);
spiceExists = spiceExists || device.getDevice().equals("spice");
break;
case SOUND:
writeSound(device);
break;
case RNG:
writeRng(device);
break;
case CONSOLE:
writeConsole(device);
if ("serial".equals(device.getSpecParams().get("consoleType"))) {
serialConsolePath = getSerialConsolePath(device);
}
break;
case DISK:
switch(VmDeviceType.getByName(device.getDevice())) {
case CDROM:
cdromDevices.add(device);
break;
case DISK:
diskDevices.add(device);
break;
case FLOPPY:
if (floppyDevice == null || !VmPayload.isPayload(floppyDevice.getSpecParams())) {
floppyDevice = device;
}
break;
default:
}
break;
case INTERFACE:
interfaceDevices.add(device);
break;
case REDIR:
writeRedir(device);
break;
case REDIRDEV:
break;
case CHANNEL:
break;
case HOSTDEV:
HostDevice hostDevice = hostDevicesSupplier.get().get(device.getDevice());
if (hostDevice == null) {
if (!"mdev".equals(device.getDevice())) {
log.info("skipping VM host device {} for VM {}, no corresponding host device was found", device.getDevice(), device.getVmId());
}
forceRefreshDevices = true;
break;
}
writeHostDevice(device, hostDevice);
break;
case UNKNOWN:
break;
default:
break;
}
}
if (forceRefreshDevices) {
vmInfoBuildUtils.refreshVmDevices(vm.getId());
}
if (!balloonExists) {
writeDefaultBalloon();
}
writeSerialConsole(serialConsolePath);
if (spiceExists) {
writeSpiceVmcChannel();
}
updateBootOrder(diskDevices, cdromDevices, interfaceDevices);
writeInterfaces(interfaceDevices);
writeCdRom(cdromDevices);
writeFloppy(floppyDevice);
// we must write the disk after writing cd-rom and floppy to know reserved indices
writeDisks(diskDevices);
writeLeases();
writer.writeEndElement();
}
Aggregations