use of org.ovirt.engine.core.common.businessentities.GraphicsInfo in project ovirt-engine by oVirt.
the class BackendVmGraphicsConsolesResource method list.
@Override
public GraphicsConsoles list() {
GraphicsConsoles consoles = new GraphicsConsoles();
Map<GraphicsType, GraphicsInfo> graphicsTypeToGraphicsInfo;
VM entity = loadEntity();
boolean current = ParametersHelper.getBooleanParameter(httpHeaders, uriInfo, CURRENT, true, false);
if (current) {
// from entity dynamic (e.g. what is now present on the VM
graphicsTypeToGraphicsInfo = extractGraphicsInofs(entity);
} else {
// from devices (e.g. what is configured on the VM)
List<GraphicsType> graphicsTypes = DisplayHelper.getGraphicsTypesForEntity(this, guid, true);
graphicsTypeToGraphicsInfo = new EnumMap<>(GraphicsType.class);
for (GraphicsType type : graphicsTypes) {
graphicsTypeToGraphicsInfo.put(type, null);
}
}
for (Map.Entry<GraphicsType, GraphicsInfo> graphicsInfo : graphicsTypeToGraphicsInfo.entrySet()) {
consoles.getGraphicsConsoles().add(addLinks(populate(VmMapper.map(graphicsInfo, null), entity)));
}
return consoles;
}
use of org.ovirt.engine.core.common.businessentities.GraphicsInfo in project ovirt-engine by oVirt.
the class VmMapper method map.
public static Vm map(org.ovirt.engine.core.common.businessentities.VM entity, Vm template, boolean showDynamicInfo) {
Vm model = template != null ? template : new Vm();
mapVmBaseEntityToModel(model, entity.getStaticData());
if (entity.getVmtGuid() != null) {
model.setTemplate(new Template());
model.getTemplate().setId(entity.getVmtGuid().toString());
// otherwise the value of this property is meaningless and misleading
if (entity.isStateless()) {
model.setUseLatestTemplateVersion(entity.isUseLatestVersion());
}
}
if (entity.getOriginalTemplateGuid() != null) {
model.setOriginalTemplate(new Template());
model.getOriginalTemplate().setId(entity.getOriginalTemplateGuid().toString());
}
if (entity.getInstanceTypeId() != null) {
model.setInstanceType(new InstanceType());
model.getInstanceType().setId(entity.getInstanceTypeId().toString());
}
if (entity.getStatus() != null) {
model.setStatus(mapVmStatus(entity.getStatus()));
if (entity.getStatus() == VMStatus.Paused) {
model.setStatusDetail(entity.getVmPauseStatus().name().toLowerCase());
} else if (entity.getStatus() == VMStatus.Down && entity.getBackgroundOperationDescription() != null) {
model.setStatusDetail(entity.getBackgroundOperationDescription());
}
}
if (entity.getStopReason() != null) {
model.setStopReason(entity.getStopReason());
}
if (entity.getBootSequence() != null || entity.getKernelUrl() != null || entity.getInitrdUrl() != null || entity.getKernelParams() != null) {
OperatingSystem os = new OperatingSystem();
os.setType(SimpleDependencyInjector.getInstance().get(OsRepository.class).getUniqueOsNames().get(entity.getVmOsId()));
os.setKernel(entity.getKernelUrl());
os.setInitrd(entity.getInitrdUrl());
os.setCmdline(entity.getKernelParams());
model.setOs(os);
}
if (entity.isUseHostCpuFlags()) {
model.getCpu().setMode(CpuMode.HOST_PASSTHROUGH);
}
model.getCpu().setCpuTune(stringToCpuTune(entity.getCpuPinning()));
model.getCpu().setArchitecture(CPUMapper.map(entity.getClusterArch(), null));
if (entity.getVmPoolId() != null) {
VmPool pool = new VmPool();
pool.setId(entity.getVmPoolId().toString());
model.setVmPool(pool);
}
model.setDisplay(new Display());
// and dynamic value (current/last run value, that can be different in case of run-once or edit while running)
if (showDynamicInfo && entity.getDynamicData() != null && entity.getStatus().isRunningOrPaused()) {
if (model.getOs() != null && entity.getBootSequence() != null) {
Boot boot = map(entity.getBootSequence(), null);
model.getOs().setBoot(boot);
}
} else {
if (model.getOs() != null) {
Boot boot = map(entity.getDefaultBootSequence(), null);
model.getOs().setBoot(boot);
}
}
if (entity.hasIllegalImages()) {
model.setHasIllegalImages(true);
}
// fill dynamic data
if (entity.getDynamicData() != null && !entity.getStatus().isNotRunning()) {
if (entity.getRunOnVds() != null) {
model.setHost(new Host());
model.getHost().setId(entity.getRunOnVds().toString());
}
final boolean hasFqdn = entity.getFqdn() != null && !entity.getFqdn().isEmpty();
if (hasFqdn) {
model.setFqdn(entity.getFqdn());
}
final boolean hasGuestOsVersion = entity.getGuestOsVersion() != null && !entity.getGuestOsVersion().isEmpty();
if (hasGuestOsVersion) {
GuestOperatingSystem os = model.getGuestOperatingSystem();
if (os == null) {
os = new GuestOperatingSystem();
model.setGuestOperatingSystem(os);
}
os.setArchitecture(entity.getGuestOsArch().name());
os.setCodename(entity.getGuestOsCodename());
os.setDistribution(entity.getGuestOsDistribution());
String kernelVersionString = entity.getGuestOsKernelVersion();
if (StringUtils.isNotEmpty(kernelVersionString)) {
org.ovirt.engine.api.model.Version kernelVersion = VersionMapper.fromVersionString(kernelVersionString);
if (kernelVersion != null) {
if (os.getKernel() == null) {
os.setKernel(new Kernel());
}
os.getKernel().setVersion(kernelVersion);
os.getKernel().getVersion().setFullVersion(entity.getGuestOsKernelVersion());
}
}
String osVersionString = entity.getGuestOsVersion();
if (StringUtils.isNotEmpty(osVersionString)) {
os.setVersion(VersionMapper.fromVersionString(osVersionString));
if (os.getVersion() != null) {
os.getVersion().setFullVersion(entity.getGuestOsVersion());
}
}
os.setFamily(entity.getGuestOsType().name());
}
final boolean hasTimezoneName = entity.getGuestOsTimezoneName() != null && !entity.getGuestOsTimezoneName().isEmpty();
if (hasTimezoneName) {
TimeZone guestTz = model.getGuestTimeZone();
if (guestTz == null) {
guestTz = new TimeZone();
model.setGuestTimeZone(guestTz);
}
guestTz.setName(entity.getGuestOsTimezoneName());
guestTz.setUtcOffset(TimeZoneMapper.mapUtcOffsetToDisplayString(entity.getGuestOsTimezoneOffset()));
}
if (entity.getLastStartTime() != null) {
model.setStartTime(DateMapper.map(entity.getLastStartTime(), null));
}
model.setRunOnce(entity.isRunOnce());
org.ovirt.engine.core.common.businessentities.GraphicsType graphicsType = deriveGraphicsType(entity.getGraphicsInfos());
if (graphicsType != null) {
model.getDisplay().setType(DisplayMapper.map(graphicsType, null));
GraphicsInfo graphicsInfo = entity.getGraphicsInfos().get(graphicsType);
model.getDisplay().setAddress(graphicsInfo == null ? null : graphicsInfo.getIp());
Integer displayPort = graphicsInfo == null ? null : graphicsInfo.getPort();
model.getDisplay().setPort(displayPort == null || displayPort.equals(-1) ? null : displayPort);
Integer displaySecurePort = graphicsInfo == null ? null : graphicsInfo.getTlsPort();
model.getDisplay().setSecurePort(displaySecurePort == null || displaySecurePort.equals(-1) ? null : displaySecurePort);
}
}
if (entity.getLastStopTime() != null) {
model.setStopTime(DateMapper.map(entity.getLastStopTime(), null));
}
model.getDisplay().setMonitors(entity.getNumOfMonitors());
model.getDisplay().setSingleQxlPci(entity.getSingleQxlPci());
model.getDisplay().setAllowOverride(entity.getAllowConsoleReconnect());
model.getDisplay().setSmartcardEnabled(entity.isSmartcardEnabled());
model.getDisplay().setKeyboardLayout(entity.getDefaultVncKeyboardLayout());
model.getDisplay().setFileTransferEnabled(entity.isSpiceFileTransferEnabled());
model.getDisplay().setCopyPasteEnabled(entity.isSpiceCopyPasteEnabled());
model.getDisplay().setProxy(getEffectiveSpiceProxy(entity));
model.getDisplay().setDisconnectAction(map(entity.getConsoleDisconnectAction(), null).toString());
model.setStateless(entity.isStateless());
model.setDeleteProtected(entity.isDeleteProtected());
model.setSso(SsoMapper.map(entity.getSsoMethod(), null));
model.setHighAvailability(new HighAvailability());
model.getHighAvailability().setEnabled(entity.isAutoStartup());
model.getHighAvailability().setPriority(entity.getPriority());
if (entity.getOrigin() != null) {
model.setOrigin(map(entity.getOrigin(), null));
}
if (entity.getVmInit() != null) {
model.setInitialization(InitializationMapper.map(entity.getVmInit(), null));
}
model.setNextRunConfigurationExists(entity.isNextRunConfigurationExists());
model.setNumaTuneMode(map(entity.getNumaTuneMode(), null));
if (entity.getProviderId() != null) {
model.setExternalHostProvider(new ExternalHostProvider());
model.getExternalHostProvider().setId(entity.getProviderId().toString());
}
return model;
}
use of org.ovirt.engine.core.common.businessentities.GraphicsInfo in project ovirt-engine by oVirt.
the class LibvirtVmXmlBuilder method overrideDevicesForRunOnce.
private List<VmDevice> overrideDevicesForRunOnce(List<VmDevice> devices) {
if (!vm.isRunOnce()) {
return devices;
}
// video device handling
DisplayType displayType = vm.getDefaultDisplayType();
if (displayType != null) {
// remove existing video device
devices = devices.stream().filter(dev -> dev.getType() != VmDeviceGeneralType.VIDEO).collect(Collectors.toList());
// add new video device
if (displayType != DisplayType.none) {
devices.add(vmInfoBuildUtils.createVideoDeviceByDisplayType(displayType, vm.getId()));
}
}
// graphics device handling
if (displayType == DisplayType.none || (vm.getGraphicsInfos() != null && !vm.getGraphicsInfos().isEmpty())) {
// remove existing graphics devices
devices = devices.stream().filter(dev -> dev.getType() != VmDeviceGeneralType.GRAPHICS).collect(Collectors.toList());
if (displayType != DisplayType.none) {
// add new graphics devices
Map<GraphicsType, GraphicsInfo> infos = vm.getGraphicsInfos();
Map<String, Object> specParamsFromVm = new HashMap<>();
vmInfoBuildUtils.addVmGraphicsOptions(infos, specParamsFromVm, vm);
devices.addAll(vmInfoBuildUtils.createGraphicsDevices(infos, specParamsFromVm, vm.getId()));
}
}
// the user may specify floppy path while there is no device in the database
if (!StringUtils.isEmpty(vm.getFloppyPath()) && devices.stream().noneMatch(dev -> dev.getDevice().equals(VmDeviceType.FLOPPY.getName()))) {
devices.add(vmInfoBuildUtils.createFloppyDevice(vm));
}
return devices;
}
use of org.ovirt.engine.core.common.businessentities.GraphicsInfo in project ovirt-engine by oVirt.
the class VmInfoBuildUtils method createGraphicsDevices.
public List<VmDevice> createGraphicsDevices(Map<GraphicsType, GraphicsInfo> graphicsInfos, Map<String, Object> extraSpecParams, Guid vmId) {
final Comparator<GraphicsType> spiceLastComparator = ComparatorUtils.sortLast(GraphicsType.SPICE);
final List<Entry<GraphicsType, GraphicsInfo>> sortedGraphicsInfos = graphicsInfos.entrySet().stream().sorted(Comparator.comparing(Entry::getKey, spiceLastComparator)).collect(Collectors.toList());
List<VmDevice> result = new ArrayList<>();
for (Entry<GraphicsType, GraphicsInfo> graphicsInfo : sortedGraphicsInfos) {
VmDevice device = new VmDevice();
device.setId(new VmDeviceId(Guid.newGuid(), vmId));
device.setType(VmDeviceGeneralType.GRAPHICS);
device.setDevice(graphicsInfo.getKey().name().toLowerCase());
device.setPlugged(true);
device.setAddress("");
if (extraSpecParams != null) {
device.setSpecParams(extraSpecParams);
}
result.add(device);
}
return result;
}
use of org.ovirt.engine.core.common.businessentities.GraphicsInfo in project ovirt-engine by oVirt.
the class VdsBrokerObjectsBuilder method updateGraphicsInfo.
/**
* Updates graphics runtime information according displayInfo VDSM structure if it exists.
*
* @param vm - VmDynamic to update
* @param struct - data from VDSM
* @return true if displayInfo exists, false otherwise
*/
private static boolean updateGraphicsInfo(VmDynamic vm, Map<String, Object> struct) {
Object displayInfo = struct.get(VdsProperties.displayInfo);
if (displayInfo == null) {
return false;
}
for (Object info : (Object[]) displayInfo) {
Map<String, String> infoMap = (Map<String, String>) info;
GraphicsType graphicsType = GraphicsType.fromString(infoMap.get(VdsProperties.type));
GraphicsInfo graphicsInfo = new GraphicsInfo();
graphicsInfo.setIp(infoMap.get(VdsProperties.ipAddress)).setPort(parseIntegerOrNull(infoMap.get(VdsProperties.port))).setTlsPort(parseIntegerOrNull(infoMap.get(VdsProperties.tlsPort)));
if (graphicsInfo.getPort() != null || graphicsInfo.getTlsPort() != null) {
vm.getGraphicsInfos().put(graphicsType, graphicsInfo);
}
}
return true;
}
Aggregations