Daniel Erez has uploaded a new change for review.

Change subject: webadmin: cinder integration
......................................................................

webadmin: cinder integration

WIP. Will be divided to separate patches.

This patch includes:

* SystemTree - openstack icon for volume provider
- SystemTreeItemCell - add OPENSTACK_VOLUME to relevant switch.

* add cinder to Enums properties
- Updating Enums.java/Enums.properties.

* adding cinder entities to Common.gwt.xml
- Adding relevant business entities to Common.gwt.xml

* StorageDomainStatus - OpenStack icon
- Openstack icon for all relevant domains in Status column.

* support openstack volume provider

* Storage main-tab - relevant tabs for Cinder domains
- Storage main-tab - display relevant sub-tabs for cinder domains

* Disks tabs - add Cinder disks table
- Disks main-tab / VMs -> Disks sub-tab:
  added a new table for Cinder disks.

* Add disk dialog - support Cinder disks

Change-Id: Ied68cb17829a211a808e2a217e35162e495f054d
Signed-off-by: Daniel Erez <[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/renderer/StorageDomainFreeSpaceRenderer.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StorageDomainsColumn.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewColumns.java
M 
frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.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/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.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/providers/ProviderModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.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/Enums.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainSharedStatusColumn.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
M 
frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java
22 files changed, 266 insertions(+), 119 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/59/35359/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 68da609..11a8fb0 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
@@ -1293,6 +1293,10 @@
     @DefaultStringValue("External (Direct LUN)")
     String externalDisk();
 
+    @DefaultStringValue("Cinder")
+    String cinderDisk();
+
+
     @DefaultStringValue("LUNs > Targets")
     String storageIscsiPopupLunToTargetsTabLabel();
 
@@ -1409,6 +1413,9 @@
     @DefaultStringValue("Direct LUN")
     String lunDisksLabel();
 
+    @DefaultStringValue("Cinder")
+    String cinderDisksLabel();
+
     @DefaultStringValue("Current")
     String currentQuota();
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/renderer/StorageDomainFreeSpaceRenderer.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/renderer/StorageDomainFreeSpaceRenderer.java
index bd171eb..7948a36 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/renderer/StorageDomainFreeSpaceRenderer.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/renderer/StorageDomainFreeSpaceRenderer.java
@@ -1,6 +1,7 @@
 package org.ovirt.engine.ui.common.widget.renderer;
 
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
+import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.ui.common.CommonApplicationMessages;
 
 import com.google.gwt.core.client.GWT;
@@ -15,7 +16,7 @@
             return ""; //$NON-NLS-1$
         }
 
-        if (storageDomain.getAvailableDiskSize() == null) {
+        if (storageDomain.getAvailableDiskSize() == null || 
storageDomain.getStorageType() == StorageType.CINDER) {
             // 'getAvailableDiskSize' may return null when there's a 
connectivity issue with the storage domain
             return storageDomain.getStorageName();
         }
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StorageDomainsColumn.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StorageDomainsColumn.java
index 855d703..a5858ed 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StorageDomainsColumn.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/table/column/StorageDomainsColumn.java
@@ -19,7 +19,7 @@
 
     @Override
     public String getValue(Disk object) {
-        if (object.getDiskStorageType() != DiskStorageType.IMAGE) {
+        if (object.getDiskStorageType() != DiskStorageType.IMAGE && 
object.getDiskStorageType() != DiskStorageType.CINDER) {
             return CONSTANTS.empty();
         }
 
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewColumns.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewColumns.java
index 5cef61f..72eb0cc 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewColumns.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewColumns.java
@@ -133,25 +133,6 @@
         }
     };
 
-    public static final ImageResourceColumn<Disk> lunDiskColumn = new 
ImageResourceColumn<Disk>() {
-        @Override
-        public ImageResource getValue(Disk object) {
-            setTitle(object.getDiskStorageType() == DiskStorageType.LUN ? 
getDefaultTitle() : null);
-            return object.getDiskStorageType() == DiskStorageType.LUN ?
-                    resources.externalDiskIcon() : null;
-        }
-
-        @Override
-        public String getDefaultTitle() {
-            return constants.lunDisksLabel();
-        }
-
-        @Override
-        public ImageResource getDefaultImage() {
-            return resources.externalDiskIcon();
-        }
-    };
-
     public static final ImageResourceColumn<Disk> diskContainersIconColumn = 
new ImageResourceColumn<Disk>() {
         @Override
         public ImageResource getValue(Disk object) {
@@ -201,9 +182,12 @@
         DiskSizeColumn<Disk> column = new DiskSizeColumn<Disk>() {
             @Override
             protected Long getRawValue(Disk object) {
-                return object.getDiskStorageType() == DiskStorageType.IMAGE ?
-                        ((DiskImage) object).getSize() :
-                        (long) (((LunDisk) object).getLun().getDeviceSize() * 
Math.pow(1024, 3));
+                switch (object.getDiskStorageType()) {
+                    case LUN:
+                        return (long) (((LunDisk) 
object).getLun().getDeviceSize() * Math.pow(1024, 3));
+                    default:
+                        return object.getSize();
+                }
             }
         };
 
@@ -246,11 +230,23 @@
         return makeSortable(column, sortBy);
     }
 
+    public static final TextColumnWithTooltip<Disk> 
getDiskStorageTypeColumn(String sortBy) {
+        TextColumnWithTooltip<Disk> column = new EnumColumn<Disk, 
DiskStorageType>() {
+            @Override
+            protected DiskStorageType getRawValue(Disk object) {
+                return object.getDiskStorageType();
+            }
+        };
+
+        return makeSortable(column, sortBy);
+    }
+
     public static final TextColumnWithTooltip<Disk> 
getDateCreatedColumn(String sortBy) {
         TextColumnWithTooltip<Disk> column = new FullDateTimeColumn<Disk>() {
             @Override
             protected Date getRawValue(Disk object) {
-                return object.getDiskStorageType() == DiskStorageType.IMAGE ?
+                return object.getDiskStorageType() == DiskStorageType.IMAGE ||
+                        object.getDiskStorageType() == DiskStorageType.CINDER ?
                         ((DiskImage) object).getCreationDate() : null;
             }
         };
@@ -262,7 +258,8 @@
         TextColumnWithTooltip<Disk> column = new EnumColumn<Disk, 
ImageStatus>() {
             @Override
             protected ImageStatus getRawValue(Disk object) {
-                return object.getDiskStorageType() == DiskStorageType.IMAGE ?
+                return object.getDiskStorageType() == DiskStorageType.IMAGE ||
+                        object.getDiskStorageType() == DiskStorageType.CINDER ?
                         ((DiskImage) object).getImageStatus() : null;
             }
         };
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java
index 10c05f0..0813af8 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/disks/DisksViewRadioGroup.java
@@ -18,6 +18,7 @@
     RadioButton allButton;
     RadioButton imagesButton;
     RadioButton lunsButton;
+    RadioButton cinderButton;
 
     public DisksViewRadioGroup() {
         initWidget(getRadioGroupPanel());
@@ -27,10 +28,12 @@
         allButton = new RadioButton("diskTypeView"); //$NON-NLS-1$
         imagesButton = new RadioButton("diskTypeView"); //$NON-NLS-1$
         lunsButton = new RadioButton("diskTypeView"); //$NON-NLS-1$
+        cinderButton = new RadioButton("diskTypeView"); //$NON-NLS-1$
 
         allButton.getElement().getStyle().setMarginRight(20, Unit.PX);
         imagesButton.getElement().getStyle().setMarginRight(20, Unit.PX);
         lunsButton.getElement().getStyle().setMarginRight(20, Unit.PX);
+        cinderButton.getElement().getStyle().setMarginRight(20, Unit.PX);
 
         FlowPanel buttonsPanel = new FlowPanel();
         buttonsPanel.getElement().getStyle().setProperty("marginLeft", 
"auto"); //$NON-NLS-1$ //$NON-NLS-2$
@@ -38,6 +41,7 @@
         buttonsPanel.add(allButton);
         buttonsPanel.add(imagesButton);
         buttonsPanel.add(lunsButton);
+        buttonsPanel.add(cinderButton);
 
         setDiskStorageType(null);
         localize(constants);
@@ -49,12 +53,14 @@
         allButton.addClickHandler(clickHandler);
         imagesButton.addClickHandler(clickHandler);
         lunsButton.addClickHandler(clickHandler);
+        cinderButton.addClickHandler(clickHandler);
     }
 
     void localize(CommonApplicationConstants constants) {
         allButton.setText(constants.allDisksLabel());
         imagesButton.setText(constants.imageDisksLabel());
         lunsButton.setText(constants.lunDisksLabel());
+        cinderButton.setText(constants.cinderDisksLabel());
     }
 
     public RadioButton getAllButton() {
@@ -69,15 +75,21 @@
         return lunsButton;
     }
 
+    public RadioButton getCinderButton() {
+        return cinderButton;
+    }
+
     public DiskStorageType getDiskStorageType() {
         return imagesButton.getValue() ? DiskStorageType.IMAGE :
-                lunsButton.getValue() ? DiskStorageType.LUN : null;
+               lunsButton.getValue() ? DiskStorageType.LUN :
+               cinderButton.getValue() ? DiskStorageType.CINDER : null;
     }
 
     public void setDiskStorageType(DiskStorageType diskStorageType) {
         allButton.setValue(diskStorageType == null);
         imagesButton.setValue(diskStorageType == DiskStorageType.IMAGE);
         lunsButton.setValue(diskStorageType == DiskStorageType.LUN);
+        cinderButton.setValue(diskStorageType == DiskStorageType.CINDER);
     }
 
 }
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 48f265f..d4120d4 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
@@ -352,6 +352,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);
+                    }
+                });
+
         storageModel = new StorageModel(new NewEditStorageModelBehavior());
 
         // Create IscsiStorageModel
diff --git 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java
 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java
index ca99e53..5b3bc4f 100644
--- 
a/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java
+++ 
b/frontend/webadmin/modules/gwt-common/src/main/java/org/ovirt/engine/ui/common/widget/uicommon/vm/BaseVmDiskListModelTable.java
@@ -35,6 +35,7 @@
     private static TextColumnWithTooltip<Disk> lunVendorIdColumn;
     private static TextColumnWithTooltip<Disk> lunProductIdColumn;
     private static TextColumnWithTooltip<Disk> interfaceColumn;
+    private static TextColumnWithTooltip<Disk> typeColumn;
     private static TextColumnWithTooltip<Disk> descriptionColumn;
 
     public BaseVmDiskListModelTable(
@@ -82,6 +83,7 @@
         boolean all = disksViewRadioGroup.getAllButton().getValue();
         boolean images = disksViewRadioGroup.getImagesButton().getValue();
         boolean luns = disksViewRadioGroup.getLunsButton().getValue();
+        boolean cinder = disksViewRadioGroup.getCinderButton().getValue();
 
         getTable().getSelectionModel().clear();
         
getModel().getDiskViewType().setEntity(disksViewRadioGroup.getDiskStorageType());
@@ -89,29 +91,25 @@
         getModel().search();
 
         getTable().ensureColumnPresent(
-                DisksViewColumns.diskStatusColumn, constants.empty(), all || 
images || luns, "30px"); //$NON-NLS-1$
+                DisksViewColumns.diskStatusColumn, constants.empty(), all || 
images || luns || cinder, "30px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                aliasColumn, constants.aliasDisk(), all || images || luns, 
"120px"); //$NON-NLS-1$
+                aliasColumn, constants.aliasDisk(), all || images || luns || 
cinder, "120px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 DisksViewColumns.bootableDiskColumn,
-                DisksViewColumns.bootableDiskColumn.getHeaderHtml(), all || 
images || luns, "30px"); //$NON-NLS-1$
+                DisksViewColumns.bootableDiskColumn.getHeaderHtml(), all || 
images || luns || cinder, "30px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 DisksViewColumns.shareableDiskColumn,
-                DisksViewColumns.shareableDiskColumn.getHeaderHtml(), all || 
images || luns, "30px"); //$NON-NLS-1$
+                DisksViewColumns.shareableDiskColumn.getHeaderHtml(), all || 
images || luns || cinder, "30px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 DisksViewColumns.readOnlyDiskColumn,
-                DisksViewColumns.readOnlyDiskColumn.getHeaderHtml(), all || 
images || luns, "30px"); //$NON-NLS-1$
+                DisksViewColumns.readOnlyDiskColumn.getHeaderHtml(), all || 
images || luns || cinder, "30px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                DisksViewColumns.lunDiskColumn,
-                DisksViewColumns.lunDiskColumn.getHeaderHtml(), all, "30px"); 
//$NON-NLS-1$
-
-        getTable().ensureColumnPresent(
-                sizeColumn, constants.provisionedSizeDisk(), all || images || 
luns, "110px"); //$NON-NLS-1$
+                sizeColumn, constants.provisionedSizeDisk(), all || images || 
luns || cinder, "110px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 actualSizeColumn, constants.sizeDisk(), images, "110px"); 
//$NON-NLS-1$
@@ -120,13 +118,13 @@
                 allocationColumn, constants.allocationDisk(), images, 
"125px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                DisksViewColumns.storageDomainsColumn, 
constants.storageDomainDisk(), images, "125px"); //$NON-NLS-1$
+                DisksViewColumns.storageDomainsColumn, 
constants.storageDomainDisk(), images || cinder, "125px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 DisksViewColumns.storageTypeColumn, 
constants.storageTypeDisk(), images, "100px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                dateCreatedColumn, constants.creationDateDisk(), images, 
"120px"); //$NON-NLS-1$
+                dateCreatedColumn, constants.creationDateDisk(), images || 
cinder, "120px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 lunIdColumn, constants.lunIdSanStorage(), luns, "130px"); 
//$NON-NLS-1$
@@ -141,10 +139,10 @@
                 lunProductIdColumn, constants.productIdSanStorage(), luns, 
"130px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                DisksViewColumns.diskContainersColumn, 
constants.attachedToDisk(), all || images || luns, "110px"); //$NON-NLS-1$
+                DisksViewColumns.diskContainersColumn, 
constants.attachedToDisk(), all || images || luns || cinder, "110px"); 
//$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                interfaceColumn, constants.interfaceDisk(), all || images || 
luns, "100px"); //$NON-NLS-1$
+                interfaceColumn, constants.interfaceDisk(), all || images || 
luns || cinder, "100px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 DisksViewColumns.diskAlignmentColumn, 
constants.diskAlignment(), all || images || luns, "100px"); //$NON-NLS-1$
@@ -153,7 +151,10 @@
                 statusColumn, constants.statusDisk(), images, "80px"); 
//$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                descriptionColumn, constants.descriptionDisk(), all || images 
|| luns, "90px"); //$NON-NLS-1$
+                typeColumn, constants.typeDisk(), all, "100px"); //$NON-NLS-1$
+
+        getTable().ensureColumnPresent(
+                descriptionColumn, constants.descriptionDisk(), all || images 
|| luns || cinder, "90px"); //$NON-NLS-1$
 
     }
 
@@ -171,6 +172,7 @@
         lunVendorIdColumn = DisksViewColumns.getLunVendorIdColumn(null);
         lunProductIdColumn = DisksViewColumns.getLunProductIdColumn(null);
         interfaceColumn = DisksViewColumns.getInterfaceColumn(null);
+        typeColumn = DisksViewColumns.getDiskStorageTypeColumn(null);
         descriptionColumn = DisksViewColumns.getDescriptionColumn(null);
     }
 }
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 190e459..92965c0 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
@@ -33,7 +33,9 @@
                <include name="common/businessentities/DiskLunMapId.java" />
                <include name="common/businessentities/Disk.java" />
                <include name="common/businessentities/LunDisk.java" />
-               <include name="common/businessentities/Image.java" />
+        <include name="common/businessentities/CinderDisk.java" />
+        <include name="common/businessentities/CinderConnectionInfo.java" />
+        <include name="common/businessentities/Image.java" />
                <include name="common/businessentities/DiskImage.java" />
                <include name="common/businessentities/DiskImageBase.java" />
                <include name="common/businessentities/DiskImageDynamic.java" />
@@ -55,6 +57,7 @@
                <include 
name="common/businessentities/OpenstackNetworkPluginType.java" />
                <include name="common/businessentities/DiskAlignment.java" />
                <include 
name="common/businessentities/OpenStackImageProviderProperties.java" />
+        <include 
name="common/businessentities/OpenStackVolumeProviderProperties.java" />
         <include name="common/businessentities/VmBalloonInfo.java" />
                <include name="common/businessentities/ArchitectureType.java" />
         <include name="common/businessentities/IscsiBond.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 0799a70..554a67b 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
@@ -28,6 +28,7 @@
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
+import org.ovirt.engine.core.common.businessentities.StorageType;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSGroup;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
@@ -1400,6 +1401,16 @@
         });
     }
 
+    public final static Collection<StorageDomain> 
filterStorageDomainByStorageType(
+            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<Provider> 
filterProvidersByProvidedType(Collection<Provider> source,
             final VdcObjectType type) {
         return where(source, new IPredicate<Provider>() {
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 ee962cd..5b5be34 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
@@ -2515,6 +2515,16 @@
         
Frontend.getInstance().runQuery(VdcQueryType.GetPermittedStorageDomainsByStoragePoolId,
 params, aQuery);
     }
 
+    public void getAllStorageDomains(AsyncQuery aQuery) {
+        aQuery.converterCallback = new IAsyncConverter() {
+            @Override
+            public Object Convert(Object source, AsyncQuery _asyncQuery) {
+                return source != null ? source : new 
ArrayList<StorageDomain>();
+            }
+        };
+        Frontend.getInstance().runQuery(VdcQueryType.GetAllStorageDomains, new 
VdcQueryParametersBase(), aQuery);
+    }
+
     public void getAllDataCenterNetworks(AsyncQuery aQuery, Guid 
storagePoolId) {
         aQuery.converterCallback = new IAsyncConverter() {
             @Override
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
index ad8bd9d..0757e75 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/providers/ProviderModel.java
@@ -9,6 +9,7 @@
 import org.ovirt.engine.core.common.action.VdcActionType;
 import org.ovirt.engine.core.common.action.VdcReturnValueBase;
 import 
org.ovirt.engine.core.common.businessentities.OpenStackImageProviderProperties;
+import 
org.ovirt.engine.core.common.businessentities.OpenStackVolumeProviderProperties;
 import org.ovirt.engine.core.common.businessentities.Provider;
 import org.ovirt.engine.core.common.businessentities.ProviderType;
 import org.ovirt.engine.core.common.businessentities.TenantProviderProperties;
@@ -132,9 +133,13 @@
         return getType().getSelectedItem() == ProviderType.OPENSTACK_IMAGE;
     }
 
+    private boolean isTypeOpenStackVolume() {
+        return getType().getSelectedItem() == ProviderType.OPENSTACK_VOLUME;
+    }
+
     private boolean isTypeTenantAware() {
         ProviderType type = getType().getSelectedItem();
-        return type == ProviderType.OPENSTACK_NETWORK || type == 
ProviderType.OPENSTACK_IMAGE;
+        return type == ProviderType.OPENSTACK_NETWORK || type == 
ProviderType.OPENSTACK_IMAGE || type == ProviderType.OPENSTACK_VOLUME;
     }
 
     private boolean isTypeRequiresAuthentication() {
@@ -150,6 +155,8 @@
                 return "http://localhost:9696";; //$NON-NLS-1$
             case OPENSTACK_IMAGE:
                 return "http://localhost:9292";; //$NON-NLS-1$
+            case OPENSTACK_VOLUME:
+                return "http://localhost:8776";; //$NON-NLS-1$
             case FOREMAN:
             default:
                 return "http://localhost";; //$NON-NLS-1$
@@ -260,6 +267,8 @@
             getNeutronAgentModel().flush(provider);
         } else if (isTypeOpenStackImage()) {
             provider.setAdditionalProperties(new 
OpenStackImageProviderProperties());
+        } else if (isTypeOpenStackVolume()) {
+            provider.setAdditionalProperties(new 
OpenStackVolumeProviderProperties());
         }
 
         boolean authenticationRequired = requiresAuthentication.getEntity();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
index fcb785a..abfa20d 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/storage/StorageListModel.java
@@ -1058,8 +1058,8 @@
             boolean isImageStorage =
                      storage.getStorageDomainType() == StorageDomainType.Image 
||
                      storage.getStorageDomainType() == StorageDomainType.ISO;
-            boolean isDataCenterAvailable = storage.getStorageType() != 
StorageType.GLANCE;
-            boolean isGeneralAvailable = storage.getStorageType() != 
StorageType.GLANCE;
+            boolean isDataCenterAvailable = 
!storage.getStorageType().isOpenStackDomain();
+            boolean isGeneralAvailable = 
!storage.getStorageType().isOpenStackDomain();
 
             boolean isRegsiterEntityListModelSelected =
                     getActiveDetailModel() == vmRegisterListModel || 
getActiveDetailModel() == templateRegisterListModel;
@@ -1080,7 +1080,7 @@
             snapshotListModel.setIsAvailable(isDataStorage);
             diskProfileListModel.setIsAvailable(isDataStorage);
 
-            isoListModel.setIsAvailable(isImageStorage);
+            isoListModel.setIsAvailable(isImageStorage || 
storage.getStorageType() == StorageType.CINDER);
         }
     }
 
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 9e03180..7b928c2 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
@@ -1,11 +1,13 @@
 package org.ovirt.engine.ui.uicommonweb.models.vms;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
 import java.util.List;
 
 import org.ovirt.engine.core.common.businessentities.ActionGroup;
+import org.ovirt.engine.core.common.businessentities.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
@@ -309,6 +311,8 @@
 
     protected abstract LunDisk getLunDisk();
 
+    protected abstract CinderDisk getCinderDisk();
+
     protected abstract void setDefaultInterface();
 
     protected abstract void updateVolumeType(StorageType storageType);
@@ -347,30 +351,52 @@
     }
 
     protected void updateStorageDomains(final StoragePool datacenter) {
-        
AsyncDataProvider.getInstance().getPermittedStorageDomainsByStoragePoolId(new 
AsyncQuery(this, new INewAsyncCallback() {
-            @Override
-            public void onSuccess(Object target, Object returnValue) {
-                DiskModel diskModel = (DiskModel) target;
-                ArrayList<StorageDomain> storageDomains = 
(ArrayList<StorageDomain>) returnValue;
+        switch (getDiskStorageType().getEntity()) {
+            case CINDER:
+                AsyncDataProvider.getInstance().getAllStorageDomains(new 
AsyncQuery(this, new INewAsyncCallback() {
+                    @Override
+                    public void onSuccess(Object target, Object returnValue) {
+                        DiskModel diskModel = (DiskModel) target;
+                        List<StorageDomain> storageDomains = 
(List<StorageDomain>) Linq.filterStorageDomainByStorageType(
+                                (Collection<StorageDomain>) returnValue, 
StorageType.CINDER);
 
-                ArrayList<StorageDomain> filteredStorageDomains = new 
ArrayList<StorageDomain>();
-                for (StorageDomain a : storageDomains)
-                {
-                    if (!a.getStorageDomainType().isIsoOrImportExportDomain() 
&& a.getStatus() == StorageDomainStatus.Active)
-                    {
-                        filteredStorageDomains.add(a);
+                        Collections.sort(storageDomains, new 
NameableComparator());
+                        StorageDomain storage = 
Linq.firstOrDefault(storageDomains);
+
+                        diskModel.getStorageDomain().setItems(storageDomains);
+                        diskModel.getStorageDomain().setSelectedItem(storage);
+
+                        diskModel.setMessage(storage == null ? 
CONSTANTS.noCinderStorageDomainsInDC() : "");
                     }
-                }
+                }, getHash()));
+                break;
+            default:
+                
AsyncDataProvider.getInstance().getPermittedStorageDomainsByStoragePoolId(new 
AsyncQuery(this, new INewAsyncCallback() {
+                    @Override
+                    public void onSuccess(Object target, Object returnValue) {
+                        DiskModel diskModel = (DiskModel) target;
+                        ArrayList<StorageDomain> storageDomains = 
(ArrayList<StorageDomain>) returnValue;
 
-                Collections.sort(filteredStorageDomains, new 
NameableComparator());
-                StorageDomain storage = 
Linq.firstOrDefault(filteredStorageDomains);
+                        ArrayList<StorageDomain> filteredStorageDomains = new 
ArrayList<StorageDomain>();
+                        for (StorageDomain a : storageDomains)
+                        {
+                            if 
(!a.getStorageDomainType().isIsoOrImportExportDomain() && a.getStatus() == 
StorageDomainStatus.Active)
+                            {
+                                filteredStorageDomains.add(a);
+                            }
+                        }
 
-                diskModel.getStorageDomain().setItems(filteredStorageDomains);
-                diskModel.getStorageDomain().setSelectedItem(storage);
+                        Collections.sort(filteredStorageDomains, new 
NameableComparator());
+                        StorageDomain storage = 
Linq.firstOrDefault(filteredStorageDomains);
 
-                diskModel.setMessage(storage == null ? 
CONSTANTS.noActiveStorageDomainsInDC() : "");
-            }
-        }, getHash()), datacenter.getId(), ActionGroup.CREATE_DISK);
+                        
diskModel.getStorageDomain().setItems(filteredStorageDomains);
+                        diskModel.getStorageDomain().setSelectedItem(storage);
+
+                        diskModel.setMessage(storage == null ? 
CONSTANTS.noActiveStorageDomainsInDC() : "");
+                    }
+                }, getHash()), datacenter.getId(), ActionGroup.CREATE_DISK);
+                break;
+        }
     }
 
     private void updateHosts(StoragePool datacenter) {
@@ -637,10 +663,11 @@
         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);
+        getSize().setIsAvailable(isDiskImage || isCinderDisk);
         getSizeExtend().setIsAvailable(isDiskImage && !getIsNew());
-        getStorageDomain().setIsAvailable(isDiskImage);
+        getStorageDomain().setIsAvailable(isDiskImage || isCinderDisk);
         getVolumeType().setIsAvailable(isDiskImage);
         getIsWipeAfterDelete().setIsAvailable(isDiskImage);
         getHost().setIsAvailable(isLunDisk);
@@ -766,6 +793,20 @@
         updateDirectLunDiskEnabled(datacenter);
         updateInterface(isInVm ? getVm().getVdsGroupCompatibilityVersion() : 
null);
 
+        switch (getDiskStorageType().getEntity()) {
+            case IMAGE:
+                updateStorageDomains(datacenter);
+                break;
+            case CINDER:
+                updateStorageDomains(null);
+                break;
+            default:
+                updateHosts(datacenter);
+                break;
+        }
+
+        if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) {
+        }
         if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) {
             updateStorageDomains(datacenter);
         }
@@ -847,28 +888,34 @@
     }
 
     public void onSave() {
-        if (getDiskStorageType().getEntity() == DiskStorageType.IMAGE) {
-            DiskImage diskImage = getDiskImage();
-            if (getQuota().getIsAvailable() && getQuota().getSelectedItem() != 
null) {
-                diskImage.setQuotaId(getQuota().getSelectedItem().getId());
-            }
+        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();
+                setDisk(cinderDisk);
+                break;
+            default:
+                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);
-            }
+                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);
+                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 fd60a9e..b22f894 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
@@ -3,6 +3,7 @@
 import org.ovirt.engine.core.common.VdcActionUtils;
 import org.ovirt.engine.core.common.action.UpdateVmDiskParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.Disk.DiskStorageType;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
@@ -99,6 +100,11 @@
     }
 
     @Override
+    protected CinderDisk getCinderDisk() {
+        return (CinderDisk) getDisk();
+    }
+
+    @Override
     public void onSave() {
         if (getProgress() != null || !validate()) {
             return;
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 3e361e6..340754b 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
@@ -4,6 +4,7 @@
 
 import org.ovirt.engine.core.common.action.AddDiskParameters;
 import org.ovirt.engine.core.common.action.VdcActionType;
+import org.ovirt.engine.core.common.businessentities.CinderDisk;
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DiskInterface;
@@ -13,6 +14,7 @@
 import org.ovirt.engine.core.common.businessentities.StoragePool;
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.businessentities.VolumeFormat;
 import org.ovirt.engine.core.common.businessentities.VolumeType;
 import org.ovirt.engine.core.common.queries.ConfigurationValues;
 import org.ovirt.engine.ui.frontend.AsyncQuery;
@@ -104,6 +106,11 @@
     }
 
     @Override
+    protected CinderDisk getCinderDisk() {
+        return new CinderDisk();
+    }
+
+    @Override
     public void onSave() {
         if (getProgress() != null || !validate()) {
             return;
@@ -111,24 +118,31 @@
 
         super.onSave();
 
-        if (getDiskStorageType().getEntity() == Disk.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);
+                break;
+            default:
+                DiskImage diskImage = (DiskImage) getDisk();
+                diskImage.setSizeInGigabytes(getSize().getEntity());
+                diskImage.setVolumeType(getVolumeType().getSelectedItem());
+                diskImage.setvolumeFormat(getVolumeFormat());
+                break;
         }
 
         startProgress(null);
 
         AddDiskParameters parameters = new AddDiskParameters(getVmId(), 
getDisk());
         parameters.setPlugDiskToVm(getIsPlugged().getEntity());
-        if (getDiskStorageType().getEntity() == Disk.DiskStorageType.IMAGE) {
+        if (getDiskStorageType().getEntity() == Disk.DiskStorageType.IMAGE || 
getDiskStorageType().getEntity() == Disk.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/Enums.java
 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
index ee17626..4f0212e 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
+++ 
b/frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/Enums.java
@@ -65,6 +65,8 @@
 
     String StorageType___GLANCE();
 
+    String StorageType___CINDER();
+
     String StorageType___UNKNOWN();
 
     String StorageFormatType___V1();
@@ -188,6 +190,8 @@
 
     String StorageDomainType___Image();
 
+    String StorageDomainType___Volume();
+
     String VmTemplateStatus___OK();
 
     String VmTemplateStatus___Locked();
@@ -266,6 +270,8 @@
 
     String Disk$DiskStorageType___IMAGE();
 
+    String Disk$DiskStorageType___CINDER();
+
     String RoleType___ADMIN();
 
     String RoleType___USER();
@@ -290,6 +296,8 @@
 
     String ProviderType___OPENSTACK_IMAGE();
 
+    String ProviderType___OPENSTACK_VOLUME();
+
     // Gluster enums
     String GlusterVolumeType___DISTRIBUTE();
 
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 fde7b44..6bf1c74 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
@@ -1461,7 +1461,10 @@
     @DefaultStringValue("There are no active Storage Domains that you have 
permissions to create a disk on in the relevant Data Center.")
     String noActiveStorageDomainsInDC();
 
-    @DefaultStringValue("The relevant Data Center is not active.")
+    @DefaultStringValue("There are no Cinder Storage Domains that you have 
permissions to create a disk on.")
+    String noCinderStorageDomainsInDC();
+
+    @DefaultStringValue("The relevant Data-Center is not active.")
     String relevantDCnotActive();
 
     @DefaultStringValue("Host name can't contain blanks or special characters, 
must be at least one character long, and contain 'a-z', '0-9', '_' or '.' 
characters.")
diff --git 
a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
 
b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
index 5ba2164..1f3c802 100644
--- 
a/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
+++ 
b/frontend/webadmin/modules/uicompat/src/main/resources/org/ovirt/engine/ui/uicompat/Enums.properties
@@ -30,6 +30,7 @@
 StorageType___POSIXFS=POSIX compliant FS
 StorageType___GLUSTERFS=GlusterFS
 StorageType___GLANCE=OpenStack Glance
+StorageType___CINDER=OpenStack Cinder
 StorageType___UNKNOWN=Unknown
 StorageFormatType___V1=V1
 StorageFormatType___V2=V2
@@ -111,6 +112,7 @@
 StorageDomainType___ISO=ISO
 StorageDomainType___ImportExport=Export
 StorageDomainType___Image=Image
+StorageDomainType___Volume=Volume
 VmTemplateStatus___OK=OK
 VmTemplateStatus___Locked=Locked
 VmTemplateStatus___Illegal=Illegal
@@ -166,6 +168,7 @@
 ServiceType___GLUSTER_SWIFT=Gluster Swift
 Disk$DiskStorageType___LUN=LUN
 Disk$DiskStorageType___IMAGE=Image
+Disk$DiskStorageType___CINDER=Cinder
 RoleType___ADMIN=Admin
 RoleType___USER=User
 JobExecutionStatus___STARTED=Started
@@ -178,6 +181,7 @@
 OpenstackNetworkPluginType___LINUX_BRIDGE=Linux Bridge
 OpenstackNetworkPluginType___OPEN_VSWITCH=Open vSwitch
 ProviderType___OPENSTACK_IMAGE=OpenStack Image
+ProviderType___OPENSTACK_VOLUME=OpenStack Volume
 ExternalSubnet$IpVersion___IPV4=IPv4
 ExternalSubnet$IpVersion___IPV6=IPv6
 SerialNumberPolicy___HOST_ID=Host ID
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
index 9210115..6ff662e 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/section/main/view/tab/MainTabDiskView.java
@@ -60,6 +60,7 @@
     private static TextColumnWithTooltip<Disk> lunVendorIdColumn;
     private static TextColumnWithTooltip<Disk> lunProductIdColumn;
     private static TextColumnWithTooltip<Disk> qoutaColumn;
+    private static TextColumnWithTooltip<Disk> typeColumn;
     private static TextColumnWithTooltip<Disk> descriptionColumn;
 
     @Inject
@@ -121,43 +122,40 @@
         boolean all = disksViewRadioGroup.getAllButton().getValue();
         boolean images = disksViewRadioGroup.getImagesButton().getValue();
         boolean luns = disksViewRadioGroup.getLunsButton().getValue();
+        boolean cinder = disksViewRadioGroup.getCinderButton().getValue();
 
         searchByDiskViewType(disksViewRadioGroup.getDiskStorageType());
 
         getTable().ensureColumnPresent(
-                aliasColumn, constants.aliasDisk(), all || images || luns,
+                aliasColumn, constants.aliasDisk(), all || images || luns || 
cinder,
                 "120px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                idColumn, constants.idDisk(), all || images || luns,
+                idColumn, constants.idDisk(), all || images || luns || cinder,
                 "120px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 DisksViewColumns.bootableDiskColumn,
-                DisksViewColumns.bootableDiskColumn.getHeaderHtml(), all || 
images || luns, "30px"); //$NON-NLS-1$
+                DisksViewColumns.bootableDiskColumn.getHeaderHtml(), all || 
images || luns || cinder, "30px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
                 DisksViewColumns.shareableDiskColumn,
-                DisksViewColumns.shareableDiskColumn.getHeaderHtml(), all || 
images || luns, "30px"); //$NON-NLS-1$
+                DisksViewColumns.shareableDiskColumn.getHeaderHtml(), all || 
images || luns || cinder, "30px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                DisksViewColumns.lunDiskColumn,
-                DisksViewColumns.lunDiskColumn.getHeaderHtml(), all, "30px"); 
//$NON-NLS-1$
-
-        getTable().ensureColumnPresent(
-                DisksViewColumns.diskContainersIconColumn, "", all || images 
|| luns, //$NON-NLS-1$
+                DisksViewColumns.diskContainersIconColumn, "", all || images 
|| luns || cinder, //$NON-NLS-1$
                 "30px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                DisksViewColumns.diskContainersColumn, 
constants.attachedToDisk(), all || images || luns,
+                DisksViewColumns.diskContainersColumn, 
constants.attachedToDisk(), all || images || luns || cinder,
                 "125px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                DisksViewColumns.storageDomainsColumn, 
constants.storageDomainsDisk(), images,
+                DisksViewColumns.storageDomainsColumn, 
constants.storageDomainsDisk(), images || cinder,
                 "180px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                sizeColumn, constants.provisionedSizeDisk(), all || images || 
luns,
+                sizeColumn, constants.provisionedSizeDisk(), all || images || 
luns || cinder,
                 "110px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
@@ -165,7 +163,7 @@
                 "130px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                dateCreatedColumn, constants.creationDateDisk(), images,
+                dateCreatedColumn, constants.creationDateDisk(), images || 
cinder,
                 "130px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
@@ -192,7 +190,10 @@
                 qoutaColumn, constants.quotaDisk(), images && isQuotaVisible, 
"120px"); //$NON-NLS-1$
 
         getTable().ensureColumnPresent(
-                descriptionColumn, constants.descriptionDisk(), all || images 
|| luns,
+                typeColumn, constants.typeDisk(), all, "100px"); //$NON-NLS-1$
+
+        getTable().ensureColumnPresent(
+                descriptionColumn, constants.descriptionDisk(), all || images 
|| luns || cinder,
                 "90px"); //$NON-NLS-1$
     }
 
@@ -210,6 +211,7 @@
         lunVendorIdColumn = 
DisksViewColumns.getLunVendorIdColumn(constants.empty());
         lunProductIdColumn = 
DisksViewColumns.getLunProductIdColumn(constants.empty());
         qoutaColumn = 
DisksViewColumns.getQoutaColumn(DiskConditionFieldAutoCompleter.QUOTA);
+        typeColumn = 
DisksViewColumns.getDiskStorageTypeColumn(DiskConditionFieldAutoCompleter.DISK_TYPE);
         descriptionColumn = 
DisksViewColumns.getDescriptionColumn(DiskConditionFieldAutoCompleter.DESCRIPTION);
     }
 
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainSharedStatusColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainSharedStatusColumn.java
index 8a700ea..54cb8d0 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainSharedStatusColumn.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainSharedStatusColumn.java
@@ -2,7 +2,6 @@
 
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
 import org.ovirt.engine.core.common.businessentities.StorageDomainType;
-import org.ovirt.engine.core.common.businessentities.StorageType;
 
 import com.google.gwt.resources.client.ImageResource;
 
@@ -14,7 +13,7 @@
             setEnumTitle(sp.getStorageDomainSharedStatus());
             switch (sp.getStorageDomainSharedStatus()) {
                 case Unattached:
-                    if (sp.getStorageType() == StorageType.GLANCE) {
+                    if (sp.getStorageType().isOpenStackDomain()) {
                         return getApplicationResources().openstackImage();
                     } else {
                         return getApplicationResources().tornChainImage();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
index b74da8b..9d74460 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/table/column/StorageDomainStatusColumn.java
@@ -1,7 +1,6 @@
 package org.ovirt.engine.ui.webadmin.widget.table.column;
 
 import org.ovirt.engine.core.common.businessentities.StorageDomain;
-import org.ovirt.engine.core.common.businessentities.StorageType;
 
 import com.google.gwt.resources.client.ImageResource;
 
@@ -12,7 +11,7 @@
         setEnumTitle(sp.getStatus());
         switch (sp.getStatus()) {
         case Unattached:
-            if (sp.getStorageType() == StorageType.GLANCE) {
+            if (sp.getStorageType().isOpenStackDomain()) {
                 return getApplicationResources().openstackImage();
             } else {
                 return getApplicationResources().tornChainImage();
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java
 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java
index cfdaaa2..4851b9b 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java
+++ 
b/frontend/webadmin/modules/webadmin/src/main/java/org/ovirt/engine/ui/webadmin/widget/tree/SystemTreeItemCell.java
@@ -84,6 +84,7 @@
             switch (((Provider) value.getEntity()).getType()) {
             case OPENSTACK_NETWORK:
             case OPENSTACK_IMAGE:
+            case OPENSTACK_VOLUME:
                 imageResource = applicationResources.openstackImage();
                 break;
             case FOREMAN:


-- 
To view, visit http://gerrit.ovirt.org/35359
To unsubscribe, visit http://gerrit.ovirt.org/settings

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ied68cb17829a211a808e2a217e35162e495f054d
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to