Maor Lipchuk has uploaded a new change for review. Change subject: webadmin: support attaching Cinder disks ......................................................................
webadmin: support attaching Cinder disks Add Cinder to attach disk dialog. Change-Id: Ic734dca2ee0e00185666e7e35327980873134170 Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Maor Lipchuk <mlipc...@redhat.com> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java 3 files changed, 139 insertions(+), 9 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/26/39226/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java index b3c4476..a1bd822 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskAttachPopupWidget.java @@ -1,5 +1,6 @@ package org.ovirt.engine.ui.common.widget.uicommon.popup.vm; +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.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskInterface; @@ -82,6 +83,10 @@ @WithElementId EntityModelCellTable<ListModel> lunDiskTable; + @Ignore + @WithElementId + EntityModelCellTable<ListModel> cinderDiskTable; + @UiField Label message; @@ -100,8 +105,9 @@ localize(); ViewIdHandler.idHandler.generateAndSetIds(this); initAttachPanelWidget(); - initInternalDiskTable(); - initExternalDiskTable(); + initDiskImagesTable(); + initLunDisksTable(); + initCinderDisksTable(); driver.initialize(this); } @@ -113,6 +119,7 @@ isPluggedEditor = new EntityModelCheckBoxEditor(Align.RIGHT); imageDiskTable = new EntityModelCellTable<>(allowMultipleSelection); lunDiskTable = new EntityModelCellTable<>(allowMultipleSelection); + cinderDiskTable = new EntityModelCellTable<>(allowMultipleSelection); } private void initAttachPanelWidget() { @@ -120,12 +127,13 @@ VerticalPanel verticalPanel = new VerticalPanel(); verticalPanel.add(imageDiskTable); verticalPanel.add(lunDiskTable); + verticalPanel.add(cinderDiskTable); // Create ValidatedPanelWidget and add tables container attachDiskPanel.setWidget(verticalPanel); } - private void initInternalDiskTable() { + private void initDiskImagesTable() { imageDiskTable.enableColumnResizing(); AbstractTextColumn<EntityModel> aliasColumn = new AbstractTextColumn<EntityModel>() { @@ -235,7 +243,7 @@ imageDiskTable.setHeight("100%"); //$NON-NLS-1$ } - private void initExternalDiskTable() { + private void initLunDisksTable() { lunDiskTable.enableColumnResizing(); AbstractTextColumn<EntityModel> aliasColumn = new AbstractTextColumn<EntityModel>() { @@ -372,6 +380,98 @@ lunDiskTable.setHeight("100%"); //$NON-NLS-1$ } + private void initCinderDisksTable() { + cinderDiskTable.enableColumnResizing(); + + AbstractTextColumn<EntityModel> aliasColumn = new AbstractTextColumn<EntityModel>() { + @Override + public String getValue(EntityModel object) { + CinderDisk disk = (CinderDisk) (((DiskModel) (object.getEntity())).getDisk()); + return disk.getDiskAlias(); + } + }; + cinderDiskTable.addColumn(aliasColumn, constants.aliasVmDiskTable(), "100px"); //$NON-NLS-1$ + + AbstractTextColumn<EntityModel> descriptionColumn = new AbstractTextColumn<EntityModel>() { + @Override + public String getValue(EntityModel object) { + CinderDisk disk = (CinderDisk) (((DiskModel) (object.getEntity())).getDisk()); + return disk.getDiskDescription(); + } + }; + cinderDiskTable.addColumn(descriptionColumn, constants.descriptionVmDiskTable(), "100px"); //$NON-NLS-1$ + + AbstractDiskSizeColumn<EntityModel> sizeColumn = new AbstractDiskSizeColumn<EntityModel>(SizeConverter.SizeUnit.GB) { + @Override + protected Long getRawValue(EntityModel object) { + CinderDisk disk = (CinderDisk) (((DiskModel) (object.getEntity())).getDisk()); + return (long) disk.getSizeInGigabytes(); + } + }; + cinderDiskTable.addColumn(sizeColumn, constants.provisionedSizeVmDiskTable(), "100px"); //$NON-NLS-1$ + + AbstractTextColumn<EntityModel> interfaceColumn = new AbstractEnumColumn<EntityModel, DiskInterface>() { + @Override + protected DiskInterface getRawValue(EntityModel object) { + Disk disk = (((DiskModel) (object.getEntity())).getDisk()); + return disk.getDiskInterface(); + } + }; + cinderDiskTable.addColumn(interfaceColumn, constants.interfaceVmDiskPopup(), "90px"); //$NON-NLS-1$ + + AbstractTextColumn<EntityModel> cinderVolumeTypeColumn = new AbstractTextColumn<EntityModel>() { + @Override + public String getValue(EntityModel object) { + Disk disk = (((DiskModel) (object.getEntity())).getDisk()); + return disk.getCinderVolumeType(); + } + }; + cinderDiskTable.addColumn(cinderVolumeTypeColumn, constants.cinderVolumeTypeDisk(), "90px"); //$NON-NLS-1$ + + cinderDiskTable.addColumn(DisksViewColumns.readOnlyCheckboxColumn, + new ImageResourceHeader(resources.readOnlyDiskIcon(), SafeHtmlUtils.fromTrustedString(constants.readOnly())), + "30px"); //$NON-NLS-1$ + + cinderDiskTable.addColumn(new AbstractImageResourceColumn<EntityModel>() { + @Override + public ImageResource getValue(EntityModel object) { + Disk disk = (((DiskModel) (object.getEntity())).getDisk()); + return disk.isBoot() ? resources.bootableDiskIcon() : null; + } + + @Override + public SafeHtml getTooltip(EntityModel object) { + Disk disk = (((DiskModel) (object.getEntity())).getDisk()); + if (disk.isBoot()) { + return SafeHtmlUtils.fromSafeConstant(constants.bootableDisk()); + } + return null; + } + }, new ImageResourceHeader(resources.bootableDiskIcon(), SafeHtmlUtils.fromTrustedString(constants.bootable())), + "30px"); //$NON-NLS-1$ + + cinderDiskTable.addColumn(new AbstractImageResourceColumn<EntityModel>() { + @Override + public ImageResource getValue(EntityModel object) { + Disk disk = (((DiskModel) (object.getEntity())).getDisk()); + return disk.isShareable() ? resources.shareableDiskIcon() : null; + } + + @Override + public SafeHtml getTooltip(EntityModel object) { + Disk disk = (((DiskModel) (object.getEntity())).getDisk()); + if (disk.isShareable()) { + return SafeHtmlUtils.fromSafeConstant(constants.shareable()); + } + return null; + } + }, new ImageResourceHeader(resources.shareableDiskIcon(), SafeHtmlUtils.fromTrustedString(constants.shareable())), + "30px"); //$NON-NLS-1$ + + cinderDiskTable.setWidth("100%", true); //$NON-NLS-1$ + cinderDiskTable.setHeight("100%"); //$NON-NLS-1$ + } + @Override public void edit(final AttachDiskModel disk) { driver.edit(disk); @@ -405,6 +505,18 @@ } }); + diskTypePanel.addRadioButton( + constants.cinderDisk(), + !disk.getIsNew() && disk.getDisk().getDiskStorageType() == DiskStorageType.CINDER, + disk.getIsNew(), + new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + disk.getDiskStorageType().setEntity(DiskStorageType.CINDER); + revealDiskPanel(disk); + } + }); + // Add event handlers disk.getPropertyChangedEvent().addListener(new IEventListener<PropertyChangedEventArgs>() { @Override @@ -427,12 +539,17 @@ diskTypePanel.setVisible(isNewLunDiskEnabled); imageDiskTable.setVisible(false); lunDiskTable.setVisible(false); + cinderDiskTable.setVisible(false); EntityModelCellTable<ListModel> diskTable; switch (disk.getDiskStorageType().getEntity()) { case LUN: diskTable = lunDiskTable; break; + case CINDER: + diskTable = cinderDiskTable; + break; + case IMAGE: default: diskTable = imageDiskTable; break; diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java index 1c9a34e..3a193ef 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AttachDiskModel.java @@ -32,6 +32,7 @@ attachableDisksMap = new HashMap<DiskStorageType, ListModel<EntityModel<DiskModel>>>(); attachableDisksMap.put(DiskStorageType.IMAGE, new ListModel<EntityModel<DiskModel>>()); attachableDisksMap.put(DiskStorageType.LUN, new ListModel<EntityModel<DiskModel>>()); + attachableDisksMap.put(DiskStorageType.CINDER, new ListModel<EntityModel<DiskModel>>()); } public Map<DiskStorageType, ListModel<EntityModel<DiskModel>>> getAttachableDisksMap() { @@ -56,10 +57,12 @@ public void loadAttachableDisks() { doLoadAttachableDisks(new GetDisksCallback(DiskStorageType.IMAGE), - new GetDisksCallback(DiskStorageType.LUN)); + new GetDisksCallback(DiskStorageType.LUN), + new GetDisksCallback(DiskStorageType.CINDER)); } - protected void doLoadAttachableDisks(GetDisksCallback imageCallback, GetDisksCallback lunCallback) { + protected void doLoadAttachableDisks(GetDisksCallback imageCallback, GetDisksCallback lunCallback, + GetDisksCallback cinderCallback) { AsyncDataProvider.getInstance().getAllAttachableDisks( new AsyncQuery(this, imageCallback ), getVm().getStoragePoolId(), getVm().getId()); @@ -67,6 +70,10 @@ AsyncDataProvider.getInstance().getAllAttachableDisks( new AsyncQuery(this, lunCallback ), null, getVm().getId()); + + AsyncDataProvider.getInstance().getAllAttachableDisks( + new AsyncQuery(this, cinderCallback + ), null, getVm().getId()); } class GetDisksCallback implements INewAsyncCallback { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java index 581b27a..343fb33 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/InstanceImagesAttachDiskModel.java @@ -13,20 +13,26 @@ public class InstanceImagesAttachDiskModel extends AttachDiskModel { public void loadAttachableDisks(int os, Version compatibilityVersion, final Disk prevSelectedDisk) { - // Get internal attachable disks + // Get image attachable disks AsyncDataProvider.getInstance().getFilteredAttachableDisks( new AsyncQuery(this, new InstanceImageGetDisksCallback(DiskStorageType.IMAGE, prevSelectedDisk) ), getVm().getStoragePoolId(), getVm().getId(), os, compatibilityVersion); - // Get external attachable disks + // Get lun attachable disks AsyncDataProvider.getInstance().getFilteredAttachableDisks( new AsyncQuery(this, new InstanceImageGetDisksCallback(DiskStorageType.LUN, prevSelectedDisk) + ), null, getVm().getId(), os, compatibilityVersion); + + // Get cinder attachable disks + AsyncDataProvider.getInstance().getFilteredAttachableDisks( + new AsyncQuery(this, new InstanceImageGetDisksCallback(DiskStorageType.CINDER, prevSelectedDisk) ), null, getVm().getId(), os, compatibilityVersion); } public void loadAttachableDisks(Disk prevSelected) { doLoadAttachableDisks(new InstanceImageGetDisksCallback(DiskStorageType.IMAGE, prevSelected), - new InstanceImageGetDisksCallback(DiskStorageType.LUN, prevSelected)); + new InstanceImageGetDisksCallback(DiskStorageType.LUN, prevSelected), + new InstanceImageGetDisksCallback(DiskStorageType.CINDER, prevSelected)); } class InstanceImageGetDisksCallback extends GetDisksCallback { -- To view, visit https://gerrit.ovirt.org/39226 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic734dca2ee0e00185666e7e35327980873134170 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