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 unregisteredstoragedomainsdiscover
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/unregisteredstoragedomainsdiscover
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/1181681
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/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendHostResource.java
4 files changed, 72 insertions(+), 1 deletion(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/59/36859/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 741bb49..4e1e0ba 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
@@ -85,6 +85,11 @@
     @POST
     @Formatted
     @Actionable
+    @Path("unregisteredstoragedomainsdiscover")
+    public Response unregisteredStorageDomainsDiscover(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 c0ecf13..88112ca 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/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index ba11c6f..831bdf5 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
@@ -2921,6 +2921,18 @@
     headers:
       Content-Type: {value: application/xml|json, required: true}
       Correlation-Id: {value: 'any string', required: false}
+- name: 
/hosts/{host:id}/unregisteredstoragedomainsdiscover|rel=unregisteredstoragedomainsdiscover
+  description: Discover the Storage Domains which are candidiates to be 
imported to the setup
+  request:
+    body:
+      parameterType: Action
+      signatures:
+      - mandatoryArguments: {action.iscsi.address: 'xs:string', action.target: 
'xs:string'}
+        description: Discover the Storage Domains which are candidiates to be 
imported to the setup
+    urlparams: {}
+    headers:
+      Content-Type: {value: application/xml|json, required: true}
+      Correlation-Id: {value: 'any string', required: false}
 - name: /hosts/{host:id}/nics|rel=get
   description: get the list of network interfaces for the host
   request:
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 1f544ff..372dd7f 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;
@@ -18,6 +19,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;
@@ -42,17 +44,21 @@
 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.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.compat.Guid;
 
 
@@ -223,6 +229,33 @@
     }
 
     @Override
+    public Response unregisteredStorageDomainsDiscover(Action action) {
+        validateParameters(action, "iscsi.address");
+
+        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");
 
@@ -242,11 +275,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());
@@ -262,7 +314,7 @@
         if (iscsiDetails.isSetPassword()) {
             connectionDetails.setpassword(iscsiDetails.getPassword());
         }
-        return new DiscoverSendTargetsQueryParameters(guid, connectionDetails);
+        return connectionDetails;
     }
 
     @Override


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I54f4b6b9eb839ff5d6e9aabdc11af57e8c0b8da2
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: ovirt-engine-3.5
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