Daniel Erez has uploaded a new change for review. Change subject: restapi: support creation of Cinder disks ......................................................................
restapi: support creation of Cinder disks Support creation of Cinder disks under Disks root-collection and VMs-Disks sub-collection: * Added storage_type element to Disk type. * Modified DiskMapper to instantiate disk entity according to DiskStorageType. * Updated BackendDisksResource and BackendVmDisksResource. * Updated tests accordingly. Feature Page: http://www.ovirt.org/Features/Cinder_Integration Change-Id: I4c07baeed99482ec629778a82a26391cec5767fc Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Daniel Erez <[email protected]> --- A backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskStorageType.java M backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDisksResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResourceTest.java M backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java 7 files changed, 261 insertions(+), 114 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/28/39328/1 diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskStorageType.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskStorageType.java new file mode 100644 index 0000000..069bef5 --- /dev/null +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/model/DiskStorageType.java @@ -0,0 +1,33 @@ +/* +* Copyright (c) 2010 Red Hat, Inc. +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +*/ + +package org.ovirt.engine.api.model; + +public enum DiskStorageType { + IMAGE, LUN, CINDER; + + public String value() { + return name().toLowerCase(); + } + + public static DiskStorageType fromValue(String value) { + try { + return valueOf(value.toUpperCase()); + } catch (RuntimeException e) { + return null; + } + } +} 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 47797b3..f6dc411 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 @@ -3675,6 +3675,7 @@ <xs:element ref="snapshot" minOccurs="0" maxOccurs="1"/> <xs:element ref="disk_profile" minOccurs="0" maxOccurs="1"/> <xs:element name="logical_name" type="xs:string" minOccurs="0" maxOccurs="1"/> + <xs:element name="storage_type" type="xs:string" minOccurs="0" maxOccurs="1"/> </xs:sequence> </xs:extension> </xs:complexContent> diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java index 34c072c..c0a419d 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java @@ -12,6 +12,7 @@ import org.ovirt.engine.api.resource.MovableCopyableDiskResource; import org.ovirt.engine.api.restapi.logging.Messages; import org.ovirt.engine.api.restapi.resource.utils.DiskResourceUtils; +import org.ovirt.engine.api.restapi.types.DiskMapper; import org.ovirt.engine.core.common.action.AddDiskParameters; import org.ovirt.engine.core.common.action.RemoveDiskParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -32,22 +33,37 @@ public Response add(Disk disk) { validateDiskForCreation(disk); AddDiskParameters params = new AddDiskParameters(); - params.setDiskInfo(getMapper(Disk.class, org.ovirt.engine.core.common.businessentities.storage.Disk.class).map(disk, null)); - if (disk.isSetStorageDomains() && disk.getStorageDomains().isSetStorageDomains() && disk.getStorageDomains().getStorageDomains().get(0).isSetId()) { - params.setStorageDomainId(Guid.createGuidFromStringDefaultEmpty(disk.getStorageDomains().getStorageDomains().get(0).getId())); - } else if (disk.isSetStorageDomains() && disk.getStorageDomains().getStorageDomains().get(0).isSetName()) { - Guid storageDomainId = getStorageDomainId(disk.getStorageDomains().getStorageDomains().get(0).getName()); - if (storageDomainId == null) { - notFound(StorageDomain.class); - } else { - params.setStorageDomainId(storageDomainId); - } + Guid storageDomainId = getStorageDomainId(disk); + params.setStorageDomainId(storageDomainId); + org.ovirt.engine.core.common.businessentities.StorageDomain storageDomain = getStorageDomainById(storageDomainId); + if (storageDomain != null) { + disk.setStorageType(DiskMapper.map(storageDomain.getStorageDomainType()).value()); } + params.setDiskInfo(getMapper(Disk.class, org.ovirt.engine.core.common.businessentities.storage.Disk.class).map(disk, null)); if (disk.isSetLunStorage() && disk.getLunStorage().isSetHost()) { params.setVdsId(getHostId(disk.getLunStorage().getHost())); } return performCreate(VdcActionType.AddDisk, params, new QueryIdResolver<Guid>(VdcQueryType.GetDiskByDiskId, IdQueryParameters.class)); + } + + private Guid getStorageDomainId(Disk disk) { + if (disk.isSetStorageDomains() && disk.getStorageDomains().isSetStorageDomains() + && disk.getStorageDomains().getStorageDomains().get(0).isSetId()) { + return asGuid(disk.getStorageDomains().getStorageDomains().get(0).getId()); + } else if (disk.isSetStorageDomains() && disk.getStorageDomains().getStorageDomains().get(0).isSetName()) { + Guid storageDomainId = getStorageDomainIdByName(disk.getStorageDomains().getStorageDomains().get(0).getName()); + if (storageDomainId == null) { + notFound(StorageDomain.class); + } else { + return storageDomainId; + } + } + return null; + } + + private org.ovirt.engine.core.common.businessentities.StorageDomain getStorageDomainById(Guid id) { + return getEntity(org.ovirt.engine.core.common.businessentities.StorageDomain.class, VdcQueryType.GetStorageDomainById, new IdQueryParameters(id), id.toString()); } protected void validateDiskForCreation(Disk disk) { @@ -70,7 +86,7 @@ validateEnums(Disk.class, disk); } - private Guid getStorageDomainId(String storageDomainName) { + private Guid getStorageDomainIdByName(String storageDomainName) { List<org.ovirt.engine.core.common.businessentities.StorageDomain> storageDomains = getBackendCollection(org.ovirt.engine.core.common.businessentities.StorageDomain.class, VdcQueryType.GetAllStorageDomains, diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java index 97757c3..a290acd 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java @@ -20,6 +20,7 @@ import org.ovirt.engine.api.restapi.logging.Messages; import org.ovirt.engine.api.restapi.resource.AbstractBackendSubResource.ParametersProvider; import org.ovirt.engine.api.restapi.resource.utils.DiskResourceUtils; +import org.ovirt.engine.api.restapi.types.DiskMapper; import org.ovirt.engine.api.utils.LinkHelper; import org.ovirt.engine.core.common.action.AddDiskParameters; import org.ovirt.engine.core.common.action.AttachDetachVmDiskParameters; @@ -42,15 +43,15 @@ VdcQueryType queryType, VdcQueryParametersBase queryParams) { super(Disk.class, - Disks.class, - org.ovirt.engine.core.common.businessentities.storage.Disk.class, - parentId, - queryType, - queryParams, - VdcActionType.AddDisk, - VdcActionType.RemoveDisk, - VdcActionType.UpdateVmDisk, - SUB_COLLECTIONS); + Disks.class, + org.ovirt.engine.core.common.businessentities.storage.Disk.class, + parentId, + queryType, + queryParams, + VdcActionType.AddDisk, + VdcActionType.RemoveDisk, + VdcActionType.UpdateVmDisk, + SUB_COLLECTIONS); } @Override @@ -63,6 +64,10 @@ .build(); }else { validateDiskForCreation(disk); + org.ovirt.engine.core.common.businessentities.StorageDomain storageDomain = getStorageDomainById(getStorageDomainId(disk)); + if (storageDomain != null) { + disk.setStorageType(DiskMapper.map(storageDomain.getStorageDomainType()).value()); + } return performCreate(addAction, getAddParameters(map(disk), disk), getEntityIdResolver(disk.getName())); @@ -136,16 +141,7 @@ @Override protected VdcActionParametersBase getAddParameters(org.ovirt.engine.core.common.businessentities.storage.Disk entity, Disk disk) { AddDiskParameters parameters = new AddDiskParameters(parentId, entity); - if (disk.isSetStorageDomains() && disk.getStorageDomains().getStorageDomains().get(0).isSetId()) { - parameters.setStorageDomainId(asGuid(disk.getStorageDomains().getStorageDomains().get(0).getId())); - } else if (disk.isSetStorageDomains() && disk.getStorageDomains().getStorageDomains().get(0).isSetName()) { - Guid storageDomainId = getStorageDomainId(disk.getStorageDomains().getStorageDomains().get(0).getName()); - if (storageDomainId == null) { - notFound(StorageDomain.class); - } else { - parameters.setStorageDomainId(storageDomainId); - } - } + parameters.setStorageDomainId(getStorageDomainId(disk)); if (disk.isSetActive()) { parameters.setPlugDiskToVm(disk.isActive()); } @@ -155,7 +151,22 @@ return parameters; } - private Guid getStorageDomainId(String storageDomainName) { + private Guid getStorageDomainId(Disk disk) { + if (disk.isSetStorageDomains() && disk.getStorageDomains().isSetStorageDomains() + && disk.getStorageDomains().getStorageDomains().get(0).isSetId()) { + return asGuid(disk.getStorageDomains().getStorageDomains().get(0).getId()); + } else if (disk.isSetStorageDomains() && disk.getStorageDomains().getStorageDomains().get(0).isSetName()) { + Guid storageDomainId = getStorageDomainIdByName(disk.getStorageDomains().getStorageDomains().get(0).getName()); + if (storageDomainId == null) { + notFound(StorageDomain.class); + } else { + return storageDomainId; + } + } + return null; + } + + private Guid getStorageDomainIdByName(String storageDomainName) { List<org.ovirt.engine.core.common.businessentities.StorageDomain> storageDomains = getBackendCollection(org.ovirt.engine.core.common.businessentities.StorageDomain.class, VdcQueryType.GetAllStorageDomains, @@ -168,6 +179,10 @@ return null; } + private org.ovirt.engine.core.common.businessentities.StorageDomain getStorageDomainById(Guid id) { + return getEntity(org.ovirt.engine.core.common.businessentities.StorageDomain.class, VdcQueryType.GetStorageDomainById, new IdQueryParameters(id), id.toString()); + } + @Override protected VdcActionParametersBase getRemoveParameters(String id) { return new RemoveDiskParameters(asGuid(id)); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDisksResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDisksResourceTest.java index c5eec86..7f432ef 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDisksResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendDisksResourceTest.java @@ -64,9 +64,14 @@ setUpHttpHeaderExpectations("Expect", "201-created"); setUpEntityQueryExpectations(VdcQueryType.GetDiskByDiskId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { GUIDS[0] }, + new String[]{"Id"}, + new Object[]{GUIDS[0]}, getEntity(0)); + setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[2] }, + getStorageDomains().get(0)); Disk model = getModel(0); setUpCreationExpectations(VdcActionType.AddDisk, AddDiskParameters.class, @@ -95,9 +100,14 @@ setUpHttpHeaderExpectations("Expect", "201-created"); setUpEntityQueryExpectations(VdcQueryType.GetDiskByDiskId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { GUIDS[0] }, + new String[]{"Id"}, + new Object[]{GUIDS[0]}, getEntity(0)); + setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[2] }, + getStorageDomains().get(0)); Disk model = getModel(0); model.getStorageDomains().getStorageDomains().get(0).setId(null); model.getStorageDomains().getStorageDomains().get(0).setName("Storage_Domain_1"); @@ -127,7 +137,7 @@ assertNull(((Disk)response.getEntity()).getCreationStatus()); } - private Object getStorageDomains() { + private List getStorageDomains() { List<org.ovirt.engine.core.common.businessentities.StorageDomain> sds = new LinkedList<org.ovirt.engine.core.common.businessentities.StorageDomain>(); org.ovirt.engine.core.common.businessentities.StorageDomain sd = new org.ovirt.engine.core.common.businessentities.StorageDomain(); sd.setStorageName("Storage_Domain_1"); diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResourceTest.java index 0373e66..f8768e2 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResourceTest.java @@ -76,8 +76,8 @@ private void setUpGetEntityExpectations() { setUpEntityQueryExpectations(VdcQueryType.GetAllDisksByVmId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, + new String[]{"Id"}, + new Object[]{PARENT_ID}, getEntityList()); } @@ -94,11 +94,11 @@ protected void doTestBadRemove(boolean canDo, boolean success, String detail) throws Exception { setUpGetEntityExpectations(); setUriInfo(setUpActionExpectations(VdcActionType.RemoveDisk, - RemoveDiskParameters.class, - new String[] { "DiskId" }, - new Object[] { GUIDS[0] }, - canDo, - success)); + RemoveDiskParameters.class, + new String[]{"DiskId"}, + new Object[]{GUIDS[0]}, + canDo, + success)); try { collection.remove(GUIDS[0].toString()); fail("expected WebApplicationException"); @@ -127,13 +127,13 @@ setUriInfo(setUpBasicUriExpectations()); setUpEntityQueryExpectations(VdcQueryType.GetAllDisksByVmId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, + new String[]{"Id"}, + new Object[]{PARENT_ID}, getEntityList()); - setUpActionExpectations (VdcActionType.AttachDiskToVm, + setUpActionExpectations(VdcActionType.AttachDiskToVm, AttachDetachVmDiskParameters.class, - new String[] { "VmId", "EntityInfo" }, - new Object[] { PARENT_ID, new EntityInfo(VdcObjectType.Disk, DISK_ID) }, + new String[]{"VmId", "EntityInfo"}, + new Object[]{PARENT_ID, new EntityInfo(VdcObjectType.Disk, DISK_ID)}, true, true); Disk model = getModel(0); @@ -153,13 +153,13 @@ model.setId(DISK_ID.toString()); //means this is an existing disk --> attach setUpEntityQueryExpectations(VdcQueryType.GetAllDisksByVmId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, + new String[]{"Id"}, + new Object[]{PARENT_ID}, getEntityList()); - setUpActionExpectations (VdcActionType.AttachDiskToVm, + setUpActionExpectations(VdcActionType.AttachDiskToVm, AttachDetachVmDiskParameters.class, - new String[] { "VmId", "EntityInfo", "SnapshotId" }, - new Object[] { PARENT_ID, new EntityInfo(VdcObjectType.Disk, DISK_ID), snapshotId }, + new String[]{"VmId", "EntityInfo", "SnapshotId"}, + new Object[]{PARENT_ID, new EntityInfo(VdcObjectType.Disk, DISK_ID), snapshotId}, true, true); Response response = collection.add(model); @@ -170,11 +170,11 @@ public void testDetachDisk() throws Exception { setUpGetEntityExpectations(); setUriInfo(setUpActionExpectations(VdcActionType.DetachDiskFromVm, - AttachDetachVmDiskParameters.class, - new String[] { "VmId", "EntityInfo" }, - new Object[] { PARENT_ID, new EntityInfo(VdcObjectType.Disk, DISK_ID) }, - true, - true)); + AttachDetachVmDiskParameters.class, + new String[]{"VmId", "EntityInfo"}, + new Object[]{PARENT_ID, new EntityInfo(VdcObjectType.Disk, DISK_ID)}, + true, + true)); Action action = new Action(); action.setDetach(true); verifyRemove(collection.remove(DISK_ID.toString(), action)); @@ -182,20 +182,25 @@ private void doTestAddAsync(AsyncTaskStatusEnum asyncStatus, CreationStatus creationStatus) throws Exception { setUriInfo(setUpBasicUriExpectations()); + setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById, + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{GUIDS[2]}, + getStorageDomain(GUIDS[2])); setUpCreationExpectations(VdcActionType.AddDisk, - AddDiskParameters.class, - new String[] { "VmId" }, - new Object[] { PARENT_ID }, - true, - true, - GUIDS[0], - asList(GUIDS[3]), - asList(new AsyncTaskStatus(asyncStatus)), - VdcQueryType.GetAllDisksByVmId, - IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, - asList(getEntity(0))); + AddDiskParameters.class, + new String[]{"VmId"}, + new Object[]{PARENT_ID}, + true, + true, + GUIDS[0], + asList(GUIDS[3]), + asList(new AsyncTaskStatus(asyncStatus)), + VdcQueryType.GetAllDisksByVmId, + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{PARENT_ID}, + asList(getEntity(0))); Disk model = getModel(0); model.setSize(1024 * 1024L); @@ -226,8 +231,8 @@ Response response = collection.add(getModel(0)); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Disk); - verifyModel((Disk)response.getEntity(), 0); - assertNull(((Disk)response.getEntity()).getCreationStatus()); + verifyModel((Disk) response.getEntity(), 0); + assertNull(((Disk) response.getEntity()).getCreationStatus()); } @Test @@ -248,30 +253,35 @@ Response response = collection.add(getModel(0)); assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Disk); - verifyModel((Disk)response.getEntity(), 0); - assertNull(((Disk)response.getEntity()).getCreationStatus()); + verifyModel((Disk) response.getEntity(), 0); + assertNull(((Disk) response.getEntity()).getCreationStatus()); } private void setCommonExpectations(Disk model) { setUpHttpHeaderExpectations("Expect", "201-created"); setUpEntityQueryExpectations(VdcQueryType.GetAllDisksByVmId, - IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, - asList(getEntity(0))); + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{PARENT_ID}, + asList(getEntity(0))); + setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById, + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{GUIDS[2]}, + getStorageDomain(GUIDS[2])); setUpCreationExpectations(VdcActionType.AddDisk, - AddDiskParameters.class, - new String[] { "VmId", "StorageDomainId" }, - new Object[] { PARENT_ID, GUIDS[2] }, - true, - true, - GUIDS[0], - asList(GUIDS[3]), - asList(new AsyncTaskStatus(AsyncTaskStatusEnum.finished)), - VdcQueryType.GetAllDisksByVmId, - IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, + AddDiskParameters.class, + new String[]{"VmId", "StorageDomainId"}, + new Object[]{PARENT_ID, GUIDS[2]}, + true, + true, + GUIDS[0], + asList(GUIDS[3]), + asList(new AsyncTaskStatus(AsyncTaskStatusEnum.finished)), + VdcQueryType.GetAllDisksByVmId, + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{PARENT_ID}, asList(getEntity(0))); model.setSize(1024 * 1024L); } @@ -289,7 +299,7 @@ assertEquals(201, response.getStatus()); assertTrue(response.getEntity() instanceof Disk); verifyModel((Disk)response.getEntity(), 0); - assertNull(((Disk)response.getEntity()).getCreationStatus()); + assertNull(((Disk) response.getEntity()).getCreationStatus()); } @Test @@ -298,14 +308,22 @@ setUpHttpHeaderExpectations("Expect", "201-created"); setUpEntityQueryExpectations(VdcQueryType.GetAllDisksByVmId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, + new String[]{"Id"}, + new Object[]{PARENT_ID}, asList(getEntity(0))); - setUpEntityQueryExpectations(VdcQueryType.GetAllStorageDomains, - VdcQueryParametersBase.class, - new String[] {}, - new Object[] {}, - getStorageDomains()); + int times = 2; + while (times-- > 0) { + setUpEntityQueryExpectations(VdcQueryType.GetAllStorageDomains, + VdcQueryParametersBase.class, + new String[]{}, + new Object[]{}, + getStorageDomains()); + } + setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[2] }, + getStorageDomain(GUIDS[2])); setUpCreationExpectations(VdcActionType.AddDisk, AddDiskParameters.class, new String[] { "VmId", "StorageDomainId" }, @@ -332,13 +350,17 @@ assertNull(((Disk)response.getEntity()).getCreationStatus()); } - private Object getStorageDomains() { - List<org.ovirt.engine.core.common.businessentities.StorageDomain> sds = new LinkedList<org.ovirt.engine.core.common.businessentities.StorageDomain>(); + private List getStorageDomains() { + List<org.ovirt.engine.core.common.businessentities.StorageDomain> sds = new LinkedList<>(); + sds.add(getStorageDomain(GUIDS[2])); + return sds; + } + + private org.ovirt.engine.core.common.businessentities.StorageDomain getStorageDomain(Guid guid) { org.ovirt.engine.core.common.businessentities.StorageDomain sd = new org.ovirt.engine.core.common.businessentities.StorageDomain(); sd.setStorageName("Storage_Domain_1"); - sd.setId(GUIDS[2]); - sds.add(sd); - return sds; + sd.setId(guid); + return sd; } @Test @@ -347,9 +369,14 @@ setUpHttpHeaderExpectations("Expect", "201-created"); setUpEntityQueryExpectations(VdcQueryType.GetAllDisksByVmId, IdQueryParameters.class, - new String[] { "Id" }, - new Object[] { PARENT_ID }, + new String[]{"Id"}, + new Object[]{PARENT_ID}, asList(getEntity(0))); + setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById, + IdQueryParameters.class, + new String[] { "Id" }, + new Object[] { GUIDS[3] }, + getStorageDomain(GUIDS[3])); setUpCreationExpectations(VdcActionType.AddDisk, AddDiskParameters.class, new String[] { "VmId", "StorageDomainId" }, @@ -389,12 +416,17 @@ } private void doTestBadAddDisk(boolean canDo, boolean success, String detail) throws Exception { + setUpEntityQueryExpectations(VdcQueryType.GetStorageDomainById, + IdQueryParameters.class, + new String[]{"Id"}, + new Object[]{GUIDS[2]}, + getStorageDomain(GUIDS[2])); setUriInfo(setUpActionExpectations(VdcActionType.AddDisk, - AddDiskParameters.class, - new String[] { "VmId" }, - new Object[] { PARENT_ID }, - canDo, - success)); + AddDiskParameters.class, + new String[]{"VmId"}, + new Object[]{PARENT_ID}, + canDo, + success)); Disk model = getModel(0); model.setSize(1024 * 1024L); diff --git a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java index f7cc8ba..c6e3a2b 100644 --- a/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java +++ b/backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java @@ -8,6 +8,7 @@ import org.ovirt.engine.api.model.DiskInterface; import org.ovirt.engine.api.model.DiskProfile; import org.ovirt.engine.api.model.DiskStatus; +import org.ovirt.engine.api.model.DiskStorageType; import org.ovirt.engine.api.model.Quota; import org.ovirt.engine.api.model.ScsiGenericIO; import org.ovirt.engine.api.model.Snapshot; @@ -15,7 +16,7 @@ import org.ovirt.engine.api.model.StorageDomain; import org.ovirt.engine.api.model.StorageDomains; import org.ovirt.engine.api.restapi.utils.GuidUtils; -import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.ImageStatus; import org.ovirt.engine.core.common.businessentities.storage.LunDisk; @@ -32,7 +33,20 @@ if (engineDisk == null) { if (disk.isSetLunStorage()) { engineDisk = new LunDisk(); - } else { + } else if (disk.getStorageType() != null) { + DiskStorageType diskStorageType = DiskStorageType.fromValue(disk.getStorageType()); + if (diskStorageType != null) { + switch (diskStorageType) { + case CINDER: + engineDisk = new CinderDisk(); + break; + case IMAGE: + engineDisk = new DiskImage(); + break; + } + } + } + if (engineDisk == null) { engineDisk = new DiskImage(); } } @@ -165,7 +179,9 @@ model.setShareable(entity.isShareable()); model.setDescription(entity.getDiskDescription()); model.setLogicalName(entity.getLogicalName()); - if (entity.getDiskStorageType() == DiskStorageType.IMAGE) { + model.setStorageType(map(entity.getDiskStorageType())); + if (entity.getDiskStorageType() == org.ovirt.engine.core.common.businessentities.storage.DiskStorageType.IMAGE || + entity.getDiskStorageType() == org.ovirt.engine.core.common.businessentities.storage.DiskStorageType.CINDER) { mapDiskImageToDiskFields((DiskImage) entity, model); } else { model.setLunStorage(StorageLogicalUnitMapper.map(((LunDisk) entity).getLun(), new Storage())); @@ -303,6 +319,20 @@ } } + @Mapping(from = org.ovirt.engine.core.common.businessentities.storage.DiskStorageType.class, to = String.class) + public static String map(org.ovirt.engine.core.common.businessentities.storage.DiskStorageType diskStorageType) { + switch (diskStorageType) { + case IMAGE: + return DiskStorageType.IMAGE.value(); + case CINDER: + return DiskStorageType.CINDER.value(); + case LUN: + return DiskStorageType.LUN.value(); + default: + return null; + } + } + @Mapping(from = DiskStatus.class, to = ImageStatus.class) public static ImageStatus map(DiskStatus diskStatus) { if (diskStatus==null) { @@ -334,4 +364,14 @@ return null; } } + + @Mapping(from = org.ovirt.engine.core.common.businessentities.StorageDomainType.class, to = DiskStorageType.class) + public static DiskStorageType map(org.ovirt.engine.core.common.businessentities.StorageDomainType storageDomainType) { + switch (storageDomainType) { + case Volume: + return DiskStorageType.CINDER; + default: + return DiskStorageType.IMAGE; + } + } } -- To view, visit https://gerrit.ovirt.org/39328 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I4c07baeed99482ec629778a82a26391cec5767fc Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
