Maor Lipchuk has uploaded a new change for review.

Change subject: restapi: Add API to support warning for attached Storage Domains
......................................................................

restapi: Add API to support warning for attached Storage Domains

Adding a REST API to support warning for attached Storage Domains on
attach or import of Storage Domain.

POST
/api/storagedomains/d97c4fc5-bf5d-41a3-94c6-8fe821f98ff0/isattached
HTTP/1.1
Accept: application/xml
Content-type: application/xml
<action>
  <host id="383a1e8d-d299-45d4-84d5-9bcc9fcf8823"></host>
</action>

The response which should returned is a Storage Domain with the flag
is_attached.
as so:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<storage_domain id="d97c4fc5-bf5d-41a3-94c6-8fe821f98ff0">
    <is_attached>false</is_attached>
</storage_domain>

The operation is not implemented with GET since the operation requires
the connection-host to be provided as parameter.

Change-Id: I4b12e5ea2abea66cb950e3cdd64baaaff72a6919
Bug-Url: https://bugzilla.redhat.com/1179246
Signed-off-by: Maor Lipchuk <[email protected]>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/api.xsd
M 
backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
4 files changed, 64 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/15/37315/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
index 4921854..7f12467 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java
@@ -16,9 +16,15 @@
 
 package org.ovirt.engine.api.resource;
 
+import javax.ws.rs.Consumes;
+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.ovirt.engine.api.model.Action;
+import org.ovirt.engine.api.model.Actionable;
 import org.ovirt.engine.api.model.StorageDomain;
 import org.ovirt.engine.api.model.Template;
 import org.ovirt.engine.api.model.Templates;
@@ -27,6 +33,9 @@
 
 @Produces({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
 public interface StorageDomainResource extends 
UpdatableResource<StorageDomain> {
+
+    @Path("{action: (isattached)}/{oid}")
+    public ActionResource getActionSubresource(@PathParam("action")String 
action, @PathParam("oid")String oid);
 
     @Path("permissions")
     public AssignedPermissionsResource getPermissionsResource();
@@ -54,4 +63,10 @@
 
     @Path("diskprofiles")
     public AssignedDiskProfilesResource getDiskProfilesResource();
+
+    @POST
+    @Consumes({ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, 
ApiMediaType.APPLICATION_X_YAML})
+    @Actionable
+    @Path("isattached")
+    public Response getIsAttached(Action action);
 }
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 6fb81fb..c9d2bcc 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
@@ -2578,6 +2578,7 @@
           <xs:element name="committed" type="xs:long" minOccurs="0"/>
           <xs:element name="storage_format" type="xs:string" minOccurs="0"/>
           <xs:element name="import" type="xs:boolean" minOccurs="0"/>
+          <xs:element name="is_attached" type="xs:boolean" minOccurs="0"/>
         </xs:sequence>
       </xs:extension>
     </xs:complexContent>
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 3e74274..92a7a3f 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
@@ -1508,6 +1508,20 @@
     headers:
       Content-Type: {value: application/xml|json, required: true}
       Correlation-Id: {value: 'any string', required: false}
+- name: /storagedomains/{storagedomain:id}/isattached|rel=isattached
+  description: Querying if the Storage Domain is already attached to a Data 
Center by the is_attached boolean field, which is part of the storage server. 
IMPORTANT, Executing this API will cause the Host to disconnect from the 
Storage Domain.
+  request:
+    body:
+      parameterType: Action
+      signatures:
+      - mandatoryArguments: {action.host.id: 'xs:string'}
+        optionalArguments: {}
+        description:
+    urlparams:
+      async: {context: matrix, type: 'xs:boolean', value: true|false, 
required: false}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Correlation-Id: {value: 'any string', required: false}
 - name: /storagedomains/{storagedomain:id}|rel=update
   description: update the storage domain
   request:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
index 5c42443..fa799a3 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainResource.java
@@ -6,7 +6,10 @@
 import java.util.LinkedList;
 import java.util.List;
 
+import javax.ws.rs.core.Response;
+
 import org.ovirt.engine.api.common.util.StatusUtils;
+import org.ovirt.engine.api.model.Host;
 import org.ovirt.engine.api.model.LogicalUnit;
 import org.ovirt.engine.api.model.Storage;
 import org.ovirt.engine.api.model.StorageDomain;
@@ -26,6 +29,7 @@
 import org.ovirt.engine.api.resource.StorageDomainResource;
 import org.ovirt.engine.api.resource.StorageDomainServerConnectionsResource;
 import org.ovirt.engine.api.restapi.util.StorageDomainHelper;
+import org.ovirt.engine.api.model.Action;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.ExtendSANStorageDomainParameters;
 import org.ovirt.engine.core.common.action.StorageDomainManagementParameter;
@@ -41,11 +45,12 @@
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.NameQueryParameters;
+import 
org.ovirt.engine.core.common.queries.StorageDomainsAndStoragePoolIdQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.compat.Guid;
 
 public class BackendStorageDomainResource extends
-        AbstractBackendSubResource<StorageDomain, 
org.ovirt.engine.core.common.businessentities.StorageDomain> implements 
StorageDomainResource {
+        AbstractBackendActionableResource<StorageDomain, 
org.ovirt.engine.core.common.businessentities.StorageDomain> implements 
StorageDomainResource {
 
     private BackendStorageDomainsResource parent;
 
@@ -91,6 +96,34 @@
                         new String[]{"templates", "vms"});
     }
 
+
+    @Override
+    public Response getIsAttached(Action action) {
+        validateParameters(action, "host.id|name");
+        Host host = action.getHost();
+        org.ovirt.engine.core.common.businessentities.StorageDomain 
storageDomainToAttach =
+                
getEntity(org.ovirt.engine.core.common.businessentities.StorageDomain.class,
+                        VdcQueryType.GetStorageDomainById,
+                        new IdQueryParameters(guid),
+                        "storage_domain");
+        StorageDomainsAndStoragePoolIdQueryParameters parameters =
+                new 
StorageDomainsAndStoragePoolIdQueryParameters(storageDomainToAttach, null, 
asGuid(host.getId()));
+        parameters.setCheckStoragePoolStatus(false);
+        List<StorageDomainStatic> attachedStorageDomains =
+                getEntity(List.class,
+                        
VdcQueryType.GetStorageDomainsWithAttachedStoragePoolGuid,
+                        parameters,
+                        "GetStorageDomainsWithAttachedStoragePoolGuid", true);
+        StorageDomain returnedStorageDomain = new StorageDomain();
+        returnedStorageDomain.setIsAttached(false);
+        returnedStorageDomain.setId(guid.toString());
+        if (!attachedStorageDomains.isEmpty()) {
+            returnedStorageDomain.setIsAttached(true);
+        }
+        return Response.ok().entity(returnedStorageDomain).build();
+    }
+
+
     @Override
     public FilesResource getFilesResource() {
         return inject(new BackendFilesResource(id));


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4b12e5ea2abea66cb950e3cdd64baaaff72a6919
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
Gerrit-Owner: Maor Lipchuk <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to