Chris Morrissey has uploaded a new change for review.
Change subject: core: Added RegisterDiskCommand and GetUnregisteredDisksQuery
......................................................................
core: Added RegisterDiskCommand and GetUnregisteredDisksQuery
I am working on a plugin for NetApp storage systems that will
use its cloning capabilities to clone disks outside of oVirt.
This new query and command will allow us to discover and register
those disks in oVirt so that we can attach them to copies of the
original VM.
This change set adds a new VDS command, GetVolumesList that
already existed in the VDSM API but was not exposed in oVirt.
The functionality to query for new disk images uses a new
GetUnregisteredDisks query. This returns the list of unregistered
images. The GetVolumesList and GetImageInfo VDS commands are used to
populate the disk images that are then added to the oVirt DB
through the new RegisterDiskCommand.
There are some assumptions made in that images that contain
snapshots will not be imported as we don't have the associated
snapshot metadata. Also, this is only supported on NFS storage
domains.
When querying to find the storage pool associated with the
storage domain, I found that it returned a list of storage
pools. I am assuming that an NFS based storage domain would
only belong to a single storage pool and thus I took the first
item in the list. If this assumption is unfounded please note
in the review.
This change also implements the GET and POST methods for the
REST /api/storagedomains/{storagedomain:id}/disks;unregistered
resource. These depend on the new RegisterDiskCommand and
GetUnregisteredDisksQuery.
Change-Id: I82de498fd9a8e25ed9e1dc5776f2fdf0c35b46da
Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=886133
Signed-off-by: Chris Morrissey <[email protected]>
---
A
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java
A
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java
A
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java
A
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQueryTest.java
A
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RegisterDiskParameters.java
M
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
A
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetUnregisteredDiskQueryParameters.java
M
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/VdcQueryType.java
A
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.java
M
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
M
backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
M
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDiskResource.java
M
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDisksResource.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
A
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java
A
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetVolumesListVDSCommand.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java
A
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java
M
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java
A
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UUIDListReturnForXmlRpc.java
21 files changed, 656 insertions(+), 16 deletions(-)
git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/83/11783/1
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java
new file mode 100644
index 0000000..c5a1072
--- /dev/null
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDiskQuery.java
@@ -0,0 +1,98 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.List;
+
+import org.ovirt.engine.core.bll.interfaces.BackendInternal;
+import org.ovirt.engine.core.common.businessentities.Disk;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.DiskInterface;
+import org.ovirt.engine.core.common.businessentities.storage_pool;
+import org.ovirt.engine.core.common.queries.GetUnregisteredDiskQueryParameters;
+import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import
org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters;
+import
org.ovirt.engine.core.common.vdscommands.StoragePoolDomainAndGroupIdBaseVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.compat.Guid;
+
+public class GetUnregisteredDiskQuery<P extends
GetUnregisteredDiskQueryParameters> extends QueriesCommandBase<P> {
+
+ public GetUnregisteredDiskQuery(P parameters) {
+ super(parameters);
+ }
+
+ @Override
+ protected void executeQueryCommand() {
+ Disk unregisteredDisk = populateDisk(getBackend(),
getParameters().getStorageDomainId(), getParameters()
+ .getDiskId());
+ if (unregisteredDisk != null) {
+ getQueryReturnValue().setReturnValue(unregisteredDisk);
+ getQueryReturnValue().setSucceeded(true);
+ }
+ }
+
+ public static DiskImage populateDisk(BackendInternal backend, Guid
storageDomainId, Guid diskId) {
+ Guid storagePoolId = getStoragePoolIdForDomain(backend,
storageDomainId);
+
+ // Now get the list of volumes for each new image.
+ StoragePoolDomainAndGroupIdBaseVDSCommandParameters
getVolumesParameters = new StoragePoolDomainAndGroupIdBaseVDSCommandParameters(
+ storagePoolId, storageDomainId, diskId);
+ VDSReturnValue volumesListReturn =
backend.getResourceManager().RunVdsCommand(VDSCommandType.GetVolumesList,
+ getVolumesParameters);
+ if (volumesListReturn.getSucceeded()) {
+ @SuppressWarnings("unchecked")
+ List<Guid> volumesList = (List<Guid>)
volumesListReturn.getReturnValue();
+
+ // We can't deal with snapshots, so there should only be a single
volume associated with the
+ // image. If there are multiple volumes, skip the image and move
on to the next.
+ if (volumesList.size() == 1) {
+ Guid volumeId = volumesList.get(0);
+
+ // Get the information about the volume from VDSM.
+ GetImageInfoVDSCommandParameters imageInfoParameters = new
GetImageInfoVDSCommandParameters(
+ storagePoolId, storageDomainId, diskId, volumeId);
+ VDSReturnValue imageInfoReturn =
backend.getResourceManager().RunVdsCommand(
+ VDSCommandType.GetImageInfo, imageInfoParameters);
+
+ if (imageInfoReturn.getSucceeded()) {
+ DiskImage newDiskImage = (DiskImage)
imageInfoReturn.getReturnValue();
+ // The disk image won't have an interface set on it. Set
it to IDE by default. When the
+ // disk is attached to a VM, its interface can be changed
to the appropriate value for that VM.
+ newDiskImage.setDiskInterface(DiskInterface.IDE);
+ newDiskImage.setstorage_pool_id(storagePoolId);
+ return newDiskImage;
+ } else {
+ RuntimeException exc =
imageInfoReturn.getExceptionObject();
+ if (exc != null) {
+ throw exc;
+ }
+ }
+ }
+ } else {
+ RuntimeException exc = volumesListReturn.getExceptionObject();
+ if (exc != null) {
+ throw exc;
+ }
+ }
+ return null;
+ }
+
+ protected static Guid getStoragePoolIdForDomain(BackendInternal backend,
Guid storageDomainId) {
+ // Retrieve the storage pools for the storage domain. This is needed
when getting the list of volumes in the
+ // unregistered images we find in the domain.
+ VdcQueryReturnValue returnValue =
backend.runInternalQuery(VdcQueryType.GetStoragePoolsByStorageDomainId,
+ new StorageDomainQueryParametersBase(storageDomainId));
+ @SuppressWarnings("unchecked")
+ List<storage_pool> storagePools = (List<storage_pool>)
returnValue.getReturnValue();
+
+ if (storagePools != null && !storagePools.isEmpty()) {
+ // Take the first storage pool. We should only be running on NFS
domains and thus shouldonly have a single
+ // storage pool to deal with.
+ return storagePools.get(0).getId();
+ } else {
+ return Guid.Empty;
+ }
+ }
+}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java
new file mode 100644
index 0000000..f5ea3ee
--- /dev/null
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQuery.java
@@ -0,0 +1,71 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.common.businessentities.Disk;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend;
+import org.ovirt.engine.core.common.queries.GetUnregisteredDiskQueryParameters;
+import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import
org.ovirt.engine.core.common.vdscommands.GetImagesListVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.utils.ThreadLocalParamsContainer;
+
+public class GetUnregisteredDisksQuery<P extends
StorageDomainQueryParametersBase> extends QueriesCommandBase<P> {
+
+ public GetUnregisteredDisksQuery(P parameters) {
+ super(parameters);
+ }
+
+ @Override
+ protected void executeQueryCommand() {
+ // first, run getImagesList query into vdsm to get all of the images
on the storage domain - then store in
+ // imagesList
+ VDSBrokerFrontend vdsBroker = getVdsBroker();
+ VDSReturnValue imagesListResult =
vdsBroker.RunVdsCommand(VDSCommandType.GetImagesList,
+ new GetImagesListVDSCommandParameters(getStorageDomainId(),
getStoragePoolId()));
+ @SuppressWarnings("unchecked")
+ List<Guid> imagesList = (List<Guid>) imagesListResult.getReturnValue();
+ // fromDao is a list of all disk images on the domain from the DAO
+ List<DiskImage> fromDao =
getDbFacade().getDiskImageDao().getAllSnapshotsForStorageDomain(getStorageDomainId());
+ // then, compare the list of all images on the domain with the list
oVirt recognizes
+ // if the ID in imagesList is recognized by oVirt, remove from list
+ for (DiskImage image : fromDao) {
+ imagesList.remove(image.getId());
+ }
+ List<Disk> unregisteredDisks = new ArrayList<Disk>();
+ for (Guid unregisteredDiskId : imagesList) {
+ String sessionId = getParameters().getSessionId();
+ if (sessionId == null) {
+ sessionId = ThreadLocalParamsContainer.getHttpSessionId();
+ }
+ GetUnregisteredDiskQueryParameters unregQueryParams = new
GetUnregisteredDiskQueryParameters(
+ unregisteredDiskId, getStorageDomainId());
+ VdcQueryReturnValue unregQueryReturn =
getBackend().runInternalQuery(VdcQueryType.GetUnregisteredDisk,
+ unregQueryParams);
+ if (unregQueryReturn.getSucceeded()) {
+ unregisteredDisks.add((Disk)
unregQueryReturn.getReturnValue());
+ } else {
+ System.out.println("Could not get populated disk, reason: " +
unregQueryReturn.getExceptionString());
+ }
+ }
+ getQueryReturnValue().setReturnValue(unregisteredDisks);
+ }
+
+ protected VDSBrokerFrontend getVdsBroker() {
+ return Backend.getInstance().getResourceManager();
+ }
+
+ protected Guid getStoragePoolId() {
+ return
getDbFacade().getStoragePoolDao().getAllForStorageDomain(getStorageDomainId()).get(0).getId();
+ }
+
+ protected Guid getStorageDomainId() {
+ return getParameters().getStorageDomainId();
+ }
+}
diff --git
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java
new file mode 100644
index 0000000..d701498
--- /dev/null
+++
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/RegisterDiskCommand.java
@@ -0,0 +1,67 @@
+package org.ovirt.engine.core.bll;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.ovirt.engine.core.bll.quota.QuotaConsumptionParameter;
+import org.ovirt.engine.core.bll.quota.QuotaStorageConsumptionParameter;
+import org.ovirt.engine.core.bll.quota.QuotaStorageDependent;
+import org.ovirt.engine.core.common.action.RegisterDiskParameters;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.VdcBllMessages;
+
+@InternalCommandAttribute
+@NonTransactiveCommandAttribute(forceCompensation=true)
+public class RegisterDiskCommand <T extends RegisterDiskParameters> extends
BaseImagesCommand<T> implements QuotaStorageDependent {
+
+ private static final long serialVersionUID = -1201881996330878181L;
+
+ public RegisterDiskCommand(T parameters) {
+ super(parameters);
+ setStorageDomainId(parameters.getCommandId());
+ setStoragePoolId(parameters.getDiskImage().getstorage_pool_id());
+ parameters.setEntityId(parameters.getDiskImage().getId());
+ }
+
+ protected RegisterDiskCommand(Guid commandId) {
+ super(commandId);
+ }
+
+ @Override
+ protected boolean canDoAction() {
+ // Currently this only supports importing images and does not work
with luns.
+ return getParameters().getDiskImage().getDiskStorageType() ==
DiskStorageType.IMAGE;
+ }
+
+ @Override
+ protected void executeCommand() {
+ final DiskImage newDiskImage = getParameters().getDiskImage();
+ if (newDiskImage != null) {
+ addDiskImageToDb(newDiskImage, getCompensationContext());
+ getReturnValue().setActionReturnValue(newDiskImage.getId());
+ getReturnValue().setSucceeded(true);
+ }
+ }
+
+ @Override
+ protected void setActionMessageParameters() {
+ addCanDoActionMessage(VdcBllMessages.VAR__ACTION__IMPORT);
+ addCanDoActionMessage(VdcBllMessages.VAR__TYPE__VM_DISK);
+ }
+
+ @Override
+ public List<QuotaConsumptionParameter>
getQuotaStorageConsumptionParameters() {
+ List<QuotaConsumptionParameter> list = new
ArrayList<QuotaConsumptionParameter>();
+
+ list.add(new QuotaStorageConsumptionParameter(
+ getParameters().getDiskImage().getQuotaId(),
+ null,
+ QuotaConsumptionParameter.QuotaAction.CONSUME,
+ getStorageDomainId().getValue(),
+ getParameters().getDiskImage().getActualSize()));
+
+ return list;
+ }
+}
diff --git
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQueryTest.java
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQueryTest.java
new file mode 100644
index 0000000..7b38d52
--- /dev/null
+++
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/GetUnregisteredDisksQueryTest.java
@@ -0,0 +1,121 @@
+package org.ovirt.engine.core.bll;
+
+import static org.junit.Assert.assertEquals;
+import static org.mockito.Matchers.any;
+import static org.mockito.Matchers.eq;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.when;
+
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.List;
+
+import org.junit.Before;
+import org.junit.Rule;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.invocation.InvocationOnMock;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.mockito.stubbing.Answer;
+import org.ovirt.engine.core.bll.interfaces.BackendInternal;
+import org.ovirt.engine.core.common.businessentities.Disk;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend;
+import org.ovirt.engine.core.common.queries.GetUnregisteredDiskQueryParameters;
+import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
+import org.ovirt.engine.core.common.queries.VdcQueryType;
+import
org.ovirt.engine.core.common.vdscommands.GetImagesListVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
+import org.ovirt.engine.core.common.vdscommands.VDSReturnValue;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.dal.dbbroker.DbFacade;
+import org.ovirt.engine.core.dao.DiskImageDAO;
+import org.ovirt.engine.core.utils.MockConfigRule;
+
+@RunWith(MockitoJUnitRunner.class)
+public class GetUnregisteredDisksQueryTest
+ extends
+ AbstractQueryTest<StorageDomainQueryParametersBase,
GetUnregisteredDisksQuery<StorageDomainQueryParametersBase>> {
+
+ @Rule
+ public static final MockConfigRule mcr = new MockConfigRule();
+
+ private Guid importDiskId = Guid.NewGuid();
+ private Guid existingDiskId = Guid.NewGuid();
+ private Guid storageDomainId = Guid.NewGuid();
+ private Guid storagePoolId = Guid.NewGuid();
+
+ private List<Guid> importDiskIds = new
ArrayList<Guid>(Arrays.asList(importDiskId, existingDiskId));
+
+ @Before
+ public void setUp() throws Exception {
+ super.setUp();
+
+ prepareMocks();
+ }
+
+ @Test
+ public void testGetUnregisteredDisks() {
+
+ // Execute query
+ getQuery().executeQueryCommand();
+
+ // Assert the query's results
+ @SuppressWarnings("unchecked")
+ List<Disk> newDisks = (List<Disk>)
getQuery().getQueryReturnValue().getReturnValue();
+ assertEquals(newDisks.size(), 1);
+ assertEquals(newDisks.get(0).getId(), importDiskId);
+ }
+
+ /**
+ * Mock the DbFacade/VDSBroker and the DAOs
+ */
+ private void prepareMocks() {
+ BackendInternal backendMock = mock(BackendInternal.class);
+ VDSBrokerFrontend vdsBroker = mock(VDSBrokerFrontend.class);
+
+ DiskImage existingDiskImage = mock(DiskImage.class);
+ when(existingDiskImage.getId()).thenReturn(existingDiskId);
+ List<DiskImage> existingDiskImages = Arrays.asList(existingDiskImage);
+
+ // Mock the get images List VDS command
+ VDSReturnValue volListReturnValue = new VDSReturnValue();
+ volListReturnValue.setSucceeded(true);
+ volListReturnValue.setReturnValue(importDiskIds);
+
doReturn(volListReturnValue).when(vdsBroker).RunVdsCommand(eq(VDSCommandType.GetImagesList),
+ any(GetImagesListVDSCommandParameters.class));
+
+ // Mock the get unregistered disk query
+ when(backendMock.RunQuery(eq(VdcQueryType.GetUnregisteredDisk),
any(GetUnregisteredDiskQueryParameters.class)))
+ .thenAnswer(new Answer<VdcQueryReturnValue>() {
+
+ @Override
+ public VdcQueryReturnValue answer(InvocationOnMock
invocation) throws Throwable {
+ GetUnregisteredDiskQueryParameters params =
(GetUnregisteredDiskQueryParameters) invocation
+ .getArguments()[1];
+ VdcQueryReturnValue unregDiskReturnValue = new
VdcQueryReturnValue();
+ unregDiskReturnValue.setSucceeded(true);
+ DiskImage newDiskImage = mock(DiskImage.class);
+
when(newDiskImage.getId()).thenReturn(params.getDiskId());
+ unregDiskReturnValue.setReturnValue(newDiskImage);
+ return unregDiskReturnValue;
+ }
+ });
+
+ doReturn(storagePoolId).when(getQuery()).getStoragePoolId();
+ doReturn(storageDomainId).when(getQuery()).getStorageDomainId();
+
+ DbFacade dbFacadeMock = getDbFacadeMockInstance();
+ DiskImageDAO diskImageDAOMock = mock(DiskImageDAO.class);
+
when(diskImageDAOMock.getAllSnapshotsForStorageDomain(eq(storageDomainId))).thenReturn(existingDiskImages);
+ when(dbFacadeMock.getDiskImageDao()).thenReturn(diskImageDAOMock);
+
+ // Return the mocked backend when getBackend() is called on the query
+ doReturn(backendMock).when(getQuery()).getBackend();
+
+ // Return the mocked vdsBroker when getVDSBroker() is called on the
query
+ doReturn(vdsBroker).when(getQuery()).getVdsBroker();
+ }
+}
diff --git
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RegisterDiskParameters.java
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RegisterDiskParameters.java
new file mode 100644
index 0000000..0959a24
--- /dev/null
+++
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/RegisterDiskParameters.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.core.common.action;
+
+import org.ovirt.engine.core.common.businessentities.DiskImage;
+
+public class RegisterDiskParameters extends ImagesActionsParametersBase {
+
+ private static final long serialVersionUID = -1939500674856778636L;
+
+ private DiskImage diskImage;
+
+ public RegisterDiskParameters(DiskImage diskImage) {
+ super(diskImage.getId());
+ this.diskImage = diskImage;
+ }
+
+ public DiskImage getDiskImage() {
+ return diskImage;
+ }
+}
diff --git
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
index ed6cd19..79dbf15 100644
---
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
+++
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VdcActionType.java
@@ -35,6 +35,7 @@
RemoveVmInterface(29, ActionGroup.CONFIGURE_VM_NETWORK, false,
QuotaDependency.NONE),
UpdateVmInterface(30, ActionGroup.CONFIGURE_VM_NETWORK, false,
QuotaDependency.NONE),
AddDisk(31, ActionGroup.CONFIGURE_VM_STORAGE, QuotaDependency.STORAGE),
+ RegisterDisk(32, ActionGroup.CONFIGURE_VM_STORAGE,
QuotaDependency.STORAGE),
@Deprecated
MoveVm(33, ActionGroup.MOVE_VM, QuotaDependency.NONE),
UpdateVmDisk(34, ActionGroup.CONFIGURE_VM_STORAGE, false,
QuotaDependency.STORAGE),
diff --git
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetUnregisteredDiskQueryParameters.java
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetUnregisteredDiskQueryParameters.java
new file mode 100644
index 0000000..c2451f2
--- /dev/null
+++
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/queries/GetUnregisteredDiskQueryParameters.java
@@ -0,0 +1,19 @@
+package org.ovirt.engine.core.common.queries;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class GetUnregisteredDiskQueryParameters extends
StorageDomainQueryParametersBase {
+
+ private static final long serialVersionUID = 4444477909827451298L;
+
+ private Guid diskId;
+
+ public GetUnregisteredDiskQueryParameters(Guid diskId, Guid
storageDomainId) {
+ super(storageDomainId);
+ this.diskId = diskId;
+ }
+
+ public Guid getDiskId() {
+ return diskId;
+ }
+}
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 261dea5..041eebb 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
@@ -96,6 +96,8 @@
GetAllAttachableDisks(VdcQueryAuthType.User),
GetAllDisksByStorageDomainId,
GetAllDisks(VdcQueryAuthType.User),
+ GetUnregisteredDisks,
+ GetUnregisteredDisk,
GetImageByImageId,
GetDiskByDiskId,
diff --git
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.java
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.java
new file mode 100644
index 0000000..5558fba
--- /dev/null
+++
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/GetImagesListVDSCommandParameters.java
@@ -0,0 +1,33 @@
+package org.ovirt.engine.core.common.vdscommands;
+
+import org.ovirt.engine.core.compat.Guid;
+
+public class GetImagesListVDSCommandParameters extends
IrsBaseVDSCommandParameters {
+ public GetImagesListVDSCommandParameters(Guid sdUUID) {
+ super();
+ setStorageDomainId(sdUUID);
+ }
+
+ public GetImagesListVDSCommandParameters(Guid sdUUID, Guid spUUID) {
+ super(spUUID);
+ setStorageDomainId(sdUUID);
+ }
+
+ private Guid storageDomainId = new Guid();
+
+ public Guid getStorageDomainId() {
+ return storageDomainId;
+ }
+
+ private void setStorageDomainId(Guid value) {
+ storageDomainId = value;
+ }
+
+ public GetImagesListVDSCommandParameters() {
+ }
+
+ @Override
+ public String toString() {
+ return String.format("%s, sdUUID = %s", super.toString(),
getStorageDomainId());
+ }
+}
diff --git
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
index e4d3723..adccba5 100644
---
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
+++
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/vdscommands/VDSCommandType.java
@@ -96,6 +96,8 @@
VmReplicateDiskStart("org.ovirt.engine.core.vdsbroker.vdsbroker"),
VmReplicateDiskFinish("org.ovirt.engine.core.vdsbroker.vdsbroker"),
GetImageDomainsList("org.ovirt.engine.core.vdsbroker.irsbroker"),
+ GetImagesList("org.ovirt.engine.core.vdsbroker.irsbroker"),
+ GetVolumesList("org.ovirt.engine.core.vdsbroker.irsbroker"),
CreateVG("org.ovirt.engine.core.vdsbroker.vdsbroker"),
GetVGList("org.ovirt.engine.core.vdsbroker.vdsbroker"),
GetVGInfo("org.ovirt.engine.core.vdsbroker.vdsbroker"),
diff --git
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
index 237817b..283185e 100644
---
a/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
+++
b/backend/manager/modules/dal/src/main/resources/bundles/ExecutionMessages.properties
@@ -85,6 +85,7 @@
job.ReplaceGlusterVolumeBrick=Replacing Brick in Gluster Volume
${GlusterVolume}
job.AddBricksToGlusterVolume=Adding Bricks to Gluster Volume ${GlusterVolume}
job.RemoveGlusterServer=Removing Gluster Server ${VDS}
+job.RegisterDisk=Registering Disk ${DiskAlias}
# Step types
step.VALIDATING=Validating
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDiskResource.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDiskResource.java
index 88bd8ea..44072a9 100644
---
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDiskResource.java
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDiskResource.java
@@ -29,8 +29,8 @@
}
@Override
- protected Disk populate(Disk model,
org.ovirt.engine.core.common.businessentities.Disk entity) {
- Disk populatedDisk = super.populate(model, entity);
+ protected Disk doPopulate(Disk model,
org.ovirt.engine.core.common.businessentities.Disk entity) {
+ Disk populatedDisk = super.doPopulate(model, entity);
// this code generates back-link to the corresponding SD
populatedDisk.setStorageDomain(new StorageDomain());
diff --git
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDisksResource.java
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDisksResource.java
index a6b0bdb..a83e1f6 100644
---
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDisksResource.java
+++
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainDisksResource.java
@@ -2,24 +2,29 @@
import javax.ws.rs.core.Response;
-import org.apache.commons.lang.NotImplementedException;
import org.ovirt.engine.api.common.util.QueryHelper;
import org.ovirt.engine.api.model.Disk;
import org.ovirt.engine.api.model.Disks;
import org.ovirt.engine.api.model.StorageDomain;
import org.ovirt.engine.api.resource.DiskResource;
import org.ovirt.engine.core.common.action.AddDiskParameters;
+import org.ovirt.engine.core.common.action.RegisterDiskParameters;
import org.ovirt.engine.core.common.action.RemoveDiskParameters;
import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.DiskImage;
import org.ovirt.engine.core.common.queries.GetDiskByDiskIdParameters;
+import org.ovirt.engine.core.common.queries.GetUnregisteredDiskQueryParameters;
import org.ovirt.engine.core.common.queries.StorageDomainQueryParametersBase;
+import org.ovirt.engine.core.common.queries.VdcQueryReturnValue;
import org.ovirt.engine.core.common.queries.VdcQueryType;
import org.ovirt.engine.core.compat.Guid;
-
public class BackendStorageDomainDisksResource extends BackendDisksResource {
public static final String UNREGISTERED_CONSTRAINT_PARAMETER =
"unregistered";
+
+ private final QueryIdResolver<Guid> ID_RESOLVER = new
QueryIdResolver<Guid>(VdcQueryType.GetDiskByDiskId,
+ GetDiskByDiskIdParameters.class);
Guid storageDomainId;
@@ -31,8 +36,9 @@
@Override
public Disks list() {
if (QueryHelper.hasMatrixParam(getUriInfo(),
UNREGISTERED_CONSTRAINT_PARAMETER)) {
- // TODO: add "unregistered" disks lookup
- throw new NotImplementedException("\"unregistered\" disks lookup
yet not implemented.");
+ return
mapCollection(getBackendCollection(VdcQueryType.GetUnregisteredDisks,
+ new
StorageDomainQueryParametersBase(this.storageDomainId)));
+
} else {
return
mapCollection(getBackendCollection(VdcQueryType.GetAllDisksByStorageDomainId,
new
StorageDomainQueryParametersBase(this.storageDomainId)));
@@ -41,14 +47,28 @@
@Override
public Response add(Disk disk) {
- validateDiskForCreation(disk);
- AddDiskParameters params = new AddDiskParameters();
- params.setDiskInfo(getMapper(Disk.class,
-
org.ovirt.engine.core.common.businessentities.Disk.class)
- .map(disk, null));
- params.setStorageDomainId(this.storageDomainId);
- return performCreation(VdcActionType.AddDisk, params,
- new QueryIdResolver(VdcQueryType.GetDiskByDiskId,
GetDiskByDiskIdParameters.class));
+ if (QueryHelper.hasMatrixParam(getUriInfo(),
UNREGISTERED_CONSTRAINT_PARAMETER)) {
+ // First we need to query the backend to fill in all the
information about the disk from the VDSM.
+ // We don't just use the information from the Disk object because
it's missing a few things like creation
+ // date and last modified date.
+ GetUnregisteredDiskQueryParameters getDiskParams = new
GetUnregisteredDiskQueryParameters(
+ Guid.createGuidFromString(disk.getId()), storageDomainId);
+ VdcQueryReturnValue populateReturn =
runQuery(VdcQueryType.GetUnregisteredDisk, getDiskParams);
+ if (populateReturn.getSucceeded()) {
+ DiskImage unregisteredDisk = (DiskImage)
populateReturn.getReturnValue();
+ RegisterDiskParameters registerDiskParams = new
RegisterDiskParameters(unregisteredDisk);
+ return performCreate(VdcActionType.RegisterDisk,
registerDiskParams, ID_RESOLVER);
+ } else {
+ return handleError(new
Exception(populateReturn.getExceptionString()), false);
+ }
+ } else {
+ validateDiskForCreation(disk);
+ AddDiskParameters params = new AddDiskParameters();
+ params.setDiskInfo(getMapper(Disk.class,
org.ovirt.engine.core.common.businessentities.Disk.class).map(
+ disk, null));
+ params.setStorageDomainId(this.storageDomainId);
+ return performCreate(VdcActionType.AddDisk, params, ID_RESOLVER);
+ }
}
@Override
@@ -64,8 +84,8 @@
}
@Override
- protected Disk populate(Disk model,
org.ovirt.engine.core.common.businessentities.Disk entity) {
- Disk populatedDisk = super.populate(model, entity);
+ protected Disk doPopulate(Disk model,
org.ovirt.engine.core.common.businessentities.Disk entity) {
+ Disk populatedDisk = super.doPopulate(model, entity);
// this code generates back-link to the corresponding SD
populatedDisk.setStorageDomain(new StorageDomain());
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
index 3e2ebbc..4e687db 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImageInfoVDSCommand.java
@@ -6,6 +6,8 @@
import org.ovirt.engine.core.common.businessentities.DiskImage;
import org.ovirt.engine.core.common.businessentities.ImageStatus;
+import org.ovirt.engine.core.common.businessentities.VolumeFormat;
+import org.ovirt.engine.core.common.businessentities.VolumeType;
import org.ovirt.engine.core.common.errors.VdcBllErrors;
import org.ovirt.engine.core.common.utils.EnumUtils;
import
org.ovirt.engine.core.common.vdscommands.GetImageInfoVDSCommandParameters;
@@ -109,6 +111,14 @@
if (xmlRpcStruct.contains("image")) {
newImage.setimage_group_id(new
Guid(xmlRpcStruct.getItem("image").toString()));
}
+ if (xmlRpcStruct.contains("type")) {
+ newImage.setvolume_type(EnumUtils.valueOf(VolumeType.class,
xmlRpcStruct.getItem("type").toString(),
+ true));
+ }
+ if (xmlRpcStruct.contains("format")) {
+
newImage.setvolume_format(EnumUtils.valueOf(VolumeFormat.class,
xmlRpcStruct.getItem("format")
+ .toString(), true));
+ }
} catch (RuntimeException ex) {
log.errorFormat("irsBroker::buildImageEntity::Failed building
DIskImage");
PrintReturnValue();
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java
new file mode 100644
index 0000000..805053b
--- /dev/null
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetImagesListVDSCommand.java
@@ -0,0 +1,53 @@
+package org.ovirt.engine.core.vdsbroker.irsbroker;
+
+import java.util.ArrayList;
+
+import org.ovirt.engine.core.common.errors.VDSError;
+import org.ovirt.engine.core.common.errors.VdcBllErrors;
+import
org.ovirt.engine.core.common.vdscommands.GetImagesListVDSCommandParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc;
+
+public class GetImagesListVDSCommand<P extends
GetImagesListVDSCommandParameters>
+ extends IrsBrokerCommand<P> {
+ private ImagesListReturnForXmlRpc _result;
+
+ public GetImagesListVDSCommand(P parameters) {
+ super(parameters);
+ }
+
+ @Override
+ protected void ExecuteIrsBrokerCommand() {
+ _result =
getIrsProxy().getImagesList(getParameters().getStorageDomainId().toString());
+ ProceedProxyReturnValue();
+ ArrayList<Guid> tempRetValue = new
ArrayList<Guid>(_result.getImageList().length);
+ for (String id : _result.getImageList()) {
+ tempRetValue.add(new Guid(id));
+ }
+ setReturnValue(tempRetValue);
+ }
+
+ @Override
+ protected StatusForXmlRpc getReturnStatus() {
+ return _result.mStatus;
+ }
+
+ @Override
+ protected Object getReturnValueFromBroker() {
+ return _result;
+ }
+
+ @Override
+ protected void ProceedProxyReturnValue() {
+ VdcBllErrors returnStatus =
GetReturnValueFromStatus(getReturnStatus());
+ switch (returnStatus) {
+ case GetStorageDomainListError:
+ getVDSReturnValue().setVdsError(new VDSError(returnStatus,
getReturnStatus().mMessage));
+ getVDSReturnValue().setSucceeded(false);
+ break;
+ default:
+ super.ProceedProxyReturnValue();
+ break;
+ }
+ }
+}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetVolumesListVDSCommand.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetVolumesListVDSCommand.java
new file mode 100644
index 0000000..cb6830e
--- /dev/null
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/GetVolumesListVDSCommand.java
@@ -0,0 +1,56 @@
+package org.ovirt.engine.core.vdsbroker.irsbroker;
+
+import java.util.ArrayList;
+
+import org.ovirt.engine.core.common.errors.VDSError;
+import org.ovirt.engine.core.common.errors.VdcBllErrors;
+import
org.ovirt.engine.core.common.vdscommands.StoragePoolDomainAndGroupIdBaseVDSCommandParameters;
+import org.ovirt.engine.core.compat.Guid;
+import org.ovirt.engine.core.vdsbroker.vdsbroker.StatusForXmlRpc;
+
+public class GetVolumesListVDSCommand<P extends
StoragePoolDomainAndGroupIdBaseVDSCommandParameters> extends
IrsBrokerCommand<P> {
+ private UUIDListReturnForXmlRpc _result;
+
+ public GetVolumesListVDSCommand(P parameters) {
+ super(parameters);
+ }
+
+ @Override
+ protected void ExecuteIrsBrokerCommand() {
+ _result =
+
getIrsProxy().getVolumesList(getParameters().getStorageDomainId().toString(),
+ getParameters().getStoragePoolId().toString(),
+ getParameters().getImageGroupId().toString());
+ ProceedProxyReturnValue();
+ ArrayList<Guid> tempRetValue = new
ArrayList<Guid>(_result.getUUIDList().length);
+ for (String id : _result.getUUIDList()) {
+ tempRetValue.add(new Guid(id));
+ }
+ setReturnValue(tempRetValue);
+ }
+
+ @Override
+ protected StatusForXmlRpc getReturnStatus() {
+ return _result.mStatus;
+ }
+
+ @Override
+ protected Object getReturnValueFromBroker() {
+ return _result;
+ }
+
+ @Override
+ protected void ProceedProxyReturnValue() {
+ VdcBllErrors returnStatus =
GetReturnValueFromStatus(getReturnStatus());
+ switch (returnStatus) {
+ case GetStorageDomainListError:
+ getVDSReturnValue().setVdsError(new VDSError(returnStatus,
getReturnStatus().mMessage));
+ getVDSReturnValue().setSucceeded(false);
+ break;
+ default:
+ super.ProceedProxyReturnValue();
+ break;
+ }
+ }
+
+}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java
index 5fff8aa..011cac3 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IIrsServer.java
@@ -91,4 +91,8 @@
GetVmsListReturnForXmlRpc getVmsList(String storagePoolId, String
storageDomainId);
StatusOnlyReturnForXmlRpc upgradeStoragePool(String storagePoolId, String
targetVersion);
+
+ ImagesListReturnForXmlRpc getImagesList(String sdUUID);
+
+ UUIDListReturnForXmlRpc getVolumesList(String sdUUID, String spUUID,
String imgUUID);
}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java
new file mode 100644
index 0000000..69dfdb5
--- /dev/null
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/ImagesListReturnForXmlRpc.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.vdsbroker.irsbroker;
+
+import java.util.Map;
+
+public final class ImagesListReturnForXmlRpc extends StatusReturnForXmlRpc {
+ private static final String IMAGES_LIST = "imageslist";
+ private String[] mImageList;
+
+ public ImagesListReturnForXmlRpc(Map<String, Object> innerMap) {
+ super(innerMap);
+ Object[] tempObj = (Object[]) innerMap.get(IMAGES_LIST);
+ if (tempObj != null) {
+ mImageList = new String[tempObj.length];
+ for (int i = 0; i < tempObj.length; i++) {
+ mImageList[i] = (String) tempObj[i];
+ }
+ }
+ }
+
+ public String[] getImageList() {
+ return mImageList;
+ }
+}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java
index 506ef9b..974d641 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerConnector.java
@@ -104,4 +104,7 @@
public Map<String, Object> upgradeStoragePool(String storagePoolId, String
targetVersion);
+ public Map<String, Object> getImagesList(String sdUUID);
+
+ public Map<String, Object> getVolumesList(String sdUUID, String spUUID,
String imgUUID);
}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java
index 0ff238e..e322121 100644
---
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/IrsServerWrapper.java
@@ -265,4 +265,18 @@
Map<String, Object> xmlRpcReturnValue =
irsServer.upgradeStoragePool(storagePoolId, targetVersion);
return new StatusOnlyReturnForXmlRpc(xmlRpcReturnValue);
}
+
+ @Override
+ public ImagesListReturnForXmlRpc getImagesList(String sdUUID) {
+ Map<String, Object> xmlRpcReturnValue =
irsServer.getImagesList(sdUUID);
+ ImagesListReturnForXmlRpc wrapper = new
ImagesListReturnForXmlRpc(xmlRpcReturnValue);
+ return wrapper;
+ }
+
+ @Override
+ public UUIDListReturnForXmlRpc getVolumesList(String sdUUID, String
spUUID, String imgUUID) {
+ Map<String, Object> xmlRpcReturnValue =
irsServer.getVolumesList(sdUUID, spUUID, imgUUID);
+ UUIDListReturnForXmlRpc wrapper = new
UUIDListReturnForXmlRpc(xmlRpcReturnValue);
+ return wrapper;
+ }
}
diff --git
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UUIDListReturnForXmlRpc.java
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UUIDListReturnForXmlRpc.java
new file mode 100644
index 0000000..fbc50c2
--- /dev/null
+++
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/irsbroker/UUIDListReturnForXmlRpc.java
@@ -0,0 +1,23 @@
+package org.ovirt.engine.core.vdsbroker.irsbroker;
+
+import java.util.Map;
+
+public class UUIDListReturnForXmlRpc extends StatusReturnForXmlRpc {
+ private static final String UUID_LIST = "uuidlist";
+ private String[] mUUIDList;
+
+ public UUIDListReturnForXmlRpc(Map<String, Object> innerMap) {
+ super(innerMap);
+ Object[] tempObj = (Object[]) innerMap.get(UUID_LIST);
+ if (tempObj != null) {
+ mUUIDList = new String[tempObj.length];
+ for (int i = 0; i < tempObj.length; i++) {
+ mUUIDList[i] = (String) tempObj[i];
+ }
+ }
+ }
+
+ public String[] getUUIDList() {
+ return mUUIDList;
+ }
+}
--
To view, visit http://gerrit.ovirt.org/11783
To unsubscribe, visit http://gerrit.ovirt.org/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: I82de498fd9a8e25ed9e1dc5776f2fdf0c35b46da
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Chris Morrissey <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches