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