Daniel Erez has uploaded a new change for review. Change subject: restapi: add connections subresource for domain ......................................................................
restapi: add connections subresource for domain Change-Id: I94c3e7e18705788b07b3bfd1a97a54d474e243aa Signed-off-by: Daniel Erez <[email protected]> --- A backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java M backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java M backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java M backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java M backend/manager/modules/dal/src/test/resources/fixtures.xml M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainResource.java A backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java A backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java 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 A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java A backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java M backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java M packaging/dbscripts/storages_sp.sql 21 files changed, 355 insertions(+), 32 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/91/17891/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java new file mode 100644 index 0000000..07150b0 --- /dev/null +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetStorageServerConnectionsForDomainQuery.java @@ -0,0 +1,16 @@ +package org.ovirt.engine.core.bll; + +import org.ovirt.engine.core.common.queries.IdQueryParameters; + +public class GetStorageServerConnectionsForDomainQuery<P extends IdQueryParameters> extends QueriesCommandBase<P> { + + public GetStorageServerConnectionsForDomainQuery(P parameters) { + super(parameters); + } + + @Override + protected void executeQueryCommand() { + getQueryReturnValue().setReturnValue(getDbFacade().getStorageServerConnectionDao() + .getAllForDomain(getParameters().getId())); + } +} diff --git a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java index 99efa1b..749fac4 100644 --- a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java +++ b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java @@ -188,6 +188,7 @@ GetStorageDomainById(VdcQueryAuthType.User), GetStorageServerConnectionById, GetAllStorageServerConnections, + GetStorageServerConnectionsForDomain, GetStoragePoolById(VdcQueryAuthType.User), GetStorageDomainsByConnection, GetStorageDomainsByStoragePoolId(VdcQueryAuthType.User), diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java index e339a4e..d7421ec 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAO.java @@ -84,6 +84,13 @@ StorageServerConnections connection); /** + * Retrieves all connections used by the specified storage domain + * @param domainId + * @return the list of connections + */ + List<StorageServerConnections> getAllForDomain(Guid domainId); + + /** * Saves the specified connection. * * @param connection diff --git a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java index 927776f..6bb1c95 100644 --- a/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java +++ b/backend/manager/modules/dal/src/main/java/org/ovirt/engine/core/dao/StorageServerConnectionDAODbFacadeImpl.java @@ -84,6 +84,12 @@ } @Override + public List<StorageServerConnections> getAllForDomain(Guid domainId) { + return getCallsHandler().executeReadList("GetStorageServerConnectionsForDomain",mapper, + getCustomMapSqlParameterSource().addValue("storage_domain_id", domainId)); + } + + @Override public void save(StorageServerConnections connection) { getCallsHandler().executeModification("Insertstorage_server_connections", getFullParameterSource(connection)); } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java index 13eac8b..9a9f71d 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/LunDAOTest.java @@ -12,7 +12,7 @@ import org.ovirt.engine.core.common.businessentities.LUNs; public class LunDAOTest extends BaseDAOTestCase { - private static final String STORAGE_SERVER_CONNECTION_ID = "0cc146e8-e5ed-482c-8814-270bc48c297f"; + private static final String STORAGE_SERVER_CONNECTION_ID = "0cc146e8-e5ed-482c-8814-270bc48c297e"; private LunDAO dao; private LUNs existingLUN; private LUNs newLUN; diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java index 973c8ed..7657ea3 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageDomainDAOTest.java @@ -22,8 +22,8 @@ private static final int NUMBER_OF_STORAGE_DOMAINS_FOR_PRIVELEGED_USER = 1; private static final Guid EXISTING_DOMAIN_ID = FixturesTool.STORAGE_DOAMIN_SCALE_SD5; - private static final Guid EXISTING_STORAGE_POOL_ID = new Guid("6d849ebf-755f-4552-ad09-9a090cda105d"); - private static final String EXISTING_CONNECTION = "10.35.64.25"; + private static final Guid EXISTING_STORAGE_POOL_ID = new Guid("72b9e200-f48b-4687-83f2-62828f249a47"); + private static final String EXISTING_CONNECTION = "10.35.64.25:/export/share"; private static final Guid EXISTING_USER_ID = new Guid("9bf7c640-b620-456f-a550-0348f366544b"); private StorageDomainDAO dao; @@ -46,7 +46,7 @@ */ @Test public void testGetMasterStorageDomainIdForPool() { - Guid result = dao.getMasterStorageDomainIdForPool(EXISTING_STORAGE_POOL_ID); + Guid result = dao.getMasterStorageDomainIdForPool(new Guid("6d849ebf-755f-4552-ad09-9a090cda105d")); assertNotNull(result); assertEquals(EXISTING_DOMAIN_ID, result); @@ -54,7 +54,7 @@ @Test public void testGetstorage_domain_by_type_for_storagePoolId() { - StorageDomain result = dao.getStorageDomainByTypeAndPool(EXISTING_STORAGE_POOL_ID, StorageDomainType.Master); + StorageDomain result = dao.getStorageDomainByTypeAndPool(new Guid("6d849ebf-755f-4552-ad09-9a090cda105d"), StorageDomainType.Master); assertNotNull(result); assertGetResult(result); @@ -167,7 +167,7 @@ */ @Test public void testGetForStoragePool() { - StorageDomain result = dao.getForStoragePool(existingDomain.getId(), EXISTING_STORAGE_POOL_ID); + StorageDomain result = dao.getForStoragePool(existingDomain.getId(),new Guid("6d849ebf-755f-4552-ad09-9a090cda105d")); assertGetResult(result); } @@ -258,7 +258,7 @@ public void testGetAllForConnection() { List<StorageDomain> result = dao.getAllForConnection(EXISTING_CONNECTION); - assertGetAllForStoragePoolResult(result); + assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID); } /** @@ -305,7 +305,7 @@ List<StorageDomain> result = dao.getAllByStoragePoolAndConnection(EXISTING_STORAGE_POOL_ID, EXISTING_CONNECTION); - assertGetAllForStoragePoolResult(result); + assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID); } /** @@ -326,7 +326,7 @@ public void testGetAllForStoragePool() { List<StorageDomain> result = dao.getAllForStoragePool(EXISTING_STORAGE_POOL_ID); - assertGetAllForStoragePoolResult(result); + assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID); } /** @@ -334,9 +334,10 @@ */ @Test public void testGetAllForStoragePoolWithPermissionsPrivilegedUser() { - List<StorageDomain> result = dao.getAllForStoragePool(EXISTING_STORAGE_POOL_ID, PRIVILEGED_USER_ID, true); + Guid storagePoolId = new Guid("6d849ebf-755f-4552-ad09-9a090cda105d"); + List<StorageDomain> result = dao.getAllForStoragePool(storagePoolId, PRIVILEGED_USER_ID, true); - assertGetAllForStoragePoolResult(result); + assertGetAllForStoragePoolResult(result, storagePoolId); } /** @@ -346,7 +347,7 @@ public void testGetAllForStoragePoolWithPermissionsDisabledUnprivilegedUser() { List<StorageDomain> result = dao.getAllForStoragePool(EXISTING_STORAGE_POOL_ID, UNPRIVILEGED_USER_ID, false); - assertGetAllForStoragePoolResult(result); + assertGetAllForStoragePoolResult(result, EXISTING_STORAGE_POOL_ID); } /** @@ -364,11 +365,11 @@ * Asserts the result returned from {@link StorageDomainDAO#getAllForStoragePool(Guid)} is correct * @param result The result to check */ - private static void assertGetAllForStoragePoolResult(List<StorageDomain> result) { + private static void assertGetAllForStoragePoolResult(List<StorageDomain> result, Guid expectedStoragePoolId) { assertNotNull(result); assertFalse(result.isEmpty()); for (StorageDomain domain : result) { - assertEquals(EXISTING_STORAGE_POOL_ID, domain.getStoragePoolId()); + assertEquals(expectedStoragePoolId, domain.getStoragePoolId()); } } @@ -377,7 +378,7 @@ List<StorageDomain> result = dao.getPermittedStorageDomainsByStoragePool(EXISTING_USER_ID, ActionGroup.CONFIGURE_VM_STORAGE, - EXISTING_STORAGE_POOL_ID); + new Guid("6d849ebf-755f-4552-ad09-9a090cda105d")); assertNotNull(result); assertFalse(result.isEmpty()); assertEquals(result.get(0).getId(), existingDomain.getId()); @@ -388,7 +389,7 @@ List<StorageDomain> result = dao.getPermittedStorageDomainsByStoragePool(EXISTING_USER_ID, ActionGroup.CONSUME_QUOTA, - EXISTING_STORAGE_POOL_ID); + new Guid("6d849ebf-755f-4552-ad09-9a090cda105d")); assertNotNull(result); assertTrue(result.isEmpty()); } @@ -422,11 +423,11 @@ @Test public void testAllByConnectionId() { - List<StorageDomain> domains = dao.getAllByConnectionId(FixturesTool.EXISTING_STORAGE_CONNECTION_ID); + List<StorageDomain> domains = dao.getAllByConnectionId(new Guid("0cc146e8-e5ed-482c-8814-270bc48c297f")); assertEquals("Unexpected number of storage domains by connection id", domains.size(), 1); assertEquals("Wrong storage domain id for search by connection id", domains.get(0).getId(), - FixturesTool.EXISTING_DOMAIN_ID_FOR_CONNECTION_ID); + new Guid("c2211b56-8869-41cd-84e1-78d7cb96f31d")); } /** * Asserts the result from {@link StorageDomainDAO#getAll()} is correct without filtering diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java index 7f241e9..6430f99 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionDAOTest.java @@ -17,7 +17,7 @@ public class StorageServerConnectionDAOTest extends BaseDAOTestCase { private static final int SERVER_CONNECTION_COUNT_FOR_SPECIFIC_STORAGE = 7; - private static final String EXISTING_DOMAIN_STORAGE_NAME = "fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk"; + private static final String EXISTING_DOMAIN_STORAGE_NAME = "G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ"; private static final Guid EXISTING_STORAGE_POOL_ID = new Guid("6d849ebf-755f-4552-ad09-9a090cda105d"); private StorageServerConnectionDAO dao; @@ -219,4 +219,17 @@ assertNull(result.getNfsTimeo()); } + @Test + public void testGetAllConnectionsOfNfsDomain() { + List<StorageServerConnections> connections = dao.getAllForDomain(Guid.createGuidFromString("d9ede37f-e6c3-4bf9-a984-19174070aa31")); + assertEquals(connections.size(),1); + assertEquals(connections.get(0).getid(),"0cc146e8-e5ed-482c-8814-270bc48c2981"); + } + + @Test + public void testGetAllConnectionsOfIscsiDomain() { + List<StorageServerConnections> connections = dao.getAllForDomain(Guid.createGuidFromString("72e3a666-89e1-4005-a7ca-f7548004a9ab")); + assertEquals(connections.size(),2); + assertTrue((connections.get(0).getid().equals("fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk")) || (connections.get(0).getid().equals("0cc146e8-e5ed-482c-8814-270bc48c297e"))); + } } diff --git a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java index 074a88e..76c31fa 100644 --- a/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java +++ b/backend/manager/modules/dal/src/test/java/org/ovirt/engine/core/dao/StorageServerConnectionLunMapDAOTest.java @@ -29,7 +29,7 @@ dao = dbFacade.getStorageServerConnectionLunMapDao(); storageServerConnectionDao = dbFacade.getStorageServerConnectionDao(); - existingConnection = storageServerConnectionDao.get("0cc146e8-e5ed-482c-8814-270bc48c297f"); + existingConnection = storageServerConnectionDao.get("0cc146e8-e5ed-482c-8814-270bc48c297e"); newServerConnection = new StorageServerConnections(); newServerConnection.setid("0cc146e8-e5ed-482c-8814-270bc48c2980"); diff --git a/backend/manager/modules/dal/src/test/resources/fixtures.xml b/backend/manager/modules/dal/src/test/resources/fixtures.xml index 8600fd7..248b452 100644 --- a/backend/manager/modules/dal/src/test/resources/fixtures.xml +++ b/backend/manager/modules/dal/src/test/resources/fixtures.xml @@ -255,7 +255,7 @@ <row> <value></value> <value>1IET_00180001</value> - <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value> + <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value> <value>VIRTUAL-DISK-1</value> <value>1</value> <value>IET</value> @@ -264,7 +264,7 @@ <row> <value></value> <value>1IET_00180002</value> - <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value> + <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value> <value>VIRTUAL-DISK-1</value> <value>1</value> <value>IET</value> @@ -273,7 +273,7 @@ <row> <value></value> <value>1IET_00180003</value> - <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value> + <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value> <value>DETACHED-LUN-1</value> <value>1</value> <value>IET</value> @@ -282,7 +282,7 @@ <row> <value></value> <value>1IET_00180004</value> - <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value> + <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value> <value>SOME-LUN-DISK</value> <value>1</value> <value>IET</value> @@ -295,8 +295,14 @@ <column>storage_server_connection</column> <row> <value>1IET_00180001</value> - <value>0cc146e8-e5ed-482c-8814-270bc48c297f</value> + <value>0cc146e8-e5ed-482c-8814-270bc48c297e</value> </row> + <row> + <value>1IET_00180002</value> + <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value> + </row> + + 0cc146e8-e5ed-482c-8814-270bc48c2979 </table> <table name="tags"> @@ -2543,7 +2549,7 @@ <column>storage_description</column> <row> <value>72e3a666-89e1-4005-a7ca-f7548004a9ab</value> - <value>fDMzhE-wx3s-zo3q-Qcxd-T0li-yoYU-QvVePk</value> + <value>G95OWd-Wvck-vftu-pMq9-9SAC-NF3E-ulDPsQ</value> <value>scale_sd5</value> <value>0</value> <value>3</value> @@ -2565,7 +2571,7 @@ </row> <row> <value>c2211b56-8869-41cd-84e1-78d7cb96f31d</value> - <value>7fe9a439-a68e-4c15-8885-29d34eb6cabf</value> + <value>0cc146e8-e5ed-482c-8814-270bc48c297f</value> <value>nfs_master</value> <value>0</value> <value>1</value> @@ -2576,7 +2582,7 @@ </row> <row> <value>d9ede37f-e6c3-4bf9-a984-19174070aa31</value> - <value>c6d12efe-f0c5-4ce8-b755-21c7aac09c5b</value> + <value>0cc146e8-e5ed-482c-8814-270bc48c2981</value> <value>nfs_master2</value> <value>0</value> <value>1</value> 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 9244d09..a2eaef9 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 @@ -42,4 +42,7 @@ @Path("disks") public DisksResource getDisksResource(); + + @Path("storageconnections") + public StorageDomainServerConnectionsResource getStorageConnectionsResource(); } diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java new file mode 100644 index 0000000..af696c3 --- /dev/null +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionResource.java @@ -0,0 +1,13 @@ +package org.ovirt.engine.api.resource; + +import javax.ws.rs.GET; + +import org.jboss.resteasy.annotations.providers.jaxb.Formatted; +import org.ovirt.engine.api.model.StorageConnection; + +public interface StorageDomainServerConnectionResource { + @GET + @Formatted + public StorageConnection get(); + +} diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java new file mode 100644 index 0000000..34a47b2 --- /dev/null +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainServerConnectionsResource.java @@ -0,0 +1,26 @@ +package org.ovirt.engine.api.resource; + +import javax.ws.rs.GET; +import javax.ws.rs.Path; +import javax.ws.rs.PathParam; +import javax.ws.rs.Produces; + +import org.jboss.resteasy.annotations.providers.jaxb.Formatted; +import org.ovirt.engine.api.model.StorageConnections; + +@Produces({ ApiMediaType.APPLICATION_XML, ApiMediaType.APPLICATION_JSON, ApiMediaType.APPLICATION_X_YAML }) +public interface StorageDomainServerConnectionsResource { + @GET + @Formatted + public StorageConnections list(); + + /** + * Sub-resource locator method, returns individual StorageDomainServerConnectionResource on which the remainder of the URI is + * dispatched. + * @param id + * the StorageDomain ID + * @return matching subresource if found + */ + @Path("{id}") + public StorageDomainServerConnectionResource getStorageConnectionSubResource(@PathParam("id") String id); +} 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 1a329b4..fcf9d11 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 @@ -1167,6 +1167,21 @@ urlparams: {} headers: Filter: {value: true|false, required: false} +- name: /api/storagedomains/{storagedomain:id}/storageconnections|rel=get + request: + body: + parameterType: null + signatures: [] + urlparams: + max: {context: matrix, type: 'xs:int', value: 'max results', required: false} + headers: {} +- name: /api/storagedomains/{storagedomain:id}/storageconnections/{storageconnection:id}|rel=get + request: + body: + parameterType: null + signatures: [] + urlparams: {} + headers: {} - name: /api/clusters/{cluster:id}|rel=delete request: body: 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 3edb851..00f8498 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 @@ -19,6 +19,7 @@ import org.ovirt.engine.api.resource.RemovableStorageDomainContentsResource; import org.ovirt.engine.api.resource.FilesResource; import org.ovirt.engine.api.resource.StorageDomainResource; +import org.ovirt.engine.api.resource.StorageDomainServerConnectionsResource; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.ExtendSANStorageDomainParameters; import org.ovirt.engine.core.common.action.StorageDomainManagementParameter; @@ -109,9 +110,9 @@ } public static synchronized String[] getLinksToExclude(StorageDomain storageDomain) { - return isIsoDomain(storageDomain) ? new String[] { "templates", "vms", "disks" } + return isIsoDomain(storageDomain) ? new String[] { "templates", "vms", "disks", "storageconnections" } : - isExportDomain(storageDomain) ? new String[]{"files"} + isExportDomain(storageDomain) ? new String[]{"files", "storageconnections"} : new String[]{"templates", "vms", "files"}; } @@ -267,4 +268,9 @@ public DisksResource getDisksResource() { return inject(new BackendStorageDomainDisksResource(guid)); } + + @Override + public StorageDomainServerConnectionsResource getStorageConnectionsResource() { + return inject(new BackendStorageDomainServerConnectionsResource(guid)); + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java new file mode 100644 index 0000000..f75e67e --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionResource.java @@ -0,0 +1,34 @@ +package org.ovirt.engine.api.restapi.resource; + +import org.ovirt.engine.api.model.StorageConnection; +import org.ovirt.engine.api.resource.StorageDomainServerConnectionResource; +import org.ovirt.engine.api.resource.StorageDomainServerConnectionsResource; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.queries.StorageServerConnectionQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +public class BackendStorageDomainServerConnectionResource extends + AbstractBackendSubResource<StorageConnection, StorageServerConnections> implements StorageDomainServerConnectionResource { + private StorageDomainServerConnectionsResource parent; + + public BackendStorageDomainServerConnectionResource(String id, StorageDomainServerConnectionsResource parent) { + super(id, StorageConnection.class, StorageServerConnections.class); + this.parent = parent; + } + + @Override + public StorageConnection get() { + return performGet(VdcQueryType.GetStorageServerConnectionById, + new StorageServerConnectionQueryParametersBase(guid.toString())); + } + + @Override + protected StorageConnection doPopulate(StorageConnection model, StorageServerConnections entity) { + return model; + } + + public StorageDomainServerConnectionsResource getParent() { + return parent; + } + +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java new file mode 100644 index 0000000..dcdc408 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResource.java @@ -0,0 +1,64 @@ +package org.ovirt.engine.api.restapi.resource; + +import java.util.List; + +import javax.ws.rs.core.Response; + +import org.ovirt.engine.api.model.StorageConnection; +import org.ovirt.engine.api.model.StorageConnections; +import org.ovirt.engine.api.resource.StorageDomainServerConnectionResource; +import org.ovirt.engine.api.resource.StorageDomainServerConnectionsResource; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.queries.IdQueryParameters; +import org.ovirt.engine.core.common.queries.VdcQueryType; +import org.ovirt.engine.core.compat.Guid; + +public class BackendStorageDomainServerConnectionsResource extends AbstractBackendCollectionResource<StorageConnection, StorageServerConnections> implements StorageDomainServerConnectionsResource { + + Guid storageDomainId = null; + + public BackendStorageDomainServerConnectionsResource(Guid storageDomainId) { + super(StorageConnection.class, StorageServerConnections.class); + this.storageDomainId = storageDomainId; + } + + @Override + public StorageConnections list() { + List<StorageServerConnections> connections = getConnections(); + return mapCollection(connections); + } + + protected List<StorageServerConnections> getConnections() { + return getEntity(List.class, + VdcQueryType.GetStorageServerConnectionsForDomain, + new IdQueryParameters(storageDomainId), + "storage domain: id=" + storageDomainId); + } + + @Override + protected StorageConnection doPopulate(StorageConnection model, StorageServerConnections entity) { + return model; + } + + private StorageConnections mapCollection(List<StorageServerConnections> entities) { + StorageConnections collection = new StorageConnections(); + for (StorageServerConnections entity : entities) { + StorageConnection connection = map(entity); + if (connection != null) { + collection.getStorageConnections().add(addLinks(populate(connection, entity))); + } + } + return collection; + } + + @Override + protected Response performRemove(String id) { + throw new UnsupportedOperationException(); + } + + @Override + @SingleEntityResource + public StorageDomainServerConnectionResource getStorageConnectionSubResource(String id) { + return inject(new BackendStorageDomainServerConnectionResource(id, this)); + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java index 155c3d0..15bc29a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResource.java @@ -49,7 +49,7 @@ extends AbstractBackendCollectionResource<StorageDomain, org.ovirt.engine.core.common.businessentities.StorageDomain> implements StorageDomainsResource { - static final String[] SUB_COLLECTIONS = { "permissions", "files", "templates", "vms", "disks" }; + static final String[] SUB_COLLECTIONS = { "permissions", "files", "templates", "vms", "disks" , "storageconnections"}; private StorageDomain storageDomain = null; //utility variable; used in the context of a single activation of remove() diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java index 9926509..201ab00 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/utils/FeaturesHelper.java @@ -61,6 +61,7 @@ addForceSelectSpmFeature(features); addConsoleFeature(features); addFeatureStorageServerConnections(features); + addFeatureStorageServerConnectionsForDomain(features); addSingleQxlPciFeature(features); addFeatureAddVmFromOvf(features); } @@ -318,4 +319,11 @@ feature.setDescription("Ability to add VM from provided OVF configuration."); features.getFeature().add(feature); } + + private void addFeatureStorageServerConnectionsForDomain(Features features) { + Feature feature = new Feature(); + feature.setName("Storage server connections of a storage domain"); + feature.setDescription("Ability to view storage server connections of a specific storage domain (GET .../storagedomains/{storagedomain:id}/storageconnections)"); + features.getFeature().add(feature); + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java new file mode 100644 index 0000000..3242813 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainServerConnectionsResourceTest.java @@ -0,0 +1,80 @@ +package org.ovirt.engine.api.restapi.resource; + +import static org.easymock.EasyMock.expect; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Ignore; +import org.junit.Test; +import org.ovirt.engine.api.model.StorageConnection; +import org.ovirt.engine.core.common.businessentities.StorageServerConnections; +import org.ovirt.engine.core.common.businessentities.StorageType; +import org.ovirt.engine.core.common.queries.VdcQueryParametersBase; +import org.ovirt.engine.core.common.queries.VdcQueryType; + +public class BackendStorageDomainServerConnectionsResourceTest extends AbstractBackendCollectionResourceTest<StorageConnection, StorageServerConnections, BackendStorageDomainServerConnectionsResource> { + protected static final org.ovirt.engine.core.common.businessentities.StorageType STORAGE_TYPES_MAPPED[] = { + org.ovirt.engine.core.common.businessentities.StorageType.NFS, + org.ovirt.engine.core.common.businessentities.StorageType.LOCALFS, + org.ovirt.engine.core.common.businessentities.StorageType.POSIXFS, + org.ovirt.engine.core.common.businessentities.StorageType.ISCSI }; + + public BackendStorageDomainServerConnectionsResourceTest() { + super(new BackendStorageDomainServerConnectionsResource(GUIDS[3]), null, ""); + } + + @Test + @Ignore + @Override + public void testQuery() throws Exception { + } + + + @Override + protected List<StorageConnection> getCollection() { + return collection.list().getStorageConnections(); + } + + @Override + protected void setUpQueryExpectations(String query, Object failure) throws Exception { + assert (query.equals("")); + + setUpEntityQueryExpectations(VdcQueryType.GetStorageServerConnectionsForDomain, + VdcQueryParametersBase.class, + new String[] {}, + new Object[] {}, + setUpStorageConnections(), + failure); + + control.replay(); + } + + protected List<StorageServerConnections> setUpStorageConnections() { + List<StorageServerConnections> storageConnections = new ArrayList<>(); + storageConnections.add(getEntity(3)); + return storageConnections; + } + + @Override + protected void verifyCollection(List<StorageConnection> collection) throws Exception { + assertNotNull(collection); + assertEquals(1, collection.size()); + } + + @Override + protected StorageServerConnections getEntity(int index) { + return setUpEntityExpectations(control.createMock(StorageServerConnections.class), index); + } + + static StorageServerConnections setUpEntityExpectations(StorageServerConnections entity, int index) { + expect(entity.getid()).andReturn(GUIDS[index].toString()).anyTimes(); + expect(entity.getstorage_type()).andReturn(STORAGE_TYPES_MAPPED[index]).anyTimes(); + expect(entity.getconnection()).andReturn("1.1.1.255").anyTimes(); + if (STORAGE_TYPES_MAPPED[index].equals(StorageType.ISCSI)) { + expect(entity.getport()).andReturn("3260").anyTimes(); + } + + return entity; + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java index 8d50cb6..f29c18a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java +++ b/backend/manager/modules/restapi/jaxrs/src/test/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainsResourceTest.java @@ -835,7 +835,7 @@ assertEquals(TARGET, model.getStorage().getVolumeGroup().getLogicalUnits().get(0).getTarget()); assertEquals(ADDRESSES[0], model.getStorage().getVolumeGroup().getLogicalUnits().get(0).getAddress()); assertEquals(PORT, model.getStorage().getVolumeGroup().getLogicalUnits().get(0).getPort()); - assertEquals(2, model.getLinks().size()); + assertEquals(3, model.getLinks().size()); assertEquals("permissions", model.getLinks().get(0).getRel()); assertNotNull(model.getLinks().get(0).getHref()); verifyLinks(model); diff --git a/packaging/dbscripts/storages_sp.sql b/packaging/dbscripts/storages_sp.sql index 108aa34..98133fa 100644 --- a/packaging/dbscripts/storages_sp.sql +++ b/packaging/dbscripts/storages_sp.sql @@ -687,3 +687,27 @@ (v_supports_gluster_service = TRUE AND vg.gluster_service = TRUE)) AND vg.storage_pool_id = sp.id); END; $procedure$ LANGUAGE plpgsql; + + +CREATE OR REPLACE FUNCTION GetStorageServerConnectionsForDomain(v_storage_domain_id UUID) + RETURNS SETOF storage_server_connections + AS $procedure$ + BEGIN +RETURN QUERY SELECT * +FROM storage_server_connections +WHERE EXISTS ( SELECT 1 + FROM storage_domain_static + WHERE storage_domain_static.id = v_storage_domain_id + AND storage_domain_static.storage_type in (1,4,6) -- file storage domains - nfs,posix,local + AND storage_server_connections.id = storage_domain_static.storage + UNION ALL + SELECT 1 + FROM storage_domain_static + JOIN luns ON storage_domain_static.storage = luns.volume_group_id + JOIN lun_storage_server_connection_map ON luns.lun_id = lun_storage_server_connection_map.lun_id + AND storage_server_connections.id = lun_storage_server_connection_map.storage_server_connection + WHERE storage_domain_static.id = v_storage_domain_id + AND storage_domain_static.storage_type = 3 -- storage type = iscsi + ); +END; $procedure$ +LANGUAGE plpgsql; -- To view, visit http://gerrit.ovirt.org/17891 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I94c3e7e18705788b07b3bfd1a97a54d474e243aa Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Daniel Erez <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
