Maor Lipchuk has uploaded a new change for review. Change subject: webadmin: support make template with Cinder disks ......................................................................
webadmin: support make template with Cinder disks make template dialog - include Cinder disks to support template creation. Change-Id: Id6000886d07a1a62150065d3305e537a32f27106 Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Maor Lipchuk <mlipc...@redhat.com> --- M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java 3 files changed, 62 insertions(+), 19 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/99/39799/1 diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java index c72a2e2..77f1e52 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/Linq.java @@ -1619,4 +1619,14 @@ } }); } + + public final static Collection<StorageDomain> filterStorageDomainById( + Collection<StorageDomain> source, final Guid id) { + return where(source, new IPredicate<StorageDomain>() { + @Override + public boolean match(StorageDomain source) { + return source.getId().equals(id); + } + }); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java index e5f2b2c..48af3bd 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java @@ -2,6 +2,7 @@ import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.List; @@ -15,9 +16,11 @@ import org.ovirt.engine.core.common.businessentities.VmBase; import org.ovirt.engine.core.common.businessentities.VmTemplate; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.Disk; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; +import org.ovirt.engine.core.common.businessentities.storage.StorageType; import org.ovirt.engine.core.common.businessentities.storage.VolumeType; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.ui.frontend.AsyncQuery; @@ -214,8 +217,11 @@ ArrayList<Disk> vmDisks = (ArrayList<Disk>) returnValue; for (Disk disk : vmDisks) { - if (disk.getDiskStorageType() == DiskStorageType.IMAGE && !disk.isShareable() - && !disk.isDiskSnapshot()) { + if (disk.isShareable() || disk.isDiskSnapshot()) { + continue; + } + if (disk.getDiskStorageType() == DiskStorageType.IMAGE || + disk.getDiskStorageType() == DiskStorageType.CINDER) { imageDisks.add(disk); } } @@ -237,23 +243,27 @@ Collections.sort(disks, new Linq.DiskByAliasComparer()); ArrayList<DiskModel> list = new ArrayList<DiskModel>(); - for (Disk disk : disks) - { + for (Disk disk : disks) { DiskModel diskModel = new DiskModel(); - - if (disk.getDiskStorageType() == DiskStorageType.IMAGE) { - DiskImage diskImage = (DiskImage) disk; - EntityModel<Integer> size = new EntityModel<Integer>(); - size.setEntity((int) diskImage.getSizeInGigabytes()); - diskModel.setSize(size); - ListModel volumes = new ListModel(); - volumes.setItems((diskImage.getVolumeType() == VolumeType.Preallocated ? new ArrayList<VolumeType>(Arrays.asList(new VolumeType[] {VolumeType.Preallocated})) - : AsyncDataProvider.getInstance().getVolumeTypeList())); - volumes.setSelectedItem(diskImage.getVolumeType()); - diskModel.setVolumeType(volumes); - diskModel.getAlias().setEntity(diskImage.getDiskAlias()); + switch (disk.getDiskStorageType()) { + case IMAGE: + DiskImage diskImage = (DiskImage) disk; + diskModel.setSize(new EntityModel<>((int) diskImage.getSizeInGigabytes())); + ListModel volumes = new ListModel(); + volumes.setItems((diskImage.getVolumeType() == VolumeType.Preallocated ? new ArrayList<>(Arrays.asList(new VolumeType[]{VolumeType.Preallocated})) + : AsyncDataProvider.getInstance().getVolumeTypeList()), diskImage.getVolumeType()); + diskModel.setVolumeType(volumes); + diskModel.getAlias().setEntity(diskImage.getDiskAlias()); + break; + case CINDER: + CinderDisk cinderDisk = (CinderDisk) disk; + diskModel.setSize(new EntityModel<>((int) cinderDisk.getSizeInGigabytes())); + ListModel volumeTypes = new ListModel(); + volumeTypes.setItems(new ArrayList<>(Arrays.asList(cinderDisk.getVolumeType())), cinderDisk.getVolumeType()); + diskModel.setVolumeType(volumeTypes); + diskModel.getAlias().setEntity(cinderDisk.getDiskAlias()); + break; } - diskModel.setDisk(disk); list.add(diskModel); } @@ -337,10 +347,11 @@ @Override public void onSuccess(Object target, Object returnValue) { NewTemplateVmModelBehavior behavior = NewTemplateVmModelBehavior.this; + ArrayList<StorageDomain> storageDomains = (ArrayList<StorageDomain>) returnValue; ArrayList<StorageDomain> activeStorageDomainList = new ArrayList<StorageDomain>(); - for (StorageDomain storageDomain : (ArrayList<StorageDomain>) returnValue) + for (StorageDomain storageDomain : storageDomains) { if (storageDomain.getStatus() == StorageDomainStatus.Active && storageDomain.getStorageDomainType().isDataDomain()) @@ -401,9 +412,16 @@ Collections.sort(activeStorageDomainList, new NameableComparator()); if (disks != null) { - for (DiskModel diskModel : disks) { + ArrayList<DiskModel> diskImages = Linq.filterDisksByType(disks, DiskStorageType.IMAGE); + for (DiskModel diskModel : diskImages) { diskModel.getStorageDomain().setItems(activeStorageDomainList); diskModel.getQuota().setItems(behavior.getModel().getQuota().getItems()); + } + ArrayList<DiskModel> cinderDisks = Linq.filterDisksByType(disks, DiskStorageType.CINDER); + if (!cinderDisks.isEmpty()) { + Collection<StorageDomain> cinderStorageDomains = + Linq.filterStorageDomainsByStorageType(storageDomains, StorageType.CINDER); + initStorageDomainsForCinderDisks(cinderDisks, cinderStorageDomains); } } } @@ -412,6 +430,18 @@ ActionGroup.CREATE_TEMPLATE); } + private void initStorageDomainsForCinderDisks(ArrayList<DiskModel> cinderDisks, Collection<StorageDomain> cinderStorageDomains) { + for (DiskModel diskModel : cinderDisks) { + CinderDisk cinderDisk = (CinderDisk) diskModel.getDisk(); + diskModel.getStorageDomain().setItems(Linq.filterStorageDomainById( + cinderStorageDomains, cinderDisk.getStorageIds().get(0))); + + diskModel.getDiskProfile().setIsChangable(false); + diskModel.getDiskProfile().setChangeProhibitionReason( + ConstantsManager.getInstance().getConstants().notSupportedForCinderDisks()); + } + } + private void disableNewTemplateModel(String errMessage) { getModel().setIsValid(false); diff --git a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java index 0447ce7..cff1e79 100644 --- a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java +++ b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java @@ -2697,4 +2697,7 @@ @DefaultStringValue("Warning : Recommendations for geo-replication not met -") String geoReplicationRecommendedConfigViolation(); + + @DefaultStringValue("Not supported for Cinder disks") + String notSupportedForCinderDisks(); } -- To view, visit https://gerrit.ovirt.org/39799 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Id6000886d07a1a62150065d3305e537a32f27106 Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <mlipc...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches