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