Alissa Bonas has uploaded a new change for review. Change subject: restapi: add use_latest_template_version to vm restapi ......................................................................
restapi: add use_latest_template_version to vm restapi Add the new optional parameter that is relevant for stateless vm creation. It can be also passed when updating a vm. By using it, users can select to always create stateless vm based on its latest version of the used template. Feature page http://www.ovirt.org/Features/Template_Versions#REST_API Change-Id: I38b569f7ef6df4d485dac15b804427c8248ab540 Signed-off-by: Alissa Bonas <abo...@redhat.com> --- 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/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java 4 files changed, 78 insertions(+), 15 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/60/23560/5 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 d847be4..d4603fb 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 @@ -2649,6 +2649,7 @@ <xs:element ref="reported_devices" minOccurs="0" maxOccurs="1"/> <xs:element ref="watchdogs" minOccurs="0" maxOccurs="1"/> + <xs:element name="use_latest_template_version" type="xs:boolean" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:extension> </xs:complexContent> 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 2e40b16..913624c 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 @@ -89,6 +89,7 @@ vm.tunnel_migration: xs:boolean vm.migration_downtime: xs:int vm.virtio_scsi.enabled: xs:boolean + vm.use_latest_template_version: xs:boolean vm.payloads.payload--COLLECTION: {payload.type: 'xs:string', payload.volume_id: 'xs:string', payload.files.file--COLLECTION: {file.name: 'xs:string', file.content: 'xs:string'}} vm.cpu.cpu_tune.vcpu_pin--COLLECTION: {vcpu_pin.vcpu: 'xs:int', vcpu_pin.cpu_set: 'xs:string'} description: update the virtual machine in the system for the given virtual machine id with the values specified in the request @@ -167,6 +168,7 @@ vm.initialization.configuration.type: 'xs:string' vm.initialization.configuration.data: 'xs:string' vm.cpu.cpu_tune.vcpu_pin--COLLECTION: {vcpu_pin.vcpu: 'xs:int', vcpu_pin.cpu_set: 'xs:string'} + vm.use_latest_template_version: xs:boolean description: add a virtual machine to the system from scratch # the following signature is for clone VM from a Snapshot - requires the Snapshot ID - mandatoryArguments: {vm.name: 'xs:string', vm.template.id|name: 'xs:string', vm.cluster.id|name: 'xs:string', diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java index 9b4602d..649148e 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmsResourceTest.java @@ -601,7 +601,7 @@ } @Test - public void testAdd() throws Exception { + public void testAddStatelessWithLatestTemplateVersion() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpGetPayloadExpectations(1, 2); setUpGetBallooningExpectations(1, 2); @@ -618,25 +618,71 @@ new String[] { "Id" }, new Object[] { GUIDS[2] }, getVdsGroupEntity()); + + org.ovirt.engine.core.common.businessentities.VM vm = getEntity(2); + expect(vm.getVmtGuid()).andReturn(GUIDS[1]).anyTimes(); + expect(vm.isStateless()).andReturn(true).anyTimes(); + expect(vm.isUseLatestVersion()).andReturn(true).anyTimes(); + setUpCreationExpectations(VdcActionType.AddVm, - VmManagementParametersBase.class, - new String[] { "StorageDomainId" }, - new Object[] { GUIDS[0] }, - true, - true, - GUIDS[2], - VdcQueryType.GetVmByVmId, - IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { GUIDS[2] }, - getEntity(2)); + VmManagementParametersBase.class, + new String[]{"StorageDomainId"}, + new Object[]{GUIDS[0]}, + true, + true, + GUIDS[2], + VdcQueryType.GetVmByVmId, + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{GUIDS[2]}, + vm); + Response response = collection.add(createModel(null)); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof VM); - verifyModel((VM) response.getEntity(), 2); + VM returnValueVM = (VM) response.getEntity(); + verifyModel(returnValueVM, 2); + assertTrue(returnValueVM.isStateless()); + assertTrue(returnValueVM.isUseLatestTemplateVersion()); } @Test + public void testAdd() throws Exception { + setUriInfo(setUpBasicUriExpectations()); + setUpGetPayloadExpectations(1, 2); + setUpGetBallooningExpectations(1, 2); + setUpGetCertuficateExpectations(1, 2); + setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVirtioScsiExpectations(new int[]{2}); + setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, + GetVmTemplateParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[1] }, + getTemplateEntity(0)); + setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupByVdsGroupId, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[2] }, + getVdsGroupEntity()); + setUpCreationExpectations(VdcActionType.AddVm, + VmManagementParametersBase.class, + new String[] { "StorageDomainId" }, + new Object[] { GUIDS[0] }, + true, + true, + GUIDS[2], + VdcQueryType.GetVmByVmId, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[2] }, + getEntity(2)); + Response response = collection.add(createModel(null)); + assertEquals(201, response.getStatus()); + assertTrue(response.getEntity() instanceof VM); + verifyModel((VM) response.getEntity(), 2); + } + + @Test public void testAddFromConfiguration() throws Exception { setUriInfo(setUpBasicUriExpectations()); setUpGetPayloadExpectations(1, 2); diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java index 4842fa0..bd02353 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/VmMapper.java @@ -144,8 +144,17 @@ //TODO: Get rid of this logic code when Backend supports default memory. staticVm.setMemSizeMb(DEFAULT_MEMORY_SIZE); } - if (vm.isSetTemplate() && vm.getTemplate().getId() != null) { - staticVm.setVmtGuid(GuidUtils.asGuid(vm.getTemplate().getId())); + if (vm.isSetTemplate()) { + if(vm.getTemplate().getId() != null) { + staticVm.setVmtGuid(GuidUtils.asGuid(vm.getTemplate().getId())); + } + // There is no need to pass this property to backend if + // no template was specified. + // If user passes this property for a stateful vm which is not supported, + // it will be handled by the backend. + if(vm.isSetUseLatestTemplateVersion()) { + staticVm.setUseLatestVersion(vm.isUseLatestTemplateVersion()); + } } if (vm.isSetCluster() && vm.getCluster().getId() != null) { staticVm.setVdsGroupId(GuidUtils.asGuid(vm.getCluster().getId())); @@ -345,6 +354,11 @@ if (entity.getVmtGuid() != null) { model.setTemplate(new Template()); model.getTemplate().setId(entity.getVmtGuid().toString()); + // display this property only if the vm is stateless + // otherwise the value of this property is meaningless and misleading + if(entity.isStateless()) { + model.setUseLatestTemplateVersion(entity.isUseLatestVersion()); + } } if (entity.getStatus() != null) { model.setStatus(StatusUtils.create(map(entity.getStatus(), null))); -- To view, visit http://gerrit.ovirt.org/23560 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I38b569f7ef6df4d485dac15b804427c8248ab540 Gerrit-PatchSet: 5 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Alissa Bonas <abo...@redhat.com> Gerrit-Reviewer: Alissa Bonas <abo...@redhat.com> Gerrit-Reviewer: Juan Hernandez <juan.hernan...@redhat.com> Gerrit-Reviewer: Omer Frenkel <ofren...@redhat.com> Gerrit-Reviewer: oVirt Jenkins CI Server _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches