Frank Kobzik has uploaded a new change for review. Change subject: restapi: Make adding (virtio-)console to virtual machines optional ......................................................................
restapi: Make adding (virtio-)console to virtual machines optional This is rest part of a feature that allows users to control attaching virtio console to vm/pools/templates. Change-Id: I733e4c4a9c7d8f5dbe68b6b26a49502b8a40ec9d Bug-Url: https://bugzilla.redhat.com/878459 Signed-off-by: Frantisek Kobzik <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java M backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd M backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java 9 files changed, 48 insertions(+), 9 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/54/16454/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java index 5a7dead..b71fe5d 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/CommonVmPoolWithVmsCommand.java @@ -113,7 +113,7 @@ diskInfoDestinationMap); addVmAndAttachToPoolParams.setSessionId(getParameters().getSessionId()); addVmAndAttachToPoolParams.setParentCommand(VdcActionType.AddVmPoolWithVms); - addVmAndAttachToPoolParams.setSoundDeviceEnabled(getParameters().isSoundDeviceEnabled()); + addVmAndAttachToPoolParams.setSoundDeviceEnabled(Boolean.TRUE.equals(getParameters().isSoundDeviceEnabled())); addVmAndAttachToPoolParams.setConsoleEnabled(getParameters().isConsoleEnabled()); VdcReturnValueBase returnValue = Backend.getInstance().runInternalAction(VdcActionType.AddVmAndAttachToPool, diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd index 108bca9..15dfb9d 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd @@ -1941,6 +1941,7 @@ <xs:element name="display" type="Display" minOccurs="0" maxOccurs="1"/> <xs:element name="stateless" type="xs:boolean" minOccurs="0"/> <xs:element name="delete_protected" type="xs:boolean" minOccurs="0"/> + <xs:element name="console_device_enabled" type="xs:boolean" minOccurs="0"/> <xs:element name="timezone" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element ref="domain" minOccurs="0" maxOccurs="1"/> <xs:element ref="usb" minOccurs="0" maxOccurs="1"/> @@ -2134,6 +2135,7 @@ <xs:element name="origin" type="xs:string" minOccurs="0"/> <xs:element name="stateless" type="xs:boolean" minOccurs="0"/> <xs:element name="delete_protected" type="xs:boolean" minOccurs="0"/> + <xs:element name="console_device_enabled" type="xs:boolean" minOccurs="0"/> <xs:element name="timezone" type="xs:string" minOccurs="0" maxOccurs="1"/> <xs:element ref="domain" minOccurs="0" maxOccurs="1"/> <xs:element name="custom_properties" type="CustomProperties" minOccurs="0"/> diff --git a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml index dbb0ad2..e1150c7 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml +++ b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml @@ -67,6 +67,7 @@ vm.description: xs:string vm.stateless: xs:boolean vm.delete_protected: xs:boolean + vm.console_device_enabled: xs:boolean vm.cpu.topology.sockets: xs:int vm.placement_policy.affinity: xs:string vm.placement_policy.host.id|name: xs:string @@ -126,6 +127,7 @@ vm.description: xs:string vm.stateless: xs:boolean vm.delete_protected: xs:boolean + vm.console_device_enabled: xs:boolean vm.cpu.mode: xs:string vm.cpu.topology.sockets: xs:int vm.placement_policy.affinity: xs:string @@ -164,6 +166,7 @@ vm.description: xs:string vm.stateless: xs:boolean vm.delete_protected: xs:boolean + vm.console_device_enabled: xs:boolean vm.cpu.topology.sockets: xs:int vm.placement_policy.affinity: xs:string vm.placement_policy.host.id|name: xs:string @@ -2387,6 +2390,7 @@ template.type: xs:string template.stateless: 'xs:boolean' template.delete_protected: xs:boolean + template.console_device_enabled: xs:boolean template.placement_policy.affinity: xs:string template.description: xs:string template.custom_properties.custom_property--COLLECTION: {custom_property.name: 'xs:string', custom_property.value: 'xs:string'} @@ -2425,6 +2429,7 @@ template.type: xs:string template.stateless: 'xs:boolean' template.delete_protected: xs:boolean + template.console_device_enabled: xs:boolean template.placement_policy.affinity: xs:string template.description: xs:string template.custom_properties.custom_property--COLLECTION: {custom_property.name: 'xs:string', custom_property.value: 'xs:string'} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendResource.java index 7f2142f..1323ffb 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendResource.java @@ -418,4 +418,11 @@ return doGetEntity(entityType, query, getQueryParams(queryParamsClass, id), id.toString()); } } + + protected List<String> getConsoleDevicesForEntity(Guid id) { + return getEntity(List.class, + VdcQueryType.GetConsoleDevices, + new IdQueryParameters(id), + null, true); + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java index 0482f5e..e784568 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplateResource.java @@ -1,8 +1,8 @@ package org.ovirt.engine.api.restapi.resource; +import java.util.List; import javax.ws.rs.core.Response; - import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.CdRom; import org.ovirt.engine.api.model.CdRoms; @@ -114,7 +114,9 @@ updated.setUsbPolicy(VmMapper.getUsbPolicyOnUpdate(incoming.getUsb(), entity.getUsbPolicy(), lookupCluster(updated.getVdsGroupId()))); - return new UpdateVmTemplateParameters(updated); + UpdateVmTemplateParameters params = new UpdateVmTemplateParameters(updated); + params.setConsoleEnabled(incoming.isSetConsoleDeviceEnabled() && incoming.isConsoleDeviceEnabled()); + return params; } } @@ -124,6 +126,7 @@ @Override protected Template doPopulate(Template model, VmTemplate entity) { + model.setConsoleDeviceEnabled(!getConsoleDevicesForEntity(entity.getId()).isEmpty()); return model; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java index 0cbfc2c..6ffd662 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendTemplatesResource.java @@ -75,6 +75,7 @@ AddVmTemplateParameters params = new AddVmTemplateParameters(staticVm, template.getName(), template.getDescription()); + params.setConsoleEnabled(!getConsoleDevicesForEntity(staticVm.getId()).isEmpty()); boolean isDomainSet = false; if (template.isSetStorageDomain() && template.getStorageDomain().isSetId()) { params.setDestinationStorageDomainId(asGuid(template.getStorageDomain().getId())); @@ -161,6 +162,7 @@ @Override protected Template doPopulate(Template model, VmTemplate entity) { + model.setConsoleDeviceEnabled(!getConsoleDevicesForEntity(new Guid(model.getId())).isEmpty()); return model; } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java index bb2aed9..997646b 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmPoolsResource.java @@ -63,8 +63,11 @@ int size = pool.isSetSize() ? pool.getSize() : 1; + AddVmPoolWithVmsParameters params = new AddVmPoolWithVmsParameters(entity, vm, size, -1); + params.setConsoleEnabled(!getConsoleDevicesForEntity(template.getId()).isEmpty()); + return performCreate(VdcActionType.AddVmPoolWithVms, - new AddVmPoolWithVmsParameters(entity, vm, size, -1), + params, new QueryIdResolver<Guid>(VdcQueryType.GetVmPoolById, IdQueryParameters.class)); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java index 4cc1803..c2ed1c9 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmResource.java @@ -1,15 +1,10 @@ package org.ovirt.engine.api.restapi.resource; -import static org.ovirt.engine.api.restapi.resource.BackendVmsResource.SUB_COLLECTIONS; -import static org.ovirt.engine.core.utils.Ticketing.GenerateOTP; - import java.util.List; import java.util.Set; - import javax.ws.rs.core.HttpHeaders; import javax.ws.rs.core.Response; import javax.ws.rs.core.UriInfo; - import org.ovirt.engine.api.common.util.DetailHelper; import org.ovirt.engine.api.common.util.DetailHelper.Detail; import org.ovirt.engine.api.common.util.LinkHelper; @@ -62,6 +57,10 @@ import org.ovirt.engine.core.common.queries.VdcQueryType; import org.ovirt.engine.core.common.utils.SimpleDependecyInjector; import org.ovirt.engine.core.compat.Guid; + + +import static org.ovirt.engine.api.restapi.resource.BackendVmsResource.SUB_COLLECTIONS; +import static org.ovirt.engine.core.utils.Ticketing.GenerateOTP; public class BackendVmResource extends AbstractBackendActionableResource<VM, org.ovirt.engine.core.common.businessentities.VM> implements @@ -339,6 +338,7 @@ @Override protected VM doPopulate(VM model, org.ovirt.engine.core.common.businessentities.VM entity) { + parent.setConsoleDevice(model); return model; } @@ -389,6 +389,7 @@ if (incoming.isSetMemoryPolicy() && incoming.getMemoryPolicy().isSetBallooning()) { params.setBalloonEnabled(incoming.getMemoryPolicy().isBallooning()); } + params.setConsoleEnabled(incoming.isSetConsoleDeviceEnabled() && incoming.isConsoleDeviceEnabled()); return params; } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java index 59ca65f..cafe0ce 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmsResource.java @@ -144,6 +144,7 @@ prepareImagesForCloneFromSnapshotParams(vm.getDisks(), diskImagesByImageId); } return cloneVmFromSnapshot(vmConfiguration.getStaticData(), + vm, snapshotId, diskImagesByImageId); } @@ -211,6 +212,7 @@ } private Response cloneVmFromSnapshot(VmStatic staticVm, + VM vm, String snapshotId, HashMap<Guid, DiskImage> images) { Guid sourceSnapshotId = asGuid(snapshotId); @@ -218,6 +220,9 @@ new AddVmFromSnapshotParameters(staticVm, sourceSnapshotId); params.setDiskInfoDestinationMap(images); params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner()); + if (vm.isSetConsoleDeviceEnabled()) { + params.setConsoleEnabled(vm.isConsoleDeviceEnabled()); + } return performCreate(VdcActionType.AddVmFromSnapshot, params, new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class)); @@ -228,6 +233,9 @@ params.setVmPayload(getPayload(vm)); if (vm.isSetMemoryPolicy() && vm.getMemoryPolicy().isSetBallooning()) { params.setBalloonEnabled(vm.getMemoryPolicy().isBallooning()); + } + if (vm.isSetConsoleDeviceEnabled()) { + params.setConsoleEnabled(vm.isConsoleDeviceEnabled()); } params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner()); return performCreate(VdcActionType.AddVmFromTemplate, @@ -277,6 +285,7 @@ params.setStorageDomainId(storageDomainId); params.setDiskInfoDestinationMap(getDisksToClone(vm.getDisks(), templateId)); params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner()); + params.setConsoleEnabled(vm.isSetConsoleDeviceEnabled() && vm.isConsoleDeviceEnabled()); return performCreate(VdcActionType.AddVm, params, new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class)); @@ -290,6 +299,7 @@ } params.setMakeCreatorExplicitOwner(shouldMakeCreatorExplicitOwner()); params.setStorageDomainId(storageDomainId); + params.setConsoleEnabled(vm.isSetConsoleDeviceEnabled() && vm.isConsoleDeviceEnabled()); return performCreate(VdcActionType.AddVmFromScratch, params, new QueryIdResolver<Guid>(VdcQueryType.GetVmByVmId, IdQueryParameters.class)); @@ -457,6 +467,10 @@ vm.getMemoryPolicy().setBallooning(balloonEnabled); } + protected void setConsoleDevice(VM model) { + model.setConsoleDeviceEnabled(!getConsoleDevicesForEntity(new Guid(model.getId())).isEmpty()); + } + public void setCertificateInfo(VM model) { VdcQueryReturnValue result = runQuery(VdcQueryType.GetVdsCertificateSubjectByVmId, @@ -485,7 +499,9 @@ protected VM doPopulate(VM model, org.ovirt.engine.core.common.businessentities.VM entity) { setPayload(model); setBallooning(model); + setConsoleDevice(model); setCertificateInfo(model); return model; } + } -- To view, visit http://gerrit.ovirt.org/16454 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I733e4c4a9c7d8f5dbe68b6b26a49502b8a40ec9d Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Frank Kobzik <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
