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 <[email protected]>
---
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(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/61/23861/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 e8b1d46..37448ee 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
@@ -225,7 +225,7 @@
 
         updateConsoleDevice(getVm().getId());
 
-        updateVirtioScsiEnabled(getVm().getId());
+        updateVirtioScsiEnabled(getVm().getId(), getVm().getVmOsId());
 
         
getModel().getVncKeyboardLayout().setSelectedItem(vm.getDefaultVncKeyboardLayout());
 
@@ -332,6 +332,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 eb0d40c..a19fd7b 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
@@ -290,6 +290,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 2a49abd..4e3876b 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
@@ -123,7 +123,7 @@
             }
 
             updateConsoleDevice(template.getId());
-            updateVirtioScsiEnabled(template.getId());
+            updateVirtioScsiEnabled(template.getId(), template.getOsId());
             updateTimeZone(template.getTimeZone());
 
             // Update domain list
@@ -269,6 +269,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 0ca7408..a91fd1e 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
@@ -129,7 +129,7 @@
 
             updateTimeZone(vmBase.getTimeZone());
             updateConsoleDevice(vmBase.getId());
-            updateVirtioScsiEnabled(vmBase.getId());
+            updateVirtioScsiEnabled(vmBase.getId(), vmBase.getOsId());
 
             // Update domain list
             updateDomain();
@@ -236,6 +236,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 1faf746..85ce2ff 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
@@ -144,6 +144,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 164633d..dd10495 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
@@ -1553,6 +1553,7 @@
             else if (sender == getOSType())
             {
                 oSType_SelectedItemChanged(sender, args);
+                getBehavior().oSType_SelectedItemChanged();
                 getVmInitModel().osTypeChanged(getOSType().getSelectedItem());
                 updateDisplayProtocol();
                 initUsbPolicy();
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 0594171..4e01c3e 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
@@ -13,6 +13,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;
@@ -119,6 +120,8 @@
     public abstract void defaultHost_SelectedItemChanged();
 
     public abstract void provisioning_SelectedItemChanged();
+
+    public abstract void oSType_SelectedItemChanged();
 
     public abstract void updateMinAllocatedMemory();
 
@@ -1141,22 +1144,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 66e6e58..3af87de 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
@@ -2167,5 +2167,8 @@
 
     @DefaultStringValue("In case the vm is stateless, vm will be re-created 
with the LATEST template version")
     String latestTemplateVersionDescription();
+
+    @DefaultStringValue("VirtIO-SCSI is not supported for the selected OS")
+    String cannotEnableVirtioScsiForOs();
 }
 


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

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

Reply via email to