Daniel Erez has uploaded a new change for review.

Change subject: core,restapi: DirectLUN disk - validate LUN visibilty
......................................................................

core,restapi: DirectLUN disk - validate LUN visibilty

Validate LUN visibility on DirectLUN disk creation:

* core
- Added a validation method to DiskValidator that verifies
  visibility of a LUN by querying GetDeviceList.
- Execute the validation on AddDiskCommand only when a host
  is specified in parameters.
- Added relevant AppError messages.

* REST-API
- When optional 'host' element is specified within the
  'lun_storage' element, pass it to the parameters object.
- Updated rsdl yaml accordingly.

Change-Id: I339c999ebdfa69b8e2cbe4f55f8fe12e455810e4
Bug-Url: https://bugzilla.redhat.com/1123754
Buf-Url: https://bugzilla.redhat.com/1096217
Signed-off-by: Daniel Erez <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
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/action/VmDiskOperationParameterBase.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/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java
M 
backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java
M 
frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.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
13 files changed, 169 insertions(+), 0 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/24/31924/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
index 86c41d3..6c7dc35 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddDiskCommand.java
@@ -79,6 +79,7 @@
 
     public AddDiskCommand(T parameters, CommandContext commandContext) {
         super(parameters, commandContext);
+        setVdsId(parameters.getVdsId());
     }
 
 
@@ -167,6 +168,10 @@
             return false;
         }
 
+        if (getVds() != null && !validate(diskValidator.isLunDiskVisible(lun, 
getVds()))) {
+            return false;
+        }
+
         return true;
     }
 
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 ce10244..ce35bb3 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
@@ -2,19 +2,28 @@
 
 import java.util.List;
 
+import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.collections.Predicate;
+import org.ovirt.engine.core.bll.Backend;
 import org.ovirt.engine.core.bll.ValidationResult;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.common.FeatureSupported;
 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.LUNs;
+import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
+import org.ovirt.engine.core.common.interfaces.VDSBrokerFrontend;
 import org.ovirt.engine.core.common.osinfo.OsRepository;
 import org.ovirt.engine.core.common.utils.Pair;
 import org.ovirt.engine.core.common.utils.SimpleDependecyInjector;
+import 
org.ovirt.engine.core.common.vdscommands.GetDeviceListVDSCommandParameters;
+import org.ovirt.engine.core.common.vdscommands.VDSCommandType;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dao.VmDAO;
@@ -137,6 +146,40 @@
         return ValidationResult.VALID;
     }
 
+    /**
+     * Determines whether the specified LUN is visible to the specified host.
+     *
+     * @param lun the LUN to examine.
+     * @param vds the host to query from.
+     *
+     * @return whether the specified lun is visible.
+     */
+    public ValidationResult isLunDiskVisible(final LUNs lun, VDS vds) {
+        List<LUNs> luns = executeGetDeviceList(vds.getId(), lun.getLunType());
+
+        // Search LUN in the device list
+        boolean lunExists = CollectionUtils.exists(luns, new Predicate() {
+            @Override
+            public boolean evaluate(Object o) {
+                return ((LUNs) o).getId().equals(lun.getId());
+            }
+        });
+
+        return lunExists ? ValidationResult.VALID :
+                new 
ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_DISK_LUN_INVALID);
+    }
+
+    @SuppressWarnings("unchecked")
+    public List<LUNs> executeGetDeviceList(Guid vdsId, StorageType 
storageType) {
+        GetDeviceListVDSCommandParameters parameters =
+                new GetDeviceListVDSCommandParameters(vdsId, storageType);
+        return (List<LUNs>) 
getVdsBroker().RunVdsCommand(VDSCommandType.GetDeviceList, 
parameters).getReturnValue();
+    }
+
+    protected VDSBrokerFrontend getVdsBroker() {
+        return Backend.getInstance().getResourceManager();
+    }
+
     private static OsRepository getOsRepository() {
         return SimpleDependecyInjector.getInstance().get(OsRepository.class);
     }
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 3a04198..2e7a1c7 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
@@ -15,6 +15,7 @@
 import java.util.Arrays;
 import java.util.Collections;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Map;
 
 import org.junit.ClassRule;
@@ -40,6 +41,7 @@
 import org.ovirt.engine.core.common.businessentities.StoragePoolStatus;
 import org.ovirt.engine.core.common.businessentities.StorageServerConnections;
 import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VolumeFormat;
@@ -54,6 +56,7 @@
 import org.ovirt.engine.core.dao.StorageDomainDAO;
 import org.ovirt.engine.core.dao.StoragePoolDAO;
 import org.ovirt.engine.core.dao.StoragePoolIsoMapDAO;
+import org.ovirt.engine.core.dao.VdsDAO;
 import org.ovirt.engine.core.dao.VmDAO;
 import org.ovirt.engine.core.dao.network.VmNicDao;
 import org.ovirt.engine.core.utils.MockConfigRule;
@@ -91,6 +94,9 @@
 
     @Mock
     private StoragePoolDAO storagePoolDAO;
+
+    @Mock
+    private VdsDAO vdsDAO;
 
     @Mock
     private OsRepository osRepository;
@@ -448,6 +454,14 @@
         doReturn(MAX_PCI_SLOTS).when(osRepository).getMaxPciDevices(anyInt(), 
any(Version.class));
     }
 
+    private VDS mockVds() {
+        Guid vdsId = Guid.newGuid();
+        VDS vds = new VDS();
+        vds.setId(vdsId);
+        when(vdsDAO.get(vdsId)).thenReturn(vds);
+        return vds;
+    }
+
     /**
      * Mock a {@link StoragePool}.
      *
@@ -656,6 +670,51 @@
     }
 
     @Test
+    public void testLunDiskValid() {
+        VDS vds = mockVds();
+        LunDisk disk = createISCSILunDisk();
+        disk.setDiskInterface(DiskInterface.VirtIO);
+
+        AddDiskParameters parameters = createParameters();
+        parameters.setDiskInfo(disk);
+        parameters.setVdsId(vds.getId());
+        initializeCommand(Guid.newGuid(), parameters);
+        command.setVds(vds);
+
+        mockVm();
+        mockMaxPciSlots();
+        mockInterfaceList();
+
+        List<LUNs> luns = Collections.singletonList(disk.getLun());
+        DiskValidator diskValidator = spyDiskValidator(disk);
+        
doReturn(luns).when(diskValidator).executeGetDeviceList(any(Guid.class), 
any(StorageType.class));
+        CanDoActionTestUtils.runAndAssertCanDoActionSuccess(command);
+    }
+
+    @Test
+    public void testLunDiskInvalid() {
+        VDS vds = mockVds();
+        LunDisk disk = createISCSILunDisk();
+        disk.setDiskInterface(DiskInterface.VirtIO);
+
+        AddDiskParameters parameters = createParameters();
+        parameters.setDiskInfo(disk);
+        parameters.setVdsId(vds.getId());
+        initializeCommand(Guid.newGuid(), parameters);
+        command.setVds(vds);
+
+        mockVm();
+        mockMaxPciSlots();
+        mockInterfaceList();
+
+        List<LUNs> luns = Collections.emptyList();
+        DiskValidator diskValidator = spyDiskValidator(disk);
+        
doReturn(luns).when(diskValidator).executeGetDeviceList(any(Guid.class), 
any(StorageType.class));
+        CanDoActionTestUtils.runAndAssertCanDoActionFailure(command,
+                VdcBllMessages.ACTION_TYPE_FAILED_DISK_LUN_INVALID);
+    }
+
+    @Test
     public void testAddingIDELunExceedsSlotLimit() {
         mockInterfaceList();
         LunDisk disk = createISCSILunDisk();
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 e9c918a..f26cd6c 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
@@ -3,6 +3,7 @@
 import static org.hamcrest.CoreMatchers.both;
 import static org.hamcrest.CoreMatchers.hasItem;
 import static org.junit.Assert.assertThat;
+import static org.mockito.Matchers.any;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.when;
@@ -11,6 +12,7 @@
 import static 
org.ovirt.engine.core.bll.validator.ValidationResultMatchers.replacements;
 
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.LinkedList;
 import java.util.List;
 
@@ -22,8 +24,11 @@
 import org.ovirt.engine.core.common.businessentities.Disk;
 import org.ovirt.engine.core.common.businessentities.DiskImage;
 import org.ovirt.engine.core.common.businessentities.DiskInterface;
+import org.ovirt.engine.core.common.businessentities.LUNs;
 import org.ovirt.engine.core.common.businessentities.LunDisk;
 import org.ovirt.engine.core.common.businessentities.ScsiGenericIO;
+import org.ovirt.engine.core.common.businessentities.StorageType;
+import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VMStatus;
 import org.ovirt.engine.core.common.businessentities.VmDevice;
@@ -55,6 +60,10 @@
 
     private static LunDisk createLunDisk() {
         LunDisk disk = new LunDisk();
+        LUNs lun = new LUNs();
+        lun.setLUN_id("lun_id");
+        lun.setLunType(StorageType.ISCSI);
+        disk.setLun(lun);
         return disk;
     }
 
@@ -64,6 +73,13 @@
         vm.setId(Guid.newGuid());
         vm.setVmOs(1);
         return vm;
+    }
+
+    private VDS createVds() {
+        Guid vdsId = Guid.newGuid();
+        VDS vds = new VDS();
+        vds.setId(vdsId);
+        return vds;
     }
 
     private void initializeOsRepository (int osId, DiskInterface 
diskInterface) {
@@ -199,4 +215,26 @@
         lunDisk.setDiskInterface(DiskInterface.IDE);
         assertThat(lunValidator.isReadOnlyPropertyCompatibleWithInterface(), 
isValid());
     }
+
+    public void lunDiskValid() {
+        VDS vds = createVds();
+        setupForLun();
+
+        List<LUNs> luns = Collections.singletonList(lunDisk.getLun());
+        
doReturn(luns).when(lunValidator).executeGetDeviceList(any(Guid.class), 
any(StorageType.class));
+
+        assertThat(lunValidator.isLunDiskVisible(lunDisk.getLun(), vds), 
isValid());
+    }
+
+    @Test
+    public void lunDiskInvalid() {
+        VDS vds = createVds();
+        setupForLun();
+
+        List<LUNs> luns = Collections.emptyList();
+        
doReturn(luns).when(lunValidator).executeGetDeviceList(any(Guid.class), 
any(StorageType.class));
+
+        assertThat(lunValidator.isLunDiskVisible(lunDisk.getLun(), vds),
+                failsWith(VdcBllMessages.ACTION_TYPE_FAILED_DISK_LUN_INVALID));
+    }
 }
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmDiskOperationParameterBase.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmDiskOperationParameterBase.java
index c6d5f20..9a5bdff 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmDiskOperationParameterBase.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/action/VmDiskOperationParameterBase.java
@@ -12,6 +12,7 @@
     @Valid
     private Disk diskInfo;
     private Guid snapshotId;
+    private Guid vdsId;
 
     public VmDiskOperationParameterBase() {
     }
@@ -36,4 +37,12 @@
     public void setSnapshotId(Guid snapshotId) {
         this.snapshotId = snapshotId;
     }
+
+    public Guid getVdsId() {
+        return vdsId;
+    }
+
+    public void setVdsId(Guid vdsId) {
+        this.vdsId = vdsId;
+    }
 }
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 40c727b..ba3d76f 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
@@ -202,6 +202,7 @@
     ACTION_TYPE_FAILED_DISK_LUN_IS_ALREADY_IN_USE(ErrorType.CONFLICT),
     ACTION_TYPE_FAILED_DISK_LUN_HAS_NO_VALID_TYPE(ErrorType.CONFLICT),
     
ACTION_TYPE_FAILED_DISK_LUN_ISCSI_MISSING_CONNECTION_PARAMS(ErrorType.CONFLICT),
+    ACTION_TYPE_FAILED_DISK_LUN_INVALID(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_UNSUPPORTED_DISK_STORAGE_TYPE(ErrorType.BAD_PARAMETERS),
     ACTION_TYPE_FAILED_STORAGE_DOMAIN_UNAVAILABLE(ErrorType.BAD_PARAMETERS),
     
ACTION_TYPE_FAILED_STORAGE_DOMAIN_TYPE_UNSUPPORTED(ErrorType.BAD_PARAMETERS),
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 4ef90d7..6c96af4 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -215,6 +215,7 @@
 ACTION_TYPE_FAILED_DISK_LUN_IS_ALREADY_IN_USE=Cannot ${action} ${type}. The 
provided lun is used by another disk.
 ACTION_TYPE_FAILED_DISK_LUN_HAS_NO_VALID_TYPE=Cannot ${action} ${type}. The 
provided lun has no valid lun type.
 ACTION_TYPE_FAILED_DISK_LUN_ISCSI_MISSING_CONNECTION_PARAMS=Cannot ${action} 
${type}. The provided lun is missing at least one connection parameter 
(address/port/iqn).
+ACTION_TYPE_FAILED_DISK_LUN_INVALID=Cannot ${action} ${type}. The provided LUN 
is not visible by the specified host, please check storage server connectivity.
 ACTION_TYPE_FAILED_MIGRATION_IN_PROGRESS=Cannot ${action} ${type}. VM 
migration is in progress
 ACTION_TYPE_FAILED_MIGRATION_TO_SAME_HOST=Cannot ${action} ${type}. source and 
destination is the same.
 ACTION_TYPE_FAILED_INVALID_CUSTOM_PROPERTIES_INVALID_SYNTAX=Cannot ${action} 
${type} if custom properties are in invalid format. Please check the input.
diff --git 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
index 9a07e14..1f653d6 100644
--- 
a/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
+++ 
b/backend/manager/modules/restapi/interface/definition/src/main/resources/rsdl_metadata.yaml
@@ -707,6 +707,7 @@
           disk.wipe_after_delete: xs:boolean
           disk.quota.id: xs:string
           disk.sgio: xs:string
+          disk.lun_storage.host: xs:string
         description: add a new direct lun disk to the virtual machine, this 
operation does not require size but needs lun connection details
       - mandatoryArguments: {disk.id: 'xs:string'}
         optionalArguments:
@@ -1203,6 +1204,7 @@
           disk.wipe_after_delete: xs:boolean
           disk.quota.id: xs:string
           disk.sgio: xs:string
+          disk.lun_storage.host: xs:string
         description: add a new lun disk to the system, this operation does not 
require size but requires lun connection details
     urlparams: {}
     headers:
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java
index c362a14..309d099 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendDisksResource.java
@@ -43,6 +43,9 @@
                 params.setStorageDomainId(storageDomainId);
             }
         }
+        if (disk.isSetLunStorage() && disk.getLunStorage().isSetHost()) {
+            params.setVdsId(getHostId(disk.getLunStorage().getHost()));
+        }
         return performCreate(VdcActionType.AddDisk, params,
                 new QueryIdResolver<Guid>(VdcQueryType.GetDiskByDiskId, 
IdQueryParameters.class));
     }
diff --git 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java
 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java
index 1ad93fc..18d53ba 100644
--- 
a/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java
+++ 
b/backend/manager/modules/restapi/jaxrs/src/main/java/org/ovirt/engine/api/restapi/resource/BackendVmDisksResource.java
@@ -150,6 +150,9 @@
         if (disk.isSetActive()) {
             parameters.setPlugDiskToVm(disk.isActive());
         }
+        if (disk.isSetLunStorage() && disk.getLunStorage().isSetHost()) {
+            parameters.setVdsId(getHostId(disk.getLunStorage().getHost()));
+        }
         return parameters;
     }
 
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 a20e541..c415473 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
@@ -583,6 +583,9 @@
     @DefaultStringValue("Cannot ${action} ${type}. The provided lun is missing 
at least one connection parameter (address/port/iqn).")
     String ACTION_TYPE_FAILED_DISK_LUN_ISCSI_MISSING_CONNECTION_PARAMS();
 
+    @DefaultStringValue("Cannot ${action} ${type}. The provided LUN is not 
visible by the specified host, please check storage server connectivity.")
+    String ACTION_TYPE_FAILED_DISK_LUN_INVALID();
+
     @DefaultStringValue("Cannot ${action} ${type}. source and destination is 
the same.")
     String ACTION_TYPE_FAILED_MIGRATION_TO_SAME_HOST();
 
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 f592fd7..a88a9d2 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
@@ -208,6 +208,7 @@
 ACTION_TYPE_FAILED_DISK_LUN_IS_ALREADY_IN_USE=Cannot ${action} ${type}. The 
provided lun is used by another disk.
 ACTION_TYPE_FAILED_DISK_LUN_HAS_NO_VALID_TYPE=Cannot ${action} ${type}. The 
provided lun has no valid lun type.
 ACTION_TYPE_FAILED_DISK_LUN_ISCSI_MISSING_CONNECTION_PARAMS=Cannot ${action} 
${type}. The provided lun is missing at least one connection parameter 
(address/port/iqn).
+ACTION_TYPE_FAILED_DISK_LUN_INVALID=Cannot ${action} ${type}. The provided LUN 
is not visible by the specified host, please check storage server connectivity.
 ACTION_TYPE_FAILED_MIGRATION_IN_PROGRESS=Cannot ${action} ${type}. VM 
migration is in progress
 ACTION_TYPE_FAILED_MIGRATION_TO_SAME_HOST=Cannot ${action} ${type}. source and 
destination is the same.
 ACTION_TYPE_FAILED_INVALID_CUSTOM_PROPERTIES_INVALID_SYNTAX=Cannot ${action} 
${type} if custom properties are in invalid format. Please check the input.
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 bace5c8..f9cf400 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
@@ -212,6 +212,7 @@
 ACTION_TYPE_FAILED_OVF_CONFIGURATION_NOT_SUPPORTED=Cannot ${action} ${type}. 
The OVF configuration could not be parsed.
 ACTION_TYPE_FAILED_DISK_LUN_HAS_NO_VALID_TYPE=Cannot ${action} ${type}. The 
provided lun has no valid lun type.
 ACTION_TYPE_FAILED_DISK_LUN_ISCSI_MISSING_CONNECTION_PARAMS=Cannot ${action} 
${type}. The provided lun is missing at least one connection parameter 
(address/port/iqn).
+ACTION_TYPE_FAILED_DISK_LUN_INVALID=Cannot ${action} ${type}. The provided LUN 
is not visible by the specified host, please check storage server connectivity.
 ACTION_TYPE_FAILED_DISK_LUN_IS_ALREADY_IN_USE=Cannot ${action} ${type}. The 
provided lun is used by another disk.
 ACTION_TYPE_FAILED_MIGRATION_IN_PROGRESS=Cannot ${action} ${type}. VM 
migration is in progress
 ACTION_TYPE_FAILED_MIGRATION_TO_SAME_HOST=Cannot ${action} ${type}. source and 
destination is the same.


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

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

Reply via email to