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

Reply via email to