Federico Simoncelli has uploaded a new change for review.

Change subject: restapi: disk entity export to glance
......................................................................

restapi: disk entity export to glance

Change-Id: If351d209d7828f0d59926bb98da9317567976d41
Signed-off-by: Federico Simoncelli <fsimo...@redhat.com>
---
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExportRepoImageParameters.java
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DiskResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDiskResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainImageResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java
A 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/DiskHelper.java
M 
backend/manager/modules/restapi/types/src/main/java/org/ovirt/engine/api/restapi/types/DiskMapper.java
8 files changed, 119 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/41/17541/1

diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExportRepoImageParameters.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExportRepoImageParameters.java
index 6e18882..881f74c 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExportRepoImageParameters.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/ExportRepoImageParameters.java
@@ -4,7 +4,7 @@
 
 public class ExportRepoImageParameters extends ImagesActionsParametersBase {
 
-    private static final long serialVersionUID = 8168949491104775480L;
+    private static final long serialVersionUID = 5665917269570010693L;
 
     private Guid destinationDomainId;
 
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DiskResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DiskResource.java
index a2372a3..b1ce93c 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DiskResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/DiskResource.java
@@ -15,15 +15,24 @@
 */
 package org.ovirt.engine.api.resource;
 
+import javax.ws.rs.Consumes;
 import javax.ws.rs.GET;
+import javax.ws.rs.POST;
 import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
 import javax.ws.rs.Produces;
+import javax.ws.rs.core.Response;
 
 import org.jboss.resteasy.annotations.providers.jaxb.Formatted;
+import org.ovirt.engine.api.model.Action;
+import org.ovirt.engine.api.model.Actionable;
 import org.ovirt.engine.api.model.Disk;
 
 @Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
 public interface DiskResource extends ReadOnlyResource<Disk>, 
MeasurableResource {
+
+    @Path("{action: (export)}/{oid}")
+    public ActionResource getActionSubresource(@PathParam("action") String 
action, @PathParam("oid") String oid);
 
     @GET
     @Formatted
@@ -32,4 +41,12 @@
 
     @Path("permissions")
     public AssignedPermissionsResource getPermissionsResource();
+
+    @POST
+    @Formatted
+    @Consumes({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
+    @Actionable
+    @Path("export")
+    public Response doExport(Action action);
+
 }
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 eafd7dd..f1c37fd 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
@@ -490,6 +490,18 @@
       Content-Type: {value: application/xml|json, required: true}
       Correlation-Id: {value: 'any string', required: false}
       Filter: {value: true|false, required: false}
+- name: /api/vms/{vm:id}/disks/{disk:id}/export|rel=export
+  request:
+    body:
+      parameterType: Action
+      signatures:
+      - mandatoryArguments: {storagedomain.id|name: 'xs:string'}
+        optionalArguments: {}
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Correlation-Id: {value: 'any string', required: false}
+      Filter: {value: true|false, required: false}
 - name: /api/vms/{vm:id}/nics|rel=get
   request:
     body:
@@ -851,6 +863,18 @@
       signatures: []
     urlparams: {}
     headers: {}
+- name: /api/disks/{disk:id}/export|rel=export
+  request:
+    body:
+      parameterType: Action
+      signatures:
+      - mandatoryArguments: {storagedomain.id|name: 'xs:string'}
+        optionalArguments: {}
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Correlation-Id: {value: 'any string', required: false}
+      Filter: {value: true|false, required: false}
 - name: /api/capabilities|rel=get
   request:
     body:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDiskResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDiskResource.java
index dc47541..3b53a65 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDiskResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDiskResource.java
@@ -1,17 +1,25 @@
 package org.ovirt.engine.api.restapi.resource;
 
+import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.api.model.Disk;
+import org.ovirt.engine.api.resource.ActionResource;
 import org.ovirt.engine.api.resource.AssignedPermissionsResource;
 import org.ovirt.engine.api.resource.CreationResource;
 import org.ovirt.engine.api.resource.DiskResource;
 import org.ovirt.engine.api.resource.StatisticsResource;
+import org.ovirt.engine.api.restapi.util.DiskHelper;
 import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.ExportRepoImageParameters;
+import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
 
-public class BackendDiskResource extends AbstractBackendSubResource<Disk, 
org.ovirt.engine.core.common.businessentities.Disk> implements DiskResource {
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.Response;
+
+public class BackendDiskResource extends 
AbstractBackendActionableResource<Disk, 
org.ovirt.engine.core.common.businessentities.Disk> implements DiskResource {
 
     protected BackendDiskResource(String id) {
         super(id, Disk.class, 
org.ovirt.engine.core.common.businessentities.Disk.class);
@@ -39,6 +47,23 @@
     }
 
     @Override
+    public Response doExport(Action action) {
+        validateParameters(action, "storageDomain.id|name");
+        try {
+            ExportRepoImageParameters exportParameters =
+                    DiskHelper.getExportRepoImageParameters(get(), 
getStorageDomainId(action));
+            return doAction(VdcActionType.ExportRepoImage, exportParameters, 
action);
+        } catch (Exception e) {
+            return handleError(e, action);
+        }
+    }
+
+    @Override
+    public ActionResource getActionSubresource(@PathParam("action") String 
action, @PathParam("oid") String oid) {
+        return inject(new BackendActionResource(action, oid));
+    }
+
+    @Override
     public Disk get() {
         return performGet(VdcQueryType.GetDiskByDiskId, new 
IdQueryParameters(guid));
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainImageResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainImageResource.java
index 2325622..f3e0937 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainImageResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainImageResource.java
@@ -65,6 +65,7 @@
 
     @Override
     public Image get() {
+        // return super.get();//explicit call solves REST-Easy confusion
         return performGet(VdcQueryType.GetImageById, new 
GetImageByIdParameters(getStorageDomainId(), id));
     }
 }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java
index a73daad..628b6fa 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDiskResource.java
@@ -13,7 +13,9 @@
 import org.ovirt.engine.api.resource.AssignedPermissionsResource;
 import org.ovirt.engine.api.resource.StatisticsResource;
 import org.ovirt.engine.api.resource.VmDiskResource;
+import org.ovirt.engine.api.restapi.util.DiskHelper;
 import org.ovirt.engine.core.common.VdcObjectType;
+import org.ovirt.engine.core.common.action.ExportRepoImageParameters;
 import org.ovirt.engine.core.common.action.HotPlugDiskToVmParameters;
 import org.ovirt.engine.core.common.action.MoveDiskParameters;
 import org.ovirt.engine.core.common.action.MoveDisksParameters;
@@ -118,6 +120,18 @@
     }
 
     @Override
+    public Response doExport(Action action) {
+        validateParameters(action, "storageDomain.id|name");
+        try {
+            ExportRepoImageParameters exportParameters =
+                    DiskHelper.getExportRepoImageParameters(getDisk(), 
getStorageDomainId(action));
+            return doAction(VdcActionType.ExportRepoImage, exportParameters, 
action);
+        } catch (Exception e) {
+            return handleError(e, action);
+        }
+    }
+
+    @Override
     public Disk update(Disk resource) {
         validateEnums(Disk.class, resource);
         return super.update(resource);//explicit call solves REST-Easy 
confusion
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/DiskHelper.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/DiskHelper.java
new file mode 100644
index 0000000..c6a8b0b
--- /dev/null
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/util/DiskHelper.java
@@ -0,0 +1,29 @@
+package org.ovirt.engine.api.restapi.util;
+
+import org.ovirt.engine.api.model.Disk;
+import org.ovirt.engine.api.model.StorageDomain;
+import org.ovirt.engine.core.common.action.ExportRepoImageParameters;
+import org.ovirt.engine.core.compat.Guid;
+
+public class DiskHelper {
+    public static ExportRepoImageParameters getExportRepoImageParameters(Disk 
disk, Guid destinationStorageDomainId) {
+        if (disk.isSetLunStorage()) {
+            throw new UnsupportedOperationException("Direct LUN disks are 
unsupported");
+        }
+
+        if (disk.getStorageDomains() == null || 
disk.getStorageDomains().getStorageDomains().size() < 1) {
+            throw new IllegalStateException("Cannot find disk storage domain");
+        }
+
+        ExportRepoImageParameters exportParameters = new 
ExportRepoImageParameters(new Guid(disk.getImageId()));
+        StorageDomain storageDomain = 
disk.getStorageDomains().getStorageDomains().get(0);
+
+        exportParameters.setStoragePoolId(new 
Guid(storageDomain.getDataCenter().getId()));
+        exportParameters.setStorageDomainId(new Guid(storageDomain.getId()));
+        exportParameters.setImageGroupID(new Guid(disk.getId()));
+
+        exportParameters.setDestinationDomainId(destinationStorageDomainId);
+
+        return exportParameters;
+    }
+}
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 4f7fc34..4823cda 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
@@ -3,6 +3,7 @@
 import java.util.ArrayList;
 
 import org.ovirt.engine.api.common.util.StatusUtils;
+import org.ovirt.engine.api.model.DataCenter;
 import org.ovirt.engine.api.model.Disk;
 import org.ovirt.engine.api.model.DiskFormat;
 import org.ovirt.engine.api.model.DiskInterface;
@@ -172,9 +173,15 @@
             if (!model.isSetStorageDomains()) {
                 model.setStorageDomains(new StorageDomains());
             }
+            DataCenter dataCenter = null;
+            if (entity.getStoragePoolId() != null) {
+                dataCenter = new DataCenter();
+                dataCenter.setId(entity.getStoragePoolId().toString());
+            }
             for (Guid id : entity.getStorageIds()){
                 StorageDomain storageDomain = new StorageDomain();
                 storageDomain.setId(id.toString());
+                storageDomain.setDataCenter(dataCenter);
                 
model.getStorageDomains().getStorageDomains().add(storageDomain);
             }
         }


-- 
To view, visit http://gerrit.ovirt.org/17541
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: If351d209d7828f0d59926bb98da9317567976d41
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Federico Simoncelli <fsimo...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to