Maor Lipchuk has uploaded a new change for review.

Change subject: restapi: Add API to query block Storage Domains to import.
......................................................................

restapi: Add API to query block Storage Domains to import.

Adding an API called unregisteredStorageDomains to be called from the
hosts model.
The API should call a vdcQuery which will return all the unregistered
Storage Domains

The API should be called as follow:
POST
/api/hosts/052a880a-53e0-4fe3-9ed5-01f939d1df66/unregisteredStorageDomains
HTTP/1.1
Accept: application/xml
Content-type: application/xml

<action>
    <iscsi>
        <address>iscsiHost</address>
    </iscsi>
    <iscsi_target>iqn.name1.120.01</iscsi_target>
    <iscsi_target>iqn.name2.120.02</iscsi_target>
    <iscsi_target>iqn.name3.120.03</iscsi_target>
</action>

The response which should returned as a list of Storage Domains, as
follow:
<action>
    <iscsi>
        <address>iscsiHost</address>
    </iscsi>
    <storage_domains>
        <storage_domain id="6ab65b16-0f03-4b93-85a7-5bc3b8d52be0">
            <name>scsi4</name>
            <type>data</type>
            <master>false</master>
            <storage>
                <type>iscsi</type>
                <volume_group
id="OLkKwa-VmEM-abW7-hPiv-BGrw-sQ2E-vTdAy1"/>
            </storage>
            <available>0</available>
            <used>0</used>
            <committed>0</committed>
            <storage_format>v3</storage_format>
        </storage_domain>
    <status>
        <state>complete</state>
    </status>
    <iscsi_target>iqn.name1.120.01</iscsi_target>
    <iscsi_target>iqn.name2.120.02</iscsi_target>
    <iscsi_target>iqn.name3.120.03</iscsi_target>
</action>

Change-Id: I54f4b6b9eb839ff5d6e9aabdc11af57e8c0b8da2
Bug-Url: https://bugzilla.redhat.com/1179246
Signed-off-by: Maor Lipchuk <mlipc...@redhat.com>
---
M 
backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/HostResource.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/BackendHostResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BaseBackendResource.java
4 files changed, 72 insertions(+), 2 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/27/36727/1

diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/HostResource.java
 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/HostResource.java
index f7b9a33..f0b325f 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/HostResource.java
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/HostResource.java
@@ -74,6 +74,11 @@
 
     @POST
     @Actionable
+    @Path("unregisteredStorageDomains")
+    public Response unregisteredStorageDomains(Action action);
+
+    @POST
+    @Actionable
     @Path("forceselectspm")
     public Response forceSelectSPM(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 ccbe899..3880035 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
@@ -205,6 +205,8 @@
       <xs:element name="import_as_template" type="xs:boolean" minOccurs="0" 
maxOccurs="1"/>
       <!-- for VM hosted engine maintenance actions -->
       <xs:element name="maintenance_enabled" type="xs:boolean" minOccurs="0" 
maxOccurs="1"/>
+      <!-- for getting storage domains which are candidates to be imported -->
+      <xs:element ref="storage_domains" minOccurs="0" maxOccurs="1"/>
     </xs:sequence>
   </xs:group>
 
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
index 9aaea61..9aae6db 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
@@ -2,6 +2,7 @@
 
 import static 
org.ovirt.engine.api.restapi.resource.BackendHostsResource.SUB_COLLECTIONS;
 
+import java.util.ArrayList;
 import java.util.List;
 
 import javax.ws.rs.Path;
@@ -19,6 +20,7 @@
 import org.ovirt.engine.api.model.LogicalUnit;
 import org.ovirt.engine.api.model.PowerManagement;
 import org.ovirt.engine.api.model.PowerManagementStatus;
+import org.ovirt.engine.api.model.StorageDomains;
 import org.ovirt.engine.api.resource.ActionResource;
 import org.ovirt.engine.api.resource.AssignedPermissionsResource;
 import org.ovirt.engine.api.resource.AssignedTagsResource;
@@ -47,19 +49,23 @@
 import org.ovirt.engine.core.common.action.VdsActionParameters;
 import org.ovirt.engine.core.common.action.VdsOperationActionParameters;
 import org.ovirt.engine.core.common.businessentities.FenceActionType;
-import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue;
 import org.ovirt.engine.core.common.businessentities.FenceAgent;
+import org.ovirt.engine.core.common.businessentities.FenceStatusReturnValue;
+import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
+import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VDSType;
 import org.ovirt.engine.core.common.businessentities.VdsStatic;
 import org.ovirt.engine.core.common.queries.DiscoverSendTargetsQueryParameters;
 import org.ovirt.engine.core.common.queries.GetPermissionsForObjectParameters;
+import 
org.ovirt.engine.core.common.queries.GetUnregisteredBlockStorageDomainsParameters;
 import org.ovirt.engine.core.common.queries.IdQueryParameters;
 import org.ovirt.engine.core.common.queries.NameQueryParameters;
 import org.ovirt.engine.core.common.queries.VdcQueryType;
 import org.ovirt.engine.core.common.queries.VdsIdParametersBase;
+import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
 import org.ovirt.engine.core.compat.Guid;
 
@@ -274,6 +280,34 @@
     }
 
     @Override
+    public Response unregisteredStorageDomains(Action action) {
+        validateParameters(action, "iscsi.address");
+        IscsiDetails iscsiDetails = action.getIscsi();
+
+        List<StorageServerConnections> storageServerConnections = new 
ArrayList<>();
+        for (String iscsiTarget : action.getIscsiTargets()) {
+            StorageServerConnections connectionDetails = 
getInitializedConnectionIscsiDetails(action);
+            connectionDetails.setiqn(iscsiTarget);
+            storageServerConnections.add(connectionDetails);
+        }
+        GetUnregisteredBlockStorageDomainsParameters 
unregisteredBlockStorageDomainsParameters =
+                new GetUnregisteredBlockStorageDomainsParameters(guid, 
StorageType.ISCSI, storageServerConnections);
+
+        try {
+            Pair<List<StorageDomain>, List<StorageServerConnections>> pair =
+                    getEntity(Pair.class,
+                        VdcQueryType.GetUnregisteredBlockStorageDomains,
+                        unregisteredBlockStorageDomainsParameters,
+                        "GetUnregisteredBlockStorageDomains", true);
+
+            List<StorageDomain> storageDomains = pair.getFirst();
+            return actionSuccess(mapToStorageDomains(action, storageDomains));
+        } catch (Exception e) {
+            return handleError(e, false);
+        }
+    }
+
+    @Override
     public Response iscsiDiscover(Action action) {
         validateParameters(action, "iscsi.address");
 
@@ -293,11 +327,30 @@
         return action;
     }
 
+    private Action mapToStorageDomains(Action action, List<StorageDomain> 
storageDomains) {
+        if (storageDomains != null) {
+            action.setStorageDomains(new StorageDomains());
+            for (StorageDomain storageDomain : storageDomains) {
+                
action.getStorageDomains().getStorageDomains().add(map(storageDomain));
+            }
+        }
+        return action;
+    }
+
     protected LogicalUnit map(StorageServerConnections cnx) {
         return getMapper(StorageServerConnections.class, 
LogicalUnit.class).map(cnx, null);
     }
 
+    protected org.ovirt.engine.api.model.StorageDomain map(StorageDomain 
storageDomain) {
+        return getMapper(StorageDomain.class, 
org.ovirt.engine.api.model.StorageDomain.class).map(storageDomain, null);
+    }
+
     private DiscoverSendTargetsQueryParameters 
createDiscoveryQueryParams(Action action) {
+        StorageServerConnections connectionDetails = 
getInitializedConnectionIscsiDetails(action);
+        return new DiscoverSendTargetsQueryParameters(guid, connectionDetails);
+    }
+
+    private StorageServerConnections 
getInitializedConnectionIscsiDetails(Action action) {
         StorageServerConnections connectionDetails = new 
StorageServerConnections();
         IscsiDetails iscsiDetails = action.getIscsi();
         connectionDetails.setconnection(iscsiDetails.getAddress());
@@ -313,7 +366,7 @@
         if (iscsiDetails.isSetPassword()) {
             connectionDetails.setpassword(iscsiDetails.getPassword());
         }
-        return new DiscoverSendTargetsQueryParameters(guid, connectionDetails);
+        return connectionDetails;
     }
 
     @Override
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BaseBackendResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BaseBackendResource.java
index d698be9..bb2e8e3 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BaseBackendResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BaseBackendResource.java
@@ -27,6 +27,7 @@
 import org.ovirt.engine.core.common.action.VdcActionParametersBase;
 import org.ovirt.engine.core.common.interfaces.BackendLocal;
 import org.ovirt.engine.core.common.queries.VdcQueryParametersBase;
+import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.compat.Guid;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -278,6 +279,15 @@
         return collection;
     }
 
+    @SuppressWarnings("unchecked")
+    protected <T, K> Pair<T, K> asPair(Object o) {
+        Pair<T, K> pair = null;
+        if (o instanceof Pair) {
+            pair = (Pair<T, K>)o;
+        }
+        return pair;
+    }
+
     static <T> ArrayList<T> asList(T t) {
         ArrayList<T> list = new ArrayList<T>();
         list.add(t);


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

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

Reply via email to