Daniel Erez has uploaded a new change for review.

Change subject: webadmin: disable virtio-scsi for unsupported OSes
......................................................................

webadmin: disable virtio-scsi for unsupported OSes

VM dialog:
* When selecting an OS that doesn't support VirtIO-SCSI,
  'VirtIO-SCSI Enabled' checkbox should be disabled.
* Updated VmModelBehaviorBase and derived behavior models accordingly.

Change-Id: I0256b84e1c82a6c2330287f1e68385d785d26b26
Bug-Url: https://bugzilla.redhat.com/1038613
Signed-off-by: Daniel Erez <de...@redhat.com>
---
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
8 files changed, 77 insertions(+), 18 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/49/22649/1

diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
index 2643e1a..d6128e1 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/ExistingVmModelBehavior.java
@@ -208,7 +208,7 @@
 
         updateConsoleDevice(getVm().getId());
 
-        updateVirtioScsiEnabled(getVm().getId());
+        updateVirtioScsiEnabled(getVm().getId(), getVm().getVmOsId());
 
         
getModel().getVncKeyboardLayout().setSelectedItem(vm.getVncKeyboardLayout());
 
@@ -292,6 +292,12 @@
     }
 
     @Override
+    public void oSType_SelectedItemChanged() {
+        int osType = getModel().getOSType().getSelectedItem();
+        updateVirtioScsiEnabled(vm.getId(), osType);
+    }
+
+    @Override
     public void updateMinAllocatedMemory()
     {
         DataCenterWithCluster dataCenterWithCluster = 
getModel().getDataCenterWithClustersList().getSelectedItem();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
index b7d4e4d..35a95d5 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewTemplateVmModelBehavior.java
@@ -189,6 +189,11 @@
     }
 
     @Override
+    public void oSType_SelectedItemChanged()
+    {
+    }
+
+    @Override
     public void updateMinAllocatedMemory()
     {
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
index eef793e..e777da6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/NewVmModelBehavior.java
@@ -122,7 +122,7 @@
             }
 
             updateConsoleDevice(template.getId());
-            updateVirtioScsiEnabled(template.getId());
+            updateVirtioScsiEnabled(template.getId(), template.getOsId());
             updateTimeZone(template.getTimeZone());
 
             // Update domain list
@@ -257,6 +257,15 @@
     }
 
     @Override
+    public void oSType_SelectedItemChanged() {
+        VmTemplate template = getModel().getTemplate().getSelectedItem();
+        int osType = getModel().getOSType().getSelectedItem();
+        if (template != null) {
+            updateVirtioScsiEnabled(template.getId(), osType);
+        }
+    }
+
+    @Override
     public void updateMinAllocatedMemory()
     {
         DataCenterWithCluster dataCenterWithCluster = 
getModel().getDataCenterWithClustersList().getSelectedItem();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
index df353ce..53d06bb 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/PoolModelBehaviorBase.java
@@ -128,7 +128,7 @@
 
             updateTimeZone(vmBase.getTimeZone());
             updateConsoleDevice(vmBase.getId());
-            updateVirtioScsiEnabled(vmBase.getId());
+            updateVirtioScsiEnabled(vmBase.getId(), vmBase.getOsId());
 
             // Update domain list
             updateDomain();
@@ -232,6 +232,15 @@
     }
 
     @Override
+    public void oSType_SelectedItemChanged() {
+        VmTemplate template = getModel().getTemplate().getSelectedItem();
+        int osType = getModel().getOSType().getSelectedItem();
+        if (template != null) {
+            updateVirtioScsiEnabled(template.getId(), osType);
+        }
+    }
+
+    @Override
     public void updateMinAllocatedMemory()
     {
         VDSGroup cluster = (VDSGroup) getModel().getSelectedCluster();
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
index 73e519c..fb41012 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/TemplateVmModelBehavior.java
@@ -130,6 +130,11 @@
     }
 
     @Override
+    public void oSType_SelectedItemChanged()
+    {
+    }
+
+    @Override
     public void updateMinAllocatedMemory()
     {
     }
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
index b003265..04cb7d6 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/UnitVmModel.java
@@ -1440,6 +1440,7 @@
             else if (sender == getOSType())
             {
                 oSType_SelectedItemChanged(sender, args);
+                getBehavior().oSType_SelectedItemChanged();
                 updateDisplayProtocol();
                 initUsbPolicy();
             }
@@ -1810,7 +1811,6 @@
         getDomain().setIsChangable(getIsWindowsOS());
 
         getBehavior().updateDefaultTimeZone();
-
 
         handleQxlClusterLevel();
 
diff --git 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
index 99458e4..2fd58e7 100644
--- 
a/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
+++ 
b/frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/VmModelBehaviorBase.java
@@ -10,6 +10,7 @@
 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;
+import org.ovirt.engine.core.common.businessentities.DiskInterface;
 import org.ovirt.engine.core.common.businessentities.DisplayType;
 import org.ovirt.engine.core.common.businessentities.MigrationSupport;
 import org.ovirt.engine.core.common.businessentities.Quota;
@@ -117,6 +118,8 @@
     public abstract void defaultHost_SelectedItemChanged();
 
     public abstract void provisioning_SelectedItemChanged();
+
+    public abstract void oSType_SelectedItemChanged();
 
     public abstract void updateMinAllocatedMemory();
 
@@ -1062,22 +1065,41 @@
         }));
     }
 
-    protected void updateVirtioScsiEnabled(Guid vmId) {
-        if (Guid.isNullOrEmpty(vmId)) {
-            VDSGroup cluster = getModel().getSelectedCluster();
-            boolean isVirtioScsiEnabled = (Boolean) 
AsyncDataProvider.getConfigValuePreConverted(
-                    ConfigurationValues.VirtIoScsiEnabled, 
cluster.getcompatibility_version().getValue());
-            getModel().getIsVirtioScsiEnabled().setEntity(isVirtioScsiEnabled);
-            return;
-        }
+    protected void updateVirtioScsiEnabled(final Guid vmId, int osId) {
+        VDSGroup cluster = getModel().getSelectedCluster();
+        Version clusterVersion = cluster != null ? 
cluster.getcompatibility_version() : null;
 
-        AsyncDataProvider.isVirtioScsiEnabledForVm(new AsyncQuery(getModel(), 
new INewAsyncCallback() {
+        AsyncDataProvider.getDiskInterfaceList(osId, clusterVersion,
+            new AsyncQuery(getModel(), new INewAsyncCallback() {
+                @Override
+                public void onSuccess(Object model, Object returnValue) {
+                    ArrayList<DiskInterface> diskInterfaces = 
(ArrayList<DiskInterface>) returnValue;
+                    boolean isOsSupportVirtioScsi = 
diskInterfaces.contains(DiskInterface.VirtIO_SCSI);
 
-            @Override
-            public void onSuccess(Object model, Object returnValue) {
-                getModel().getIsVirtioScsiEnabled().setEntity((Boolean) 
returnValue);
-            }
-        }), vmId);
+                    
getModel().getIsVirtioScsiEnabled().setIsChangable(isOsSupportVirtioScsi);
+
+                    if (!isOsSupportVirtioScsi) {
+                        getModel().getIsVirtioScsiEnabled().setEntity(false);
+                        
getModel().getIsVirtioScsiEnabled().setChangeProhibitionReason(constants.cannotEnableVirtioScsiForOs());
+                    }
+                    else {
+                        if (Guid.isNullOrEmpty(vmId)) {
+                            VDSGroup cluster = getModel().getSelectedCluster();
+                            boolean isVirtioScsiEnabled = (Boolean) 
AsyncDataProvider.getConfigValuePreConverted(
+                                    ConfigurationValues.VirtIoScsiEnabled, 
cluster.getcompatibility_version().getValue());
+                            
getModel().getIsVirtioScsiEnabled().setEntity(isVirtioScsiEnabled);
+                        }
+                        else {
+                            AsyncDataProvider.isVirtioScsiEnabledForVm(new 
AsyncQuery(getModel(), new INewAsyncCallback() {
+                                @Override
+                                public void onSuccess(Object model, Object 
returnValue) {
+                                    
getModel().getIsVirtioScsiEnabled().setEntity((Boolean) returnValue);
+                                }
+                            }), vmId);
+                        }
+                    }
+                }
+            }));
     }
 
     public void vmTypeChanged(VmType vmType) {
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 4a5dd7b..a3e5365 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
@@ -2093,5 +2093,8 @@
 
     @DefaultStringValue("Not available when Templates are not configured.")
     String notAvailableWithNoTemplates();
+
+    @DefaultStringValue("VirtIO-SCSI is not supported for the selected OS")
+    String cannotEnableVirtioScsiForOs();
 }
 


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I0256b84e1c82a6c2330287f1e68385d785d26b26
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Daniel Erez <de...@redhat.com>
_______________________________________________
Engine-patches mailing list
Engine-patches@ovirt.org
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to