Daniel Erez has uploaded a new change for review.

Change subject: core: allow read-only for VirtIO-SCSI DirectLUN disks
......................................................................

core: allow read-only for VirtIO-SCSI DirectLUN disks

In order to support read-only property for VirtIO-SCSI
DirectLUN disks, the device type for such disks should
be 'disk' (SCSI emulation) instead of 'lun' (SCSI passthrough).
I.e. representation in the domain xml sent to libvirt should
look like [1] instead of [2].

Note that this limitation (enabling passthrough for read-only
VirtIO-SCSI DirectLUN disks) could be removed once 'Support
read only VirtIO-SCSI direct LUNs in QEMU' bug [3] is resolved.

[1] <disk type='block' device='disk'>...</disk>
[2] <disk type='block' device='lun'>...</disk>
[3] https://bugzilla.redhat.com/1110396

Change-Id: Ic317722be9ef8978b50352c12bc06ea8c906dcd0
Bug-Url: https://bugzilla.redhat.com/1118847
Signed-off-by: Daniel Erez <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java
M 
backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
M 
frontend/webadmin/modules/uicommonweb/src/main/java/org/ovirt/engine/ui/uicommonweb/models/vms/AbstractDiskModel.java
M 
frontend/webadmin/modules/uicompat/src/main/java/org/ovirt/engine/ui/uicompat/UIConstants.java
M 
frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
M 
frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
12 files changed, 73 insertions(+), 25 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/23/30123/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java
index 772d6d1..2eb1a40 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/validator/DiskValidator.java
@@ -8,6 +8,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.DiskInterface;
+import org.ovirt.engine.core.common.businessentities.ScsiGenericIO;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
@@ -42,6 +43,11 @@
         if (disk.getSgio() != null) {
             if (DiskStorageType.IMAGE == disk.getDiskStorageType()) {
                 return new 
ValidationResult(VdcBllMessages.SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK);
+            }
+
+            // Unfiltered SCSI Generic IO is not supported for read-only disks
+            if (disk.getSgio() == ScsiGenericIO.UNFILTERED && 
Boolean.TRUE.equals(disk.getReadOnly())) {
+                return new 
ValidationResult(VdcBllMessages.UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK);
             }
         }
 
@@ -102,8 +108,7 @@
     public ValidationResult isReadOnlyPropertyCompatibleWithInterface() {
         if (Boolean.TRUE.equals(disk.getReadOnly())) {
             DiskInterface diskInterface = disk.getDiskInterface();
-            if (diskInterface == DiskInterface.IDE ||
-                    (diskInterface == DiskInterface.VirtIO_SCSI  && 
disk.getDiskStorageType() == DiskStorageType.LUN )) {
+            if (diskInterface == DiskInterface.IDE) {
                 return new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_DOES_NOT_SUPPORT_READ_ONLY_ATTR,
                         String.format("$interface %1$s", diskInterface));
             }
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
index f14691b..313ede0 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/AddDiskToVmCommandTest.java
@@ -769,6 +769,32 @@
     }
 
     @Test
+    public void testReadOnlyDiskWithUnfilteredSgioCantBeAdded() {
+        LunDisk disk = createISCSILunDisk();
+        disk.setDiskInterface(DiskInterface.VirtIO_SCSI);
+        disk.setSgio(ScsiGenericIO.UNFILTERED);
+        disk.setReadOnly(true);
+
+        AddDiskParameters parameters = createParameters();
+        parameters.setDiskInfo(disk);
+
+        Guid storageId = Guid.newGuid();
+        initializeCommand(storageId, parameters);
+        mockStorageDomain(storageId);
+        mockStoragePoolIsoMap();
+
+        VM vm = mockVm();
+        vm.setVdsGroupCompatibilityVersion(Version.v3_3);
+        mockMaxPciSlots();
+
+        DiskValidator diskValidator = spyDiskValidator(disk);
+        
doReturn(true).when(diskValidator).isVirtioScsiControllerAttached(any(Guid.class));
+
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command,
+                
VdcBllMessages.UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK);
+    }
+
+    @Test
     public void testLunDiskWithSgioCanBeAdded() {
         LunDisk disk = createISCSILunDisk();
         disk.setDiskInterface(DiskInterface.VirtIO_SCSI);
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java
index dee52b2..6ef3c1f 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/validator/DiskValidatorTest.java
@@ -164,14 +164,6 @@
         assertThat(validator.isReadOnlyPropertyCompatibleWithInterface(),
                 
both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_DOES_NOT_SUPPORT_READ_ONLY_ATTR)).
                         and(replacements(hasItem(String.format("$interface 
%1$s", DiskInterface.IDE)))));
-
-
-        setupForLun();
-        lunDisk.setReadOnly(true);
-        lunDisk.setDiskInterface(DiskInterface.VirtIO_SCSI);
-        assertThat(lunValidator.isReadOnlyPropertyCompatibleWithInterface(),
-                
both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_INTERFACE_DOES_NOT_SUPPORT_READ_ONLY_ATTR)).
-                        and(replacements(hasItem(String.format("$interface 
%1$s", DiskInterface.VirtIO_SCSI)))));
     }
 
     @Test
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
index 910f1bd..69714fa 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllMessages.java
@@ -776,6 +776,7 @@
     DISK_IS_ALREADY_SHARED_BETWEEN_VMS(ErrorType.CONFLICT),
     VM_CANNOT_RUN_FROM_DISK_WITHOUT_PLUGGED_DISK(ErrorType.CONFLICT),
     SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK(ErrorType.NOT_SUPPORTED),
+    
UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK(ErrorType.NOT_SUPPORTED),
     
VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL(ErrorType.INCOMPATIBLE_VERSION),
     CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED(ErrorType.CONFLICT),
     CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS(ErrorType.CONFLICT),
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
index d9184d7..e163734 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -962,6 +962,7 @@
 ERROR_CANNOT_DETACH_DISK_WITH_SNAPSHOT=Cannot ${action} ${type}. The disk is 
already configured in a snapshot. In order to detach it, remove the disk's 
snapshots.
 DISK_IS_ALREADY_SHARED_BETWEEN_VMS=Cannot ${action} ${type}. Disk is shared 
between vms and cannot become unshareable . Detach the disk from the rest of 
the vms it is attached to and then update the disk to be unshareable.
 SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK="Cannot ${action} ${type}. 
SCSI Generic IO is not supported for image disk."
+UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK="Cannot 
${action} ${type}. Unfiltered SCSI Generic IO is not applicable for a read-only 
disk."
 VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL=Virtio-SCSI interface 
is only available on cluster level 3.3 or higher.
 CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED=Cannot ${action} ${type}. 
VirtIO-SCSI is disabled for the VM
 CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS=Cannot disable VirtIO-SCSI when disks 
with a VirtIO-SCSI interface are plugged into the VM.
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java
index 9f92325..f26f360 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/HotPlugDiskVDSCommand.java
@@ -68,7 +68,10 @@
             drive.put(VdsProperties.PropagateErrors, 
disk.getPropagateErrors().toString().toLowerCase());
         } else {
             LunDisk lunDisk = (LunDisk) disk;
-            drive.put(VdsProperties.Device, VmDeviceType.LUN.getName());
+            boolean isVirtioScsi = 
getParameters().getDisk().getDiskInterface() == DiskInterface.VirtIO_SCSI;
+            boolean isReadonly = Boolean.TRUE.equals(vmDevice.getIsReadOnly());
+            drive.put(VdsProperties.Device, isVirtioScsi && isReadonly ?
+                    VmDeviceType.DISK.getName(): VmDeviceType.LUN.getName());
             drive.put(VdsProperties.Guid, lunDisk.getLun().getLUN_id());
             drive.put(VdsProperties.Format, 
VolumeFormat.RAW.toString().toLowerCase());
             drive.put(VdsProperties.PropagateErrors, 
PropagateErrors.Off.toString()
diff --git 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
index 4896f77..4d9306b 100644
--- 
a/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
+++ 
b/backend/manager/modules/vdsbroker/src/main/java/org/ovirt/engine/core/vdsbroker/vdsbroker/VmInfoBuilder.java
@@ -286,7 +286,9 @@
                     break;
                 case VirtIO_SCSI:
                     struct.put(VdsProperties.INTERFACE, VdsProperties.Scsi);
-                    if (disk.getDiskStorageType() == DiskStorageType.LUN) {
+                    // Enabling SCSI pass-through (by using 'lun' tag) only 
for read/write disks
+                    // to avoid conflict with read-only disks.
+                    if (disk.getDiskStorageType() == DiskStorageType.LUN && 
!Boolean.TRUE.equals(vmDevice.getIsReadOnly())) {
                         struct.put(VdsProperties.Device, 
VmDeviceType.LUN.getName());
                         struct.put(VdsProperties.Sgio, 
disk.getSgio().toString().toLowerCase());
                     }
diff --git 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
index b5e2f02..fe4e2d1 100644
--- 
a/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
+++ 
b/frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java
@@ -2619,6 +2619,9 @@
     @DefaultStringValue("Cannot ${action} ${type}. SCSI Generic IO is not 
supported for image disk.")
     String SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK();
 
+    @DefaultStringValue("Cannot ${action} ${type}. Unfiltered SCSI Generic IO 
is not applicable for a read-only disk.")
+    String UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK();
+
     @DefaultStringValue("VirtIO-SCSI interface is only available on cluster 
level 3.3 or higher.")
     String VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL();
 
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 68cf26a..2ed642f 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
@@ -284,9 +284,11 @@
 
         setIsReadOnly(new EntityModel<Boolean>());
         getIsReadOnly().setEntity(false);
+        getIsReadOnly().getEntityChangedEvent().addListener(this);
 
         setIsSgIoUnfiltered(new EntityModel<Boolean>());
         getIsSgIoUnfiltered().setIsAvailable(false);
+        getIsSgIoUnfiltered().getEntityChangedEvent().addListener(this);
 
         setIsDirectLunDiskAvaialable(new EntityModel<Boolean>());
         getIsDirectLunDiskAvaialable().setEntity(true);
@@ -655,8 +657,14 @@
         DiskInterface diskInterface = getDiskInterface().getSelectedItem();
         getIsSgIoUnfiltered().setIsAvailable(!isInternal && 
DiskInterface.VirtIO_SCSI.equals(diskInterface));
 
+        updateSgIoUnfilteredChangeability();
         updateReadOnlyChangeability();
         updatePlugChangeability();
+    }
+
+    protected void updateSgIoUnfilteredChangeability() {
+        getIsSgIoUnfiltered().setIsChangable(!getIsReadOnly().getEntity());
+        
getIsSgIoUnfiltered().setChangeProhibitionReason(CONSTANTS.cannotEnableUnfilteredSGIOForLunReadOnlyDisk());
     }
 
     protected void updateReadOnlyChangeability() {
@@ -670,7 +678,8 @@
         }
 
         boolean isDirectLUN = 
Boolean.FALSE.equals(getIsInternal().getEntity());
-        if (diskInterface == DiskInterface.VirtIO_SCSI && isDirectLUN) {
+        boolean isSgIoUnfiltered = 
Boolean.TRUE.equals(getIsSgIoUnfiltered().getEntity());
+        if (diskInterface == DiskInterface.VirtIO_SCSI && isDirectLUN && 
isSgIoUnfiltered) {
             
getIsReadOnly().setChangeProhibitionReason(CONSTANTS.cannotEnableVirtIoScsiInterfaceForLunReadOnlyDisk());
             getIsReadOnly().setIsChangable(false);
             getIsReadOnly().setEntity(false);
@@ -898,17 +907,18 @@
     public void eventRaised(Event ev, Object sender, EventArgs args) {
         super.eventRaised(ev, sender, args);
 
-        if (ev.matchesDefinition(EntityModel.entityChangedEventDefinition) && 
sender == getIsWipeAfterDelete())
-        {
-            wipeAfterDelete_EntityChanged(args);
-        }
-        else if 
(ev.matchesDefinition(EntityModel.entityChangedEventDefinition) && sender == 
getIsAttachDisk())
-        {
-            attachDisk_EntityChanged(args);
-        }
-        else if (ev.matchesDefinition(ListModel.entityChangedEventDefinition) 
&& sender == getIsInternal())
-        {
-            isInternal_EntityChanged();
+        if (ev.matchesDefinition(EntityModel.entityChangedEventDefinition)) {
+            if (sender == getIsWipeAfterDelete()) {
+                wipeAfterDelete_EntityChanged(args);
+            } else if (sender == getIsAttachDisk()) {
+                attachDisk_EntityChanged(args);
+            } else if (sender == getIsReadOnly()) {
+                updateSgIoUnfilteredChangeability();
+            } else if (sender == getIsSgIoUnfiltered()) {
+                updateReadOnlyChangeability();
+            } else if (sender == getIsInternal()) {
+                isInternal_EntityChanged();
+            }
         }
         else if 
(ev.matchesDefinition(ListModel.selectedItemChangedEventDefinition) && sender 
== getVolumeType())
         {
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 ab3bfbb..98f61af 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
@@ -2254,9 +2254,12 @@
     @DefaultStringValue("An IDE disk can't be read-only.")
     String cannotEnableIdeInterfaceForReadOnlyDisk();
 
-    @DefaultStringValue("A VirtIO-ISCSI direct LUN disk can't be read-only.")
+    @DefaultStringValue("A VirtIO-ISCSI direct LUN disk can't be set as 
read-only when privileged SCSI I/O is allowed.")
     String cannotEnableVirtIoScsiInterfaceForLunReadOnlyDisk();
 
+    @DefaultStringValue("Privileged SCSI I/O is not supported for read-only 
disks.")
+    String cannotEnableUnfilteredSGIOForLunReadOnlyDisk();
+
     @DefaultStringValue("Global Maintenance Enabled")
     String haGlobalMaintenance();
 
diff --git 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 66de685..ac216f9 100644
--- 
a/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/userportal-gwtp/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -922,6 +922,7 @@
 ERROR_CANNOT_DETACH_DISK_WITH_SNAPSHOT=Cannot ${action} ${type}. The disk is 
already configured in a snapshot. In order to detach it, remove the disk's 
snapshots.
 DISK_IS_ALREADY_SHARED_BETWEEN_VMS=Cannot ${action} ${type}. Disk is shared 
between vms and cannot become unshareable . Detach the disk from the rest of 
the vms it is attached to and then update the disk to be unshareable.
 SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK="Cannot ${action} ${type}. 
SCSI Generic IO is not supported for image disk."
+UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK="Cannot 
${action} ${type}. Unfiltered SCSI Generic IO is not applicable for a read-only 
disk."
 VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL=Virtio-SCSI interface 
is only available on cluster level 3.3 or higher.
 CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED=Cannot ${action} ${type}. 
VirtIO-SCSI is disabled for the VM
 CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS=Cannot disable VirtIO-SCSI when disks 
with a VirtIO-SCSI interface are plugged into the VM.
diff --git 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
index 70b292d..260ffab 100644
--- 
a/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
+++ 
b/frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties
@@ -962,6 +962,7 @@
 ERROR_CANNOT_DETACH_DISK_WITH_SNAPSHOT=Cannot ${action} ${type}. The disk is 
already configured in a snapshot. In order to detach it, remove the disk's 
snapshots.
 DISK_IS_ALREADY_SHARED_BETWEEN_VMS=Cannot ${action} ${type}. Disk is shared 
between vms and cannot become unshareable . Detach the disk from the rest of 
the vms it is attached to and then update the disk to be unshareable.
 SCSI_GENERIC_IO_IS_NOT_SUPPORTED_FOR_IMAGE_DISK="Cannot ${action} ${type}. 
SCSI Generic IO is not supported for image disk."
+UNFILTERED_SCSI_GENERIC_IO_IS_NOT_APPLICABLE_FOR_READ_ONLY_DISK="Cannot 
${action} ${type}. Unfiltered SCSI Generic IO is not applicable for a read-only 
disk."
 VIRTIO_SCSI_INTERFACE_IS_NOT_AVAILABLE_FOR_CLUSTER_LEVEL=Virtio-SCSI interface 
is only available on cluster level 3.3 or higher.
 CANNOT_PERFORM_ACTION_VIRTIO_SCSI_IS_DISABLED=Cannot ${action} ${type}. 
VirtIO-SCSI is disabled for the VM
 CANNOT_DISABLE_VIRTIO_SCSI_PLUGGED_DISKS=Cannot disable VirtIO-SCSI when disks 
with a VirtIO-SCSI interface are plugged into the VM.


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ic317722be9ef8978b50352c12bc06ea8c906dcd0
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