Ravi Nori has uploaded a new change for review. Change subject: restapi : vm/template Import candidates should have /disks (#829672) ......................................................................
restapi : vm/template Import candidates should have /disks (#829672) When importing vm/template via api only import candidate metadata is visible (disks are not). This patch exposes the disks subcollection of vm/template in the export domain. Change-Id: I83fd4b046f72f73bb516615137522ac40028a7f0 Bug-Url: https://bugzilla.redhat.com/show_bug.cgi?id=829672 Signed-off-by: Ravi Nori <rn...@redhat.com> --- M backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java A backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java M backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java 8 files changed, 211 insertions(+), 2 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/11126/1 diff --git a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java index 8a5408b..898dd81 100644 --- a/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java +++ b/backend/manager/modules/restapi/interface/definition/src/main/java/org/ovirt/engine/api/resource/StorageDomainContentResource.java @@ -45,4 +45,7 @@ @Actionable @Path("import") public Response doImport(Action action); + + @Path("disks") + public ReadOnlyDevicesResource getDisksResource(); } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java index 37ca75d..6169d28 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/AbstractBackendStorageDomainContentResource.java @@ -29,6 +29,15 @@ this.parent = parent; } + public AbstractBackendStorageDomainContentResource(String id, + AbstractBackendStorageDomainContentsResource<C, R, Q> parent, + Class<R> modelType, + Class<Q> entityType, + String... subCollection) { + super(id, modelType, entityType, subCollection); + this.parent = parent; + } + public AbstractBackendStorageDomainContentsResource<C, R, Q> getParent() { return parent; } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java new file mode 100644 index 0000000..632d1f7 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDiskResource.java @@ -0,0 +1,43 @@ +package org.ovirt.engine.api.restapi.resource; + +import org.ovirt.engine.api.model.Disk; +import org.ovirt.engine.api.model.Disks; +import org.ovirt.engine.api.resource.CreationResource; +import org.ovirt.engine.api.resource.ReadOnlyDeviceResource; + +public class BackendExportDomainTemplateDiskResource + extends AbstractBackendResource<Disk, org.ovirt.engine.core.common.businessentities.Disk> + implements ReadOnlyDeviceResource<Disk> { + + private final BackendExportDomainTemplateDisksResource parent; + private final String diskId; + + public BackendExportDomainTemplateDiskResource( + BackendExportDomainTemplateDisksResource parent, + String diskId) { + super(Disk.class, org.ovirt.engine.core.common.businessentities.Disk.class); + this.parent = parent; + this.diskId = diskId; + } + + @Override + protected Disk doPopulate(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity) { + return model; + } + + @Override + public Disk get() { + Disks disks = parent.list(); + for (Disk disk : disks.getDisks()) { + if (disk.getId().equals(diskId)) { + return disk; + } + } + return notFound(); + } + + @Override + public CreationResource getCreationSubresource(String ids) { + return inject(new BackendCreationResource(ids)); + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java new file mode 100644 index 0000000..114d647 --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainTemplateDisksResource.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.api.restapi.resource; + +import java.util.Map.Entry; +import org.ovirt.engine.api.model.Disk; +import org.ovirt.engine.api.model.Disks; +import org.ovirt.engine.api.resource.ReadOnlyDeviceResource; +import org.ovirt.engine.api.resource.ReadOnlyDevicesResource; +import org.ovirt.engine.core.common.businessentities.VmTemplate; +import org.ovirt.engine.core.compat.Guid; + +public class BackendExportDomainTemplateDisksResource + extends AbstractBackendResource<Disk, org.ovirt.engine.core.common.businessentities.Disk> + implements ReadOnlyDevicesResource<Disk, org.ovirt.engine.api.model.Disks> { + + private final BackendStorageDomainTemplateResource parent; + + public BackendExportDomainTemplateDisksResource( + BackendStorageDomainTemplateResource parent, + Guid vmId) { + super(Disk.class, org.ovirt.engine.core.common.businessentities.Disk.class); + this.parent = parent; + } + + @Override + public Disks list() { + VmTemplate template = parent.getEntity(); + Disks disks = new Disks(); + for (Entry<Guid, org.ovirt.engine.core.common.businessentities.DiskImage> diskImage : template.getDiskImageMap().entrySet()) { + disks.getDisks().add(addLinks(map((org.ovirt.engine.core.common.businessentities.Disk) diskImage.getValue()))); + } + return disks; + } + + @Override + public ReadOnlyDeviceResource<Disk> getDeviceSubResource(String id) { + return inject(new BackendExportDomainTemplateDiskResource(this, id)); + } + + @Override + protected Disk doPopulate(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity) { + return model; + } + +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java new file mode 100644 index 0000000..8879a8c --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDiskResource.java @@ -0,0 +1,43 @@ +package org.ovirt.engine.api.restapi.resource; + +import org.ovirt.engine.api.model.Disk; +import org.ovirt.engine.api.model.Disks; +import org.ovirt.engine.api.resource.CreationResource; +import org.ovirt.engine.api.resource.ReadOnlyDeviceResource; + +public class BackendExportDomainVmDiskResource + extends AbstractBackendResource<Disk, org.ovirt.engine.core.common.businessentities.Disk> + implements ReadOnlyDeviceResource<Disk> { + + private final BackendExportDomainVmDisksResource parent; + private final String diskId; + + public BackendExportDomainVmDiskResource( + BackendExportDomainVmDisksResource parent, + String diskId) { + super(Disk.class, org.ovirt.engine.core.common.businessentities.Disk.class); + this.parent = parent; + this.diskId = diskId; + } + + @Override + protected Disk doPopulate(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity) { + return model; + } + + @Override + public Disk get() { + Disks disks = parent.list(); + for (Disk disk : disks.getDisks()) { + if (disk.getId().equals(diskId)) { + return disk; + } + } + return notFound(); + } + + @Override + public CreationResource getCreationSubresource(String ids) { + return inject(new BackendCreationResource(ids)); + } +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java new file mode 100644 index 0000000..8a28e2f --- /dev/null +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendExportDomainVmDisksResource.java @@ -0,0 +1,44 @@ +package org.ovirt.engine.api.restapi.resource; + +import java.util.Map.Entry; +import org.ovirt.engine.api.model.Disk; +import org.ovirt.engine.api.model.Disks; +import org.ovirt.engine.api.resource.ReadOnlyDeviceResource; +import org.ovirt.engine.api.resource.ReadOnlyDevicesResource; +import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.compat.Guid; + +public class BackendExportDomainVmDisksResource + extends AbstractBackendResource<Disk, org.ovirt.engine.core.common.businessentities.Disk> + implements ReadOnlyDevicesResource<Disk, org.ovirt.engine.api.model.Disks> { + + private final BackendStorageDomainVmResource parent; + + public BackendExportDomainVmDisksResource( + BackendStorageDomainVmResource parent, + Guid vmId) { + super(Disk.class, org.ovirt.engine.core.common.businessentities.Disk.class); + this.parent = parent; + } + + @Override + public Disks list() { + VM vm = parent.getEntity(); + Disks disks = new Disks(); + for (Entry<Guid, org.ovirt.engine.core.common.businessentities.Disk> diskImage : vm.getDiskMap().entrySet()) { + disks.getDisks().add(map((org.ovirt.engine.core.common.businessentities.Disk) diskImage.getValue())); + } + return disks; + } + + @Override + public ReadOnlyDeviceResource<Disk> getDeviceSubResource(String id) { + return inject(new BackendExportDomainVmDiskResource(this, id)); + } + + @Override + protected Disk doPopulate(Disk model, org.ovirt.engine.core.common.businessentities.Disk entity) { + return model; + } + +} diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java index 8018087..aa6db2a 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainTemplateResource.java @@ -5,6 +5,7 @@ import org.ovirt.engine.api.model.Template; import org.ovirt.engine.api.model.Templates; import org.ovirt.engine.api.resource.ActionResource; +import org.ovirt.engine.api.resource.ReadOnlyDevicesResource; import org.ovirt.engine.api.resource.StorageDomainContentResource; import org.ovirt.engine.core.common.action.ImportVmTemplateParameters; import org.ovirt.engine.core.common.action.VdcActionType; @@ -18,12 +19,18 @@ implements StorageDomainContentResource<Template> { public BackendStorageDomainTemplateResource(BackendStorageDomainTemplatesResource parent, String templateId) { - super(templateId, parent, Template.class, VmTemplate.class); + super(templateId, parent, Template.class, VmTemplate.class, "disks"); } @Override protected Template getFromDataDomain() { return performGet(VdcQueryType.GetVmTemplate, new GetVmTemplateParameters(guid)); + } + + @Override + protected Template getFromExportDomain() { + org.ovirt.engine.core.common.businessentities.VmTemplate entity = getEntity(); + return addLinks(populate(map(entity, null), entity), null, new String[0]); } @Override @@ -74,4 +81,9 @@ protected Template doPopulate(Template model, VmTemplate entity) { return model; } + + @Override + public ReadOnlyDevicesResource getDisksResource() { + return inject(new BackendExportDomainTemplateDisksResource(this,guid)); + } } diff --git a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java index a957d4d..ec575de 100644 --- a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java +++ b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendStorageDomainVmResource.java @@ -18,12 +18,18 @@ implements StorageDomainContentResource<VM> { public BackendStorageDomainVmResource(BackendStorageDomainVmsResource parent, String vmId) { - super(vmId, parent, VM.class, org.ovirt.engine.core.common.businessentities.VM.class); + super(vmId, parent, VM.class, org.ovirt.engine.core.common.businessentities.VM.class, "disks"); } @Override protected VM getFromDataDomain() { return performGet(VdcQueryType.GetVmByVmId, new GetVmByVmIdParameters(guid)); + } + + @Override + protected VM getFromExportDomain() { + org.ovirt.engine.core.common.businessentities.VM entity = getEntity(); + return addLinks(populate(map(entity, null), entity), null, new String[0]); } @Override @@ -61,6 +67,11 @@ } @Override + public BackendExportDomainVmDisksResource getDisksResource() { + return inject(new BackendExportDomainVmDisksResource(this,guid)); + } + + @Override protected VM addParents(VM vm) { vm.setStorageDomain(parent.getStorageDomainModel()); return vm; -- To view, visit http://gerrit.ovirt.org/11126 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I83fd4b046f72f73bb516615137522ac40028a7f0 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Ravi Nori <rn...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches