Liron Ar has uploaded a new change for review. Change subject: core, restapi: provide capabillity to get vm ovf config ......................................................................
core, restapi: provide capabillity to get vm ovf config This patch adds the capabllity to get the current vm configuration (if possible) through the ovirt rest-api. The usage is done through a GET request to /api/vms or /api/vms/GUID/ with All-Content header with 'true' as the value. If the VM OVF configuration couldn't be generated succesfully (if the vm is currentky locked for example), the configuration won't be returned as part of the result. Change-Id: I5cbcd666519ffd138fd3efd4e130495529eaec0f Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=1047965 Signed-off-by: Liron Aravot <lara...@redhat.com> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java A backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java A backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.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 M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java 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 M backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java 11 files changed, 287 insertions(+), 5 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/10/24410/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java new file mode 100644 index 0000000..4d16b32 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQuery.java @@ -0,0 +1,38 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters; +import org.ovirt.engine.core.dao.VmDAO; + +public class GetVmOvfByVmIdQuery<P extends GetVmOvfByVmIdParameters> extends QueriesCommandBase<P> { + + public GetVmOvfByVmIdQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + VM vm = getVmDao().get(getParameters().getId(), getUserID(), getParameters().isFiltered()); + if (vm == null || vm.getDbGeneration() != getParameters().getRequiredGeneration()) { + getQueryReturnValue().setSucceeded(false); + return; + } + + + String ovfData = generateOvfConfig(vm); + + if (ovfData == null) { + return; + } + + getQueryReturnValue().setReturnValue(ovfData); + } + + protected VmDAO getVmDao() { + return getDbFacade().getVmDao(); + } + + protected String generateOvfConfig(VM vm) { + return new OvfHelper().generateOvfConfigurationForVm(vm); + } +} diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java index e1c644f..0e96c62 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/OvfHelper.java @@ -4,10 +4,16 @@ import java.util.List; import java.util.Map; +import org.apache.commons.lang.StringUtils; +import org.ovirt.engine.core.bll.utils.ClusterUtils; +import org.ovirt.engine.core.bll.validator.DiskImagesValidator; import org.ovirt.engine.core.common.businessentities.DiskImage; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.VMStatus; +import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; import org.ovirt.engine.core.utils.ovf.OvfManager; import org.ovirt.engine.core.utils.ovf.OvfReaderException; @@ -50,6 +56,57 @@ return vm; } + public String generateOvfConfigurationForVm(VM vm) { + if (VMStatus.ImageLocked != vm.getStatus()) { + VmHandler.updateDisksFromDb(vm); + DiskImagesValidator validator = new DiskImagesValidator(vm.getDiskList()); + if (validator.diskImagesNotLocked().isValid()) { + loadVmData(vm); + Long currentDbGeneration = getDbFacade().getVmStaticDao().getDbGeneration(vm.getId()); + // currentDbGeneration can be null in case that the vm was deleted during the run of OvfDataUpdater. + if (currentDbGeneration != null && vm.getStaticData().getDbGeneration() == currentDbGeneration) { + return buildMetadataDictionaryForVm(vm); + } + } + } + + return null; + } + + /** + * Adds the given vm metadata to the given map + */ + private String buildMetadataDictionaryForVm(VM vm) { + ArrayList<DiskImage> AllVmImages = new ArrayList<DiskImage>(); + List<DiskImage> filteredDisks = ImagesHandler.filterImageDisks(vm.getDiskList(), false, true, true); + + for (DiskImage diskImage : filteredDisks) { + List<DiskImage> images = ImagesHandler.getAllImageSnapshots(diskImage.getImageId(), + diskImage.getImageTemplateId()); + AllVmImages.addAll(images); + } + + return ovfManager.ExportVm(vm, AllVmImages, ClusterUtils.getCompatibilityVersion(vm)); + } + + private void loadVmData(VM vm) { + if (vm.getInterfaces().isEmpty()) { + vm.setInterfaces(getDbFacade().getVmNetworkInterfaceDao().getAllForVm(vm.getId())); + } + if (StringUtils.isEmpty(vm.getVmtName())) { + if (!Guid.Empty.equals(vm.getVmtGuid())) { + VmTemplate t = getDbFacade().getVmTemplateDao().get(vm.getVmtGuid()); + vm.setVmtName(t.getName()); + } else { + vm.setVmtName(VmTemplateHandler.BLANK_VM_TEMPLATE_NAME); + } + } + } + + private DbFacade getDbFacade() { + return DbFacade.getInstance(); + } + public boolean isOvfTemplate(String ovfstring) { return ovfManager.IsOvfTemplate(ovfstring); } diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java new file mode 100644 index 0000000..2ca18e4 --- /dev/null +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetVmOvfByVmIdQueryTest.java @@ -0,0 +1,78 @@ +package org.ovirt.engine.core.bll; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; +import static org.mockito.Matchers.any; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.times; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters; +import org.ovirt.engine.core.compat.Guid; +import org.ovirt.engine.core.dao.VmDAO; + +@RunWith(MockitoJUnitRunner.class) +public class GetVmOvfByVmIdQueryTest extends AbstractUserQueryTest<GetVmOvfByVmIdParameters, GetVmOvfByVmIdQuery<GetVmOvfByVmIdParameters>> { + + @Mock + private VmDAO vmDAO; + + @Before + @Override + public void setUp() throws Exception { + super.setUp(); + setUpDAOMocks(); + doReturn("config").when(getQuery()).generateOvfConfig(any(VM.class)); + } + + private VM createVm(Guid existingVmId, long dbGeneration) { + VM vm = new VM(); + vm.setId(existingVmId); + + vm.setDbGeneration(dbGeneration); + return vm; + } + + private void setUpDAOMocks() { + doReturn(vmDAO).when(getQuery()).getVmDao(); + } + + @Test + public void dbGenerationNotAsParametersDbGen() { + Guid id = Guid.newGuid(); + long dbGeneration = 5; + VM vm = createVm(id, dbGeneration); + doReturn(vm).when(vmDAO).get(any(Guid.class), any(Guid.class), anyBoolean()); + when(getQueryParameters().getRequiredGeneration()).thenReturn(dbGeneration - 1); + GetVmOvfByVmIdQuery query = getQuery(); + query.execute(); + verify(query, never()).generateOvfConfig(any(VM.class)); + assertFalse(query.getQueryReturnValue().getSucceeded()); + assertNull(query.getQueryReturnValue().getReturnValue()); + } + + @Test + public void dbGenerationSameAsParametersDbGen() { + Guid id = Guid.newGuid(); + long dbGeneration = 5; + VM vm = createVm(id, dbGeneration); + doReturn(vm).when(vmDAO).get(any(Guid.class), any(Guid.class), anyBoolean()); + when(getQueryParameters().getRequiredGeneration()).thenReturn(dbGeneration); + GetVmOvfByVmIdQuery query = getQuery(); + query.execute(); + verify(query, times(1)).generateOvfConfig(any(VM.class)); + assertTrue(query.getQueryReturnValue().getSucceeded()); + assertNotNull(query.getQueryReturnValue().getReturnValue()); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java new file mode 100644 index 0000000..d14ac85 --- /dev/null +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetVmOvfByVmIdParameters.java @@ -0,0 +1,24 @@ +package org.ovirt.engine.core.common.queries; + +import org.ovirt.engine.core.compat.Guid; + +public class GetVmOvfByVmIdParameters extends IdQueryParameters { + + long requiredGeneration; + + public GetVmOvfByVmIdParameters(Guid id, long requiredGeneration) { + super(id); + this.requiredGeneration = requiredGeneration; + } + + public GetVmOvfByVmIdParameters() { + } + + public long getRequiredGeneration() { + return requiredGeneration; + } + + public void setRequiredGeneration(long requiredGeneration) { + this.requiredGeneration = requiredGeneration; + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 3dc50bc..da459ca 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -13,6 +13,7 @@ GetVmCustomProperties(VdcQueryAuthType.User), GetVmConfigurationBySnapshot(VdcQueryAuthType.User), GetVmFromConfiguration(VdcQueryAuthType.User), + GetVmOvfByVmId(VdcQueryAuthType.User), GetSnapshotBySnapshotId(VdcQueryAuthType.User), GetVmsByDiskGuid, GetVmPayload(VdcQueryAuthType.User), 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 ec29494..54187bd 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 @@ -369,6 +369,7 @@ protected VM doPopulate(VM model, org.ovirt.engine.core.common.businessentities.VM entity) { parent.setConsoleDevice(model); parent.setVirtioScsiController(model); + parent.setVmOvfConfiguration(model, entity); return model; } 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 cf2d369..aa36aa0 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 @@ -6,6 +6,7 @@ import java.util.List; import java.util.Map; import java.util.Set; + import javax.ws.rs.WebApplicationException; import javax.ws.rs.core.Response; @@ -13,9 +14,9 @@ import org.ovirt.engine.api.common.util.DetailHelper.Detail; import org.ovirt.engine.api.model.Action; import org.ovirt.engine.api.model.Certificate; -import org.ovirt.engine.api.model.Console; import org.ovirt.engine.api.model.Configuration; import org.ovirt.engine.api.model.ConfigurationType; +import org.ovirt.engine.api.model.Console; import org.ovirt.engine.api.model.Disk; import org.ovirt.engine.api.model.Disks; import org.ovirt.engine.api.model.Display; @@ -50,6 +51,7 @@ import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.osinfo.OsRepository; import org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters; +import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.NameQueryParameters; @@ -540,6 +542,21 @@ vm.getMemoryPolicy().setBallooning(balloonEnabled); } + protected VM setVmOvfConfiguration (VM model, org.ovirt.engine.core.common.businessentities.VM entity) { + VdcQueryReturnValue queryReturnValue = + runQuery(VdcQueryType.GetVmOvfByVmId, + new GetVmOvfByVmIdParameters(entity.getId(), entity.getDbGeneration())); + + if (queryReturnValue.getSucceeded() && queryReturnValue.getReturnValue() != null) { + String configuration = queryReturnValue.getReturnValue(); + return VmMapper.map(configuration, + ConfigurationType.OVF, + model); + } + + return model; + } + protected void setConsoleDevice(VM model) { if (!model.isSetConsole()) { model.setConsole(new Console()); @@ -585,6 +602,7 @@ setConsoleDevice(model); setVirtioScsiController(model); setCertificateInfo(model); + setVmOvfConfiguration(model, entity); return model; } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java index 53f9f2a..e3b2dae 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmResourceTest.java @@ -63,6 +63,7 @@ import org.ovirt.engine.core.common.businessentities.VmStatistics; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.osinfo.OsRepository; +import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.NameQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -168,7 +169,8 @@ populates.add("true"); expect(httpHeaders.getRequestHeader(BackendResource.POPULATE)).andReturn(populates).anyTimes(); setUpGetConsoleExpectations(new int[]{0}); - setUpGetVirtioScsiExpectations(new int[] {0}); + setUpGetVirtioScsiExpectations(new int[]{0}); + setUpGetVmOvfExpectations(new int[]{0}); } setUpGetEntityExpectations(1); setUpGetPayloadExpectations(0, 1); @@ -209,7 +211,8 @@ setUpGetPayloadExpectations(0, 2); setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); - setUpGetConsoleExpectations(new int[] {0}); + setUpGetConsoleExpectations(new int[]{0}); + setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm, VmManagementParametersBase.class, @@ -235,7 +238,8 @@ setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); - setUpGetConsoleExpectations(new int[] {0}); + setUpGetConsoleExpectations(new int[]{0}); + setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); setUriInfo(setUpActionExpectations(VdcActionType.UpdateVm, @@ -277,6 +281,7 @@ setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); setUpGetConsoleExpectations(new int[]{0}); + setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); setUpGetEntityExpectations("Hosts: name=" + NAMES[1], SearchType.VDS, @@ -313,7 +318,8 @@ setUpGetPayloadExpectations(0, 2); setUpGetBallooningExpectations(); setUpGetBallooningExpectations(); - setUpGetConsoleExpectations(new int[] {0}); + setUpGetConsoleExpectations(new int[]{0}); + setUpGetVmOvfExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[] {0}); setUriInfo(setUpActionExpectations(VdcActionType.ChangeVMCluster, ChangeVMClusterParameters.class, @@ -955,4 +961,13 @@ } } + private void setUpGetVmOvfExpectations(int ... idxs) throws Exception { + for (int i = 0; i < idxs.length; i++) { + setUpGetEntityExpectations(VdcQueryType.GetVmOvfByVmId, + GetVmOvfByVmIdParameters.class, + new String[] { "Id", "RequiredGeneration" }, + new Object[] { GUIDS[idxs[i]], 0L }, + "configuration"); + } + } } 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..c5087a1 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 @@ -53,6 +53,7 @@ import org.ovirt.engine.core.common.businessentities.VmType; import org.ovirt.engine.core.common.interfaces.SearchType; import org.ovirt.engine.core.common.queries.GetVmFromConfigurationQueryParameters; +import org.ovirt.engine.core.common.queries.GetVmOvfByVmIdParameters; import org.ovirt.engine.core.common.queries.GetVmTemplateParameters; import org.ovirt.engine.core.common.queries.IdQueryParameters; import org.ovirt.engine.core.common.queries.VdcQueryType; @@ -235,6 +236,7 @@ setUpGetBallooningExpectations(1, 0); setUpGetConsoleExpectations(new int[]{0}); setUpGetVirtioScsiExpectations(new int[]{0}); + setUpGetVmOvfExpectations(new int[]{0}); setUpGetCertuficateExpectations(1, 0); setUpEntityQueryExpectations(VdcQueryType.GetVdsGroupByVdsGroupId, IdQueryParameters.class, @@ -282,6 +284,7 @@ setUpHttpHeaderExpectations("Expect", "201-created"); setUpGetPayloadExpectations(2, 0); setUpGetConsoleExpectations(new int[]{0, 0}); + setUpGetVmOvfExpectations(new int[]{0, 0}); setUpGetVirtioScsiExpectations(new int[]{0, 0}); setUpGetBallooningExpectations(2, 0); setUpGetCertuficateExpectations(2, 0); @@ -338,6 +341,7 @@ setUpGetPayloadExpectations(2, 0); setUpGetBallooningExpectations(2, 0); setUpGetConsoleExpectations(new int[]{0, 0}); + setUpGetVmOvfExpectations(new int[]{0, 0}); setUpGetVirtioScsiExpectations(new int[]{0, 0}); setUpGetCertuficateExpectations(2, 0); setUpEntityQueryExpectations(VdcQueryType.GetVmByVmId, @@ -389,6 +393,7 @@ setUpGetPayloadExpectations(2, 0); setUpGetBallooningExpectations(2, 0); setUpGetConsoleExpectations(new int[]{0, 0}); + setUpGetVmOvfExpectations(new int[]{0, 0}); setUpGetVirtioScsiExpectations(new int[]{0, 0}); setUpGetCertuficateExpectations(2, 0); setUpHttpHeaderExpectations("Expect", "201-created"); @@ -487,6 +492,7 @@ setUpGetPayloadExpectations(1, 2); setUpGetBallooningExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpGetCertuficateExpectations(1, 2); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, @@ -535,6 +541,7 @@ setUpGetBallooningExpectations(1, 2); setUpGetCertuficateExpectations(1, 2); setUpGetConsoleExpectations(new int[]{0, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpEntityQueryExpectations(VdcQueryType.GetVmConfigurationBySnapshot, IdQueryParameters.class, @@ -569,6 +576,7 @@ setUpGetPayloadExpectations(1, 2); setUpGetBallooningExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpGetCertuficateExpectations(1, 2); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, @@ -607,6 +615,7 @@ setUpGetBallooningExpectations(1, 2); setUpGetCertuficateExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, GetVmTemplateParameters.class, @@ -643,6 +652,7 @@ setUpGetBallooningExpectations(1, 2); setUpGetCertuficateExpectations(1, 2); setUpGetConsoleExpectations(new int[]{2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); VM model = createModel(null); org.ovirt.engine.core.common.businessentities.VM returnedVM = getEntity(2); @@ -680,6 +690,7 @@ setUpGetBallooningExpectations(1, 2); setUpGetCertuficateExpectations(1, 2); setUpGetConsoleExpectations(new int[]{2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); VM model = createModel(null); org.ovirt.engine.core.common.businessentities.VM returnedVM = getEntity(2); @@ -774,6 +785,7 @@ setUpGetPayloadExpectations(1, 2); setUpGetBallooningExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpGetCertuficateExpectations(1, 2); setUpGetEntityExpectations("Hosts: name=" + NAMES[1], @@ -825,6 +837,7 @@ setUpGetPayloadExpectations(1, 2); setUpGetBallooningExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpGetCertuficateExpectations(1, 2); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, @@ -865,6 +878,7 @@ setUpGetPayloadExpectations(1, 2); setUpGetBallooningExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpGetCertuficateExpectations(1, 2); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, @@ -926,6 +940,7 @@ setUpGetBallooningExpectations(1, 2); setUpGetCertuficateExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, GetVmTemplateParameters.class, @@ -977,6 +992,7 @@ setUpGetCertuficateExpectations(1, 2); setUpGetConsoleExpectations(new int[]{1, 2}); + setUpGetVmOvfExpectations(new int[]{2}); setUpGetVirtioScsiExpectations(new int[]{2}); setUpEntityQueryExpectations(VdcQueryType.GetVmTemplate, GetVmTemplateParameters.class, @@ -1047,6 +1063,7 @@ setUpGetPayloadExpectations(3); setUpGetBallooningExpectations(3); setUpGetConsoleExpectations(new int[]{0, 1, 2}); + setUpGetVmOvfExpectations(new int[]{0, 1, 2}); setUpGetVirtioScsiExpectations(new int[]{0, 1, 2}); setUpGetCertuficateExpectations(3); } @@ -1065,6 +1082,7 @@ setUpGetPayloadExpectations(3); setUpGetBallooningExpectations(3); setUpGetConsoleExpectations(new int[]{0, 1, 2}); + setUpGetVmOvfExpectations(new int[]{0, 1, 2}); setUpGetVirtioScsiExpectations(new int[]{0, 1, 2}); setUpGetCertuficateExpectations(3); setUpQueryExpectations(""); @@ -1412,4 +1430,13 @@ } } + private void setUpGetVmOvfExpectations(int ... idxs) throws Exception { + for (int i = 0; i < idxs.length; i++) { + setUpGetEntityExpectations(VdcQueryType.GetVmOvfByVmId, + GetVmOvfByVmIdParameters.class, + new String[] { "Id", "RequiredGeneration" }, + new Object[] { GUIDS[idxs[i]], 0L }, + "configuration"); + } + } } 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..1092148 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 @@ -17,6 +17,7 @@ import org.ovirt.engine.api.model.CPU; import org.ovirt.engine.api.model.CloudInit; import org.ovirt.engine.api.model.Cluster; +import org.ovirt.engine.api.model.Configuration; import org.ovirt.engine.api.model.ConfigurationType; import org.ovirt.engine.api.model.CpuMode; import org.ovirt.engine.api.model.CpuTopology; @@ -703,6 +704,14 @@ } } + public static VM map(String configuration, ConfigurationType type, VM vm) { + vm.setInitialization(new Initialization()); + vm.getInitialization().setConfiguration(new Configuration()); + vm.getInitialization().getConfiguration().setData(configuration); + vm.getInitialization().getConfiguration().setType(type.value()); + return vm; + } + @Mapping(from = org.ovirt.engine.api.model.VmDeviceType.class, to = VmDeviceType.class) public static VmDeviceType map(org.ovirt.engine.api.model.VmDeviceType deviceType, VmDeviceType template) { switch (deviceType) { diff --git a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java index b3ac68c..5ec55ad 100644 --- a/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java +++ b/backend/manager/modules/restapi/types/src/test/java/org/ovirt/engine/api/restapi/types/VmMapperTest.java @@ -162,6 +162,20 @@ assertEquals(payload.getVolumeId(), vmPayload.getVolumeId()); } + + @Test + public void ovfConfigurationMap() { + String ovfConfig = "config"; + ConfigurationType configurationType = ConfigurationType.OVF; + VM model = new VM(); + VmMapper.map(ovfConfig, ConfigurationType.OVF, model); + assertNotNull(model.getInitialization()); + assertNotNull(model.getInitialization().getConfiguration()); + assertEquals(model.getInitialization().getConfiguration().getData(), ovfConfig); + assertEquals(ConfigurationType.fromValue(model.getInitialization().getConfiguration().getType()), + configurationType); + } + @Test public void testGustIp() { org.ovirt.engine.core.common.businessentities.VM vm = new org.ovirt.engine.core.common.businessentities.VM(); -- To view, visit http://gerrit.ovirt.org/24410 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I5cbcd666519ffd138fd3efd4e130495529eaec0f Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: ovirt-engine-3.4 Gerrit-Owner: Liron Ar <lara...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches