Maor Lipchuk has uploaded a new change for review. Change subject: webadmin: add disk dialog - support Cinder ......................................................................
webadmin: add disk dialog - support Cinder Support Cinder in add/edit disk dialog. Change-Id: I858c3a5a9426fa5571955b9d1e6ed9b41be891ac Bug-Url: https://bugzilla.redhat.com/1185826 Signed-off-by: Maor Lipchuk <[email protected]> --- M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java M frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml 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/dataprovider/AsyncDataProvider.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java M frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java M frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java 10 files changed, 236 insertions(+), 60 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/46/39046/1 diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java index f0c9b8d..565e1c2 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/CommonApplicationConstants.java @@ -1323,6 +1323,9 @@ @DefaultStringValue("External (Direct LUN)") String externalDisk(); + @DefaultStringValue("Cinder") + String cinderDisk(); + @DefaultStringValue("LUNs > Targets") String storageIscsiPopupLunToTargetsTabLabel(); diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java index 1d0cddc..08664dc 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/AbstractModelBoundPopupWidget.java @@ -26,13 +26,21 @@ return nextTabIndex; } - public void disableWidget(Widget widget) { + private void setEnabled(Widget widget, boolean enable) { if (widget instanceof IndexedPanel) { for (int i = 0; i < ((IndexedPanel) widget).getWidgetCount(); i++) { - disableWidget(((IndexedPanel) widget).getWidget(i)); + setEnabled(((IndexedPanel) widget).getWidget(i), enable); } } else if (widget instanceof HasEnabled) { - ((HasEnabled) widget).setEnabled(false); + ((HasEnabled) widget).setEnabled(enable); } } + + public void enableWidget(Widget widget) { + setEnabled(widget, true); + } + + public void disableWidget(Widget widget) { + setEnabled(widget, false); + } } diff --git a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java index b64c41b..ee22491 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java +++ b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/popup/vm/VmDiskPopupWidget.java @@ -299,7 +299,13 @@ if ("Message".equals(propName)) { //$NON-NLS-1$ if (!StringHelper.isNullOrEmpty(disk.getMessage())) { disableWidget(getWidget()); + enableWidget(diskTypePanel); disk.getDefaultCommand().setIsExecutionAllowed(false); + disk.setIsChangable(false); + } else { + enableWidget(getWidget()); + disk.getDefaultCommand().setIsExecutionAllowed(true); + disk.setIsChangable(true); } } } @@ -330,6 +336,18 @@ } }); + diskTypePanel.addRadioButton( + constants.cinderDisk(), + disk.getDisk() != null && disk.getDisk().getDiskStorageType() == DiskStorageType.CINDER, + disk.getIsNew(), + new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + disk.getDiskStorageType().setEntity(DiskStorageType.CINDER); + revealDiskPanel(disk); + } + }); + if (disk.getStorageModel() == null) { storageModel = new StorageModel(new NewEditStorageModelBehavior()); diff --git a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml index 24204c4..9cfca44 100644 --- a/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml +++ b/frontend/webadmin/modules/gwt-common/src/main/resources/org/ovirt/engine/core/Common.gwt.xml @@ -236,6 +236,7 @@ <include name="common/businessentities/storage/StorageType.java" /> <include name="common/businessentities/storage/VolumeFormat.java" /> <include name="common/businessentities/storage/VolumeType.java" /> + <include name="common/businessentities/storage/CinderDisk.java" /> <!-- Misc --> <include name="common/AuditLogType.java" /> 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 3e8da18..c72a2e2 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 @@ -50,6 +50,7 @@ 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.common.scheduling.ClusterPolicy; import org.ovirt.engine.core.common.scheduling.PolicyUnit; @@ -1588,4 +1589,34 @@ return lexoNumeric.compare(entity1.getName(), entity2.getName()); } } + + public final static Collection<StorageDomain> filterStorageDomainsByStorageType( + Collection<StorageDomain> source, final StorageType storageType) { + return where(source, new IPredicate<StorageDomain>() { + @Override + public boolean match(StorageDomain source) { + return source.getStorageType() == storageType; + } + }); + } + + public final static Collection<StorageDomain> filterStorageDomainsByStorageDomainType( + Collection<StorageDomain> source, final StorageDomainType storageDomainType) { + return where(source, new IPredicate<StorageDomain>() { + @Override + public boolean match(StorageDomain source) { + return source.getStorageDomainType() == storageDomainType; + } + }); + } + + public final static Collection<StorageDomain> filterStorageDomainsByStorageStatus( + Collection<StorageDomain> source, final StorageDomainStatus storageDomainStatus) { + return where(source, new IPredicate<StorageDomain>() { + @Override + public boolean match(StorageDomain source) { + return source.getStatus() == storageDomainStatus; + } + }); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java index a30bfe6..03d6ff4 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/dataprovider/AsyncDataProvider.java @@ -79,6 +79,7 @@ import org.ovirt.engine.core.common.businessentities.network.VmNetworkInterface; import org.ovirt.engine.core.common.businessentities.network.VnicProfileView; import org.ovirt.engine.core.common.businessentities.qos.QosType; +import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType; 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; @@ -4048,4 +4049,14 @@ Frontend.getInstance().runQuery(VdcQueryType.GetUnusedGlusterBricks, parameters, asyncQuery); } + public void getCinderVolumeTypesList(AsyncQuery aQuery, Guid storageDomainId) { + aQuery.converterCallback = new IAsyncConverter<List<CinderVolumeType>>() { + @Override + public List<CinderVolumeType> Convert(Object source, AsyncQuery _asyncQuery) { + return (List<CinderVolumeType>) source; + } + }; + Frontend.getInstance().runQuery(VdcQueryType.GetCinderVolumeTypesByStorageDomainId, new IdQueryParameters(storageDomainId), aQuery); + } + } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java index 4935bab..3ea621d 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java @@ -9,6 +9,7 @@ import org.ovirt.engine.core.common.businessentities.QuotaEnforcementTypeEnum; import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StorageDomainStatus; +import org.ovirt.engine.core.common.businessentities.StorageDomainType; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VDS; import org.ovirt.engine.core.common.businessentities.VDSStatus; @@ -16,6 +17,8 @@ import org.ovirt.engine.core.common.businessentities.VMStatus; import org.ovirt.engine.core.common.businessentities.comparators.NameableComparator; import org.ovirt.engine.core.common.businessentities.profiles.DiskProfile; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; +import org.ovirt.engine.core.common.businessentities.storage.CinderVolumeType; 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; @@ -75,6 +78,7 @@ private ListModel<StorageType> storageType; private ListModel<VDS> host; private ListModel<StoragePool> dataCenter; + private ListModel<String> cinderVolumeType; private SanStorageModel sanStorageModel; private VolumeFormat volumeFormat; @@ -172,6 +176,15 @@ public void setDataCenter(ListModel<StoragePool> dataCenter) { this.dataCenter = dataCenter; } + + public ListModel<String> getCinderVolumeType() { + return cinderVolumeType; + } + + public void setCinderVolumeType(ListModel<String> cinderVolumeType) { + this.cinderVolumeType = cinderVolumeType; + } + public SanStorageModel getSanStorageModel() { return sanStorageModel; } @@ -287,6 +300,9 @@ getDiskInterface().getSelectedItemChangedEvent().addListener(this); setIsVirtioScsiEnabled(new EntityModel<Boolean>()); + + setCinderVolumeType(new ListModel<String>()); + getCinderVolumeType().setIsAvailable(false); } public abstract boolean getIsNew(); @@ -301,20 +317,19 @@ protected abstract LunDisk getLunDisk(); + protected abstract CinderDisk getCinderDisk(); + protected abstract void setDefaultInterface(); protected abstract void updateVolumeType(StorageType storageType); protected boolean isEditEnabled() { - return getIsFloating() || getIsNew() || getVm().isDown() || !getDisk().getPlugged(); + return (getIsFloating() || getIsNew() || getVm().isDown() || !getDisk().getPlugged()) && getIsChangable(); } @Override public void initialize() { commonInitialize(); - if (getVm() != null) { - updateBootableDiskAvailable(); - } } public void initialize(List<Disk> currentDisks) { @@ -340,21 +355,35 @@ public void onSuccess(Object target, Object returnValue) { DiskModel diskModel = (DiskModel) target; ArrayList<StorageDomain> storageDomains = (ArrayList<StorageDomain>) returnValue; - - ArrayList<StorageDomain> filteredStorageDomains = new ArrayList<StorageDomain>(); - for (StorageDomain a : storageDomains) { - if (!a.getStorageDomainType().isIsoOrImportExportDomain() && a.getStatus() == StorageDomainStatus.Active) { - filteredStorageDomains.add(a); - } + ArrayList<StorageDomain> filteredStorageDomains = new ArrayList<>(); + switch (getDiskStorageType().getEntity()) { + case IMAGE: + filteredStorageDomains.addAll(Linq.filterStorageDomainsByStorageDomainType( + storageDomains, StorageDomainType.Master)); + filteredStorageDomains.addAll(Linq.filterStorageDomainsByStorageDomainType( + storageDomains, StorageDomainType.Data)); + break; + case CINDER: + filteredStorageDomains.addAll(Linq.filterStorageDomainsByStorageType( + storageDomains, StorageType.CINDER)); + break; } + filteredStorageDomains = (ArrayList<StorageDomain>) Linq.filterStorageDomainsByStorageStatus( + filteredStorageDomains, StorageDomainStatus.Active); Collections.sort(filteredStorageDomains, new NameableComparator()); StorageDomain storage = Linq.firstOrDefault(filteredStorageDomains); - - diskModel.getStorageDomain().setItems(filteredStorageDomains); - diskModel.getStorageDomain().setSelectedItem(storage); - - diskModel.setMessage(storage == null ? constants.noActiveStorageDomainsInDC() : ""); + diskModel.getStorageDomain().setItems(filteredStorageDomains, storage); + if (storage == null) { + switch (getDiskStorageType().getEntity()) { + case IMAGE: + diskModel.setMessage(constants.noActiveStorageDomainsInDC()); + break; + case CINDER: + diskModel.setMessage(constants.noCinderStorageDomainsInDC()); + break; + } + } } }), datacenter.getId(), ActionGroup.CREATE_DISK); } @@ -402,6 +431,7 @@ } } })), getVm().getStoragePoolId()); + updateBootableDiskAvailable(); } else { AsyncDataProvider.getInstance().getDataCenterList(new AsyncQuery(this, new INewAsyncCallback() { @@ -527,6 +557,27 @@ setDefaultInterface(); } + protected void updateCinderVolumeTypes() { + StorageDomain storageDomain = getStorageDomain().getSelectedItem(); + if (storageDomain == null || storageDomain.getStorageType() != StorageType.CINDER) { + return; + } + + AsyncDataProvider.getInstance().getCinderVolumeTypesList(new AsyncQuery(this, new INewAsyncCallback() { + @Override + public void onSuccess(Object target, Object returnValue) { + AbstractDiskModel diskModel = (AbstractDiskModel) target; + List<CinderVolumeType> cinderVolumeTypes = (ArrayList<CinderVolumeType>) returnValue; + List<String> volumeTypesNames = new ArrayList<>(); + for (CinderVolumeType cinderVolumeType : cinderVolumeTypes) { + volumeTypesNames.add(cinderVolumeType.getName()); + } + volumeTypesNames.add(constants.noCinderVolumeType()); + diskModel.getCinderVolumeType().setItems(volumeTypesNames); + } + }), storageDomain.getId()); + } + private void updateDiskProfiles(StoragePool selectedItem) { StorageDomain storageDomain = getStorageDomain().getSelectedItem(); if (storageDomain == null) { @@ -626,16 +677,18 @@ boolean isInVm = getVm() != null; boolean isDiskImage = getDiskStorageType().getEntity() == DiskStorageType.IMAGE; boolean isLunDisk = getDiskStorageType().getEntity() == DiskStorageType.LUN; + boolean isCinderDisk = getDiskStorageType().getEntity() == DiskStorageType.CINDER; - getSize().setIsAvailable(isDiskImage); - getSizeExtend().setIsAvailable(isDiskImage && !getIsNew()); - getStorageDomain().setIsAvailable(isDiskImage); + getSize().setIsAvailable(isDiskImage || isCinderDisk); + getSizeExtend().setIsAvailable((isDiskImage || isCinderDisk) && !getIsNew()); + getStorageDomain().setIsAvailable(isDiskImage || isCinderDisk); getVolumeType().setIsAvailable(isDiskImage); getIsWipeAfterDelete().setIsAvailable(isDiskImage); getHost().setIsAvailable(isLunDisk); getStorageType().setIsAvailable(isLunDisk); getDataCenter().setIsAvailable(!isInVm); getDiskProfile().setIsAvailable(isDiskImage); + getCinderVolumeType().setIsAvailable(isCinderDisk); if (!isDiskImage) { previousIsQuotaAvailable = getQuota().getIsAvailable(); @@ -643,6 +696,7 @@ getQuota().setIsAvailable(isDiskImage ? previousIsQuotaAvailable : false); + setIsChangable(true); updateDatacenters(); } @@ -748,6 +802,13 @@ } } + private void updateDiskSize(DiskImage diskImage) { + long sizeToAddInGigabytes = Long.valueOf(getSizeExtend().getEntity()); + if (sizeToAddInGigabytes > 0) { + diskImage.setSizeInGigabytes(diskImage.getSizeInGigabytes() + sizeToAddInGigabytes); + } + } + private boolean canDiskBePlugged(VM vm) { return vm.getStatus() == VMStatus.Up || vm.getStatus() == VMStatus.Down || vm.getStatus() == VMStatus.Paused; } @@ -768,11 +829,14 @@ updateDirectLunDiskEnabled(datacenter); updateInterface(isInVm ? getVm().getVdsGroupCompatibilityVersion() : null); - if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) { - updateStorageDomains(datacenter); - } - else { - updateHosts(datacenter); + switch (getDiskStorageType().getEntity()) { + case IMAGE: + case CINDER: + updateStorageDomains(datacenter); + break; + default: + updateHosts(datacenter); + break; } } @@ -786,6 +850,7 @@ } updateQuota(getDataCenter().getSelectedItem()); updateDiskProfiles(getDataCenter().getSelectedItem()); + updateCinderVolumeTypes(); } public boolean validate() { @@ -802,6 +867,8 @@ if (dataCenter != null && dataCenter.getQuotaEnforcementType() == QuotaEnforcementTypeEnum.HARD_ENFORCEMENT) { getQuota().validateSelectedItem(new IValidation[] { new NotEmptyQuotaValidation() }); } + + getCinderVolumeType().validateSelectedItem(new IValidation[]{new NotEmptyValidation()}); return getAlias().getIsValid() && getDescription().getIsValid() && getQuota().getIsValid() && getDiskInterface().getIsValid(); @@ -857,28 +924,30 @@ } public void flush() { - if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) { - DiskImage diskImage = getDiskImage(); - if (getQuota().getIsAvailable() && getQuota().getSelectedItem() != null) { - diskImage.setQuotaId(getQuota().getSelectedItem().getId()); - } - - long sizeToAddInGigabytes = Long.valueOf(getSizeExtend().getEntity()); - if (sizeToAddInGigabytes > 0) { - diskImage.setSizeInGigabytes(diskImage.getSizeInGigabytes() + sizeToAddInGigabytes); - } - - setDisk(diskImage); - } - else { - LunDisk lunDisk = getLunDisk(); - DiskInterface diskInterface = getDiskInterface().getSelectedItem(); - if (DiskInterface.VirtIO_SCSI.equals(diskInterface)) { - lunDisk.setSgio(!getIsScsiPassthrough().getEntity() ? null : - getIsSgIoUnfiltered().getEntity() ? - ScsiGenericIO.UNFILTERED : ScsiGenericIO.FILTERED); - } - setDisk(lunDisk); + switch (getDiskStorageType().getEntity()) { + case LUN: + LunDisk lunDisk = getLunDisk(); + DiskInterface diskInterface = getDiskInterface().getSelectedItem(); + if (DiskInterface.VirtIO_SCSI.equals(diskInterface)) { + lunDisk.setSgio(!getIsScsiPassthrough().getEntity() ? null : + getIsSgIoUnfiltered().getEntity() ? + ScsiGenericIO.UNFILTERED : ScsiGenericIO.FILTERED); + } + setDisk(lunDisk); + break; + case CINDER: + CinderDisk cinderDisk = getCinderDisk(); + updateDiskSize(cinderDisk); + setDisk(cinderDisk); + break; + case IMAGE: + DiskImage diskImage = getDiskImage(); + if (getQuota().getIsAvailable() && getQuota().getSelectedItem() != null) { + diskImage.setQuotaId(getQuota().getSelectedItem().getId()); + } + updateDiskSize(diskImage); + setDisk(diskImage); + break; } if (getDisk().getDiskStorageType() == DiskStorageType.IMAGE) { diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java index f7d7247..c104132 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/EditDiskModel.java @@ -6,6 +6,7 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.VM; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.LunDisk; @@ -107,6 +108,11 @@ } @Override + protected CinderDisk getCinderDisk() { + return (CinderDisk) getDisk(); + } + + @Override public void store(IFrontendActionAsyncCallback callback) { if (getProgress() != null || !validate()) { return; @@ -142,6 +148,7 @@ getDataCenter().setIsChangable(false); getVolumeType().setIsChangable(false); getSize().setIsChangable(false); + getCinderVolumeType().setIsChangable(false); if (!isEditEnabled()) { getIsShareable().setIsChangable(false); @@ -160,4 +167,9 @@ protected void updateVolumeType(StorageType storageType) { // do nothing } + + @Override + protected void updateCinderVolumeTypes() { + getCinderVolumeType().setSelectedItem(getDisk().getCinderVolumeType()); + } } diff --git a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java index e33eedb9..fda1543 100644 --- a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java +++ b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewDiskModel.java @@ -7,12 +7,14 @@ import org.ovirt.engine.core.common.businessentities.StorageDomain; import org.ovirt.engine.core.common.businessentities.StoragePool; import org.ovirt.engine.core.common.businessentities.StoragePoolStatus; +import org.ovirt.engine.core.common.businessentities.storage.CinderDisk; import org.ovirt.engine.core.common.businessentities.storage.DiskImage; import org.ovirt.engine.core.common.businessentities.storage.DiskInterface; import org.ovirt.engine.core.common.businessentities.storage.DiskStorageType; import org.ovirt.engine.core.common.businessentities.storage.LUNs; import org.ovirt.engine.core.common.businessentities.storage.LunDisk; import org.ovirt.engine.core.common.businessentities.storage.StorageType; +import org.ovirt.engine.core.common.businessentities.storage.VolumeFormat; import org.ovirt.engine.core.common.businessentities.storage.VolumeType; import org.ovirt.engine.core.common.queries.ConfigurationValues; import org.ovirt.engine.ui.frontend.AsyncQuery; @@ -138,19 +140,33 @@ } @Override + protected CinderDisk getCinderDisk() { + return new CinderDisk(); + } + + @Override public void flush() { super.flush(); - if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) { - DiskImage diskImage = (DiskImage) getDisk(); - diskImage.setSizeInGigabytes(getSize().getEntity()); - diskImage.setVolumeType(getVolumeType().getSelectedItem()); - diskImage.setvolumeFormat(getVolumeFormat()); - } - else { - LunDisk lunDisk = (LunDisk) getDisk(); - LUNs luns = (LUNs) getSanStorageModel().getAddedLuns().get(0).getEntity(); - luns.setLunType(getStorageType().getSelectedItem()); - lunDisk.setLun(luns); + switch (getDiskStorageType().getEntity()) { + case LUN: + LunDisk lunDisk = (LunDisk) getDisk(); + LUNs luns = (LUNs) getSanStorageModel().getAddedLuns().get(0).getEntity(); + luns.setLunType(getStorageType().getSelectedItem()); + lunDisk.setLun(luns); + break; + case CINDER: + CinderDisk cinderDisk = (CinderDisk) getDisk(); + cinderDisk.setSizeInGigabytes(getSize().getEntity()); + cinderDisk.setvolumeFormat(VolumeFormat.RAW); + cinderDisk.setCinderVolumeType(getCinderVolumeType().getSelectedItem().equals( + constants.noCinderVolumeType()) ? "" : getCinderVolumeType().getSelectedItem()); //$NON-NLS-1$ + break; + default: + DiskImage diskImage = (DiskImage) getDisk(); + diskImage.setSizeInGigabytes(getSize().getEntity()); + diskImage.setVolumeType(getVolumeType().getSelectedItem()); + diskImage.setvolumeFormat(getVolumeFormat()); + break; } } @@ -164,7 +180,8 @@ AddDiskParameters parameters = new AddDiskParameters(getVmId(), getDisk()); parameters.setPlugDiskToVm(getIsPlugged().getEntity()); - if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) { + if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE || + getDiskStorageType().getEntity() == DiskStorageType.CINDER) { StorageDomain storageDomain = getStorageDomain().getSelectedItem(); parameters.setStorageDomainId(storageDomain.getId()); } 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 7707ab1..142cd3b 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 @@ -1524,6 +1524,9 @@ @DefaultStringValue("There are no active Storage Domains that you have permissions to create a disk on in the relevant Data Center.") String noActiveStorageDomainsInDC(); + @DefaultStringValue("There are no available OpenStack Volume storage domains that you have permissions to create a disk on in the relevant Data Center.") + String noCinderStorageDomainsInDC(); + @DefaultStringValue("The relevant Data Center is not active.") String relevantDCnotActive(); @@ -2670,4 +2673,7 @@ @DefaultStringValue("Changing management network is only permitted via the 'Manage Cluster Networks' dialog.") String prohibitManagementNetworkChangeInEditClusterInfoMessage(); + + @DefaultStringValue("No volume type") + String noCinderVolumeType(); } -- To view, visit https://gerrit.ovirt.org/39046 To unsubscribe, visit https://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I858c3a5a9426fa5571955b9d1e6ed9b41be891ac Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Maor Lipchuk <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
