Muli Salem has uploaded a new change for review.

Change subject: engine: Fail Import Vm on MAC Address (#872100, WIP)
......................................................................

engine: Fail Import Vm on MAC Address (#872100, WIP)

This patch changes the VmInterfaceManager to throw
a VdcBllExpection when trying to add a interface with
a used MAC address.

It also adds a new VdcBllError for this case, and changes
the VmInterfaceManagerTest according to the change in
behavior.

Change-Id: I68d37ed183adb4adf8abf8b11332f6c822f8c4c0
Bug-Url: https://bugzilla.redhat.com/872100
Signed-off-by: Muli Salem <msa...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
M 
backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
M backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
M 
backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
M backend/manager/modules/utils/src/test/resources/AppErrors.properties
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
11 files changed, 108 insertions(+), 45 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/44/9144/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
index 8d373c9..c274f68 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/ImportVmCommand.java
@@ -14,13 +14,13 @@
 import org.ovirt.engine.core.bll.command.utils.StorageDomainSpaceChecker;
 import org.ovirt.engine.core.bll.job.ExecutionHandler;
 import org.ovirt.engine.core.bll.network.VmInterfaceManager;
+import org.ovirt.engine.core.bll.quota.Quotable;
 import org.ovirt.engine.core.bll.quota.StorageQuotaValidationParameter;
 import org.ovirt.engine.core.bll.snapshots.SnapshotsManager;
+import org.ovirt.engine.core.bll.utils.PermissionSubject;
 import org.ovirt.engine.core.bll.utils.VmDeviceUtils;
 import org.ovirt.engine.core.bll.validator.StorageDomainValidator;
 import org.ovirt.engine.core.common.AuditLogType;
-import org.ovirt.engine.core.bll.utils.PermissionSubject;
-import org.ovirt.engine.core.bll.quota.Quotable;
 import org.ovirt.engine.core.common.VdcObjectType;
 import org.ovirt.engine.core.common.action.ImportVmParameters;
 import org.ovirt.engine.core.common.action.MoveOrCopyImageGroupParameters;
@@ -91,6 +91,7 @@
     private List<DiskImage> imageList;
     private List<Guid> diskGuidList = new ArrayList<Guid>();
     private List<Guid> imageGuidList = new ArrayList<Guid>();
+    private List<String> macsAdded = new ArrayList<String>();
 
     public ImportVmCommand(ImportVmParameters parameters) {
         super(parameters);
@@ -820,8 +821,6 @@
         AuditLogDirector.log(logable, AuditLogType.VM_IMPORT_INFO);
     }
 
-    protected boolean macAdded = false;
-
     protected void addVmInterfaces() {
         VmInterfaceManager vmInterfaceManager = new VmInterfaceManager();
         List<String> invalidNetworkNames = new ArrayList<String>();
@@ -837,7 +836,9 @@
                 iface.setNetworkName(StringUtils.EMPTY);
             }
 
-            macAdded = vmInterfaceManager.add(iface, getCompensationContext(), 
getParameters().isImportAsNewEntity());
+            if (vmInterfaceManager.add(iface, getCompensationContext(), 
getParameters().isImportAsNewEntity())) {
+                macsAdded.add(iface.getMacAddress());
+            }
         }
 
         auditInvalidInterfaces(invalidNetworkNames, invalidIfaceNames);
@@ -910,7 +911,7 @@
     }
 
     protected void removeVmNetwork() {
-        new VmInterfaceManager().removeAll(macAdded, getVmId());
+        new VmInterfaceManager().removeAllInterfacesAndMacsFromList(getVmId(), 
macsAdded);
     }
 
     protected void endImportCommand() {
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
index cc9abc9..23fdea1 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/VmInterfaceManager.java
@@ -10,6 +10,8 @@
 import org.ovirt.engine.core.common.businessentities.Network;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
+import org.ovirt.engine.core.common.errors.VdcBLLException;
+import org.ovirt.engine.core.common.errors.VdcBllErrors;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.DbFacade;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
@@ -19,6 +21,8 @@
 import org.ovirt.engine.core.dao.VmNetworkStatisticsDAO;
 import org.ovirt.engine.core.utils.log.Log;
 import org.ovirt.engine.core.utils.log.LogFactory;
+import org.ovirt.engine.core.utils.transaction.TransactionMethod;
+import org.ovirt.engine.core.utils.transaction.TransactionSupport;
 
 /**
  * Helper class to use for adding/removing {@link VmNetworkInterface}s.
@@ -36,16 +40,15 @@
      *            Used to snapshot the saved entities.
      * @return <code>true</code> if the MAC wasn't used, <code>false</code> if 
it was.
      */
-    public boolean add(VmNetworkInterface iface, CompensationContext 
compensationContext, boolean allocateMac) {
+    public boolean add(final VmNetworkInterface iface, CompensationContext 
compensationContext, boolean allocateMac) {
         boolean macAdded = false;
         if (allocateMac) {
             iface.setMacAddress(getMacPoolManager().allocateNewMac());
             macAdded = true;
         } else if (getMacPoolManager().IsMacInUse(iface.getMacAddress())) {
-            AuditLogableBase logable = new AuditLogableBase();
-            logable.AddCustomValue("MACAddr", iface.getMacAddress());
-            logable.AddCustomValue("VmName", iface.getVmName());
-            log(logable, AuditLogType.MAC_ADDRESS_IS_IN_USE);
+            auditLogMacInUse(iface);
+            log.errorFormat("VmInterfaceManager::Mac {0} is in use.", 
iface.getMacAddress());
+            throw new VdcBLLException(VdcBllErrors.MAC_ADDRESS_IS_IN_USE);
         } else {
             macAdded = getMacPoolManager().AddMac(iface.getMacAddress());
         }
@@ -57,22 +60,31 @@
         return macAdded;
     }
 
+    // This method is protected for test purposes
+    protected void auditLogMacInUse(final VmNetworkInterface iface) {
+        TransactionSupport.executeInNewTransaction(new 
TransactionMethod<Void>() {
+            @Override
+            public Void runInTransaction() {
+                AuditLogableBase logable = new AuditLogableBase();
+                logable.AddCustomValue("MACAddr", iface.getMacAddress());
+                logable.AddCustomValue("VmName", iface.getVmName());
+                log(logable, AuditLogType.MAC_ADDRESS_IS_IN_USE);
+                return null;
+            }
+        });
+    }
+
     /**
-     * Remove all {@link VmNetworkInterface}s from the VM, removing from 
{@link MacPoolManager} if required.
+     * Remove all {@link VmNetworkInterface}s from the VM, and remove the Mac 
addresses from {@link MacPoolManager}.
      *
-     * @param removeFromMacPool
-     *            Should the MAC be removed from {@link MacPoolManager}?
      * @param vmId
      *            The ID of the VM to remove from.
      */
-    public void removeAll(boolean removeFromMacPool, Guid vmId) {
+    public void removeAllInterfacesAndMacs(Guid vmId) {
         List<VmNetworkInterface> interfaces = 
getVmNetworkInterfaceDAO().getAllForVm(vmId);
         if (interfaces != null) {
             for (VmNetworkInterface iface : interfaces) {
-                if (removeFromMacPool) {
-                    getMacPoolManager().freeMac(iface.getMacAddress());
-                }
-
+                getMacPoolManager().freeMac(iface.getMacAddress());
                 getVmNetworkInterfaceDAO().remove(iface.getId());
                 getVmNetworkStatisticsDAO().remove(iface.getId());
             }
@@ -80,6 +92,27 @@
     }
 
     /**
+     * Remove all {@link VmNetworkInterface}s from the VM, and the Macs in the 
list from {@link MacPoolManager}.
+     *
+     * @param macsToRemove
+     *            The list of Mac addresses to remove from {@link 
MacPoolManager}
+     * @param vmId
+     *            The ID of the VM to remove from.
+     */
+    public void removeAllInterfacesAndMacsFromList(Guid vmId, List<String> 
macsToRemove) {
+        List<VmNetworkInterface> interfaces = 
getVmNetworkInterfaceDAO().getAllForVm(vmId);
+        if (interfaces != null) {
+            for (VmNetworkInterface iface : interfaces) {
+                getVmNetworkInterfaceDAO().remove(iface.getId());
+                getVmNetworkStatisticsDAO().remove(iface.getId());
+            }
+        }
+        for (String macAddress : macsToRemove) {
+            getMacPoolManager().freeMac(macAddress);
+        }
+    }
+
+    /**
      * Checks if a Network is in the given list and is a VM Network
      * @param iface
      * @param networksByName
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java
index 8426886..920eceb 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/snapshots/SnapshotsManager.java
@@ -308,7 +308,7 @@
     protected void synchronizeNics(Guid vmId, List<VmNetworkInterface> nics, 
CompensationContext compensationContext) {
         VmInterfaceManager vmInterfaceManager = new VmInterfaceManager();
 
-        vmInterfaceManager.removeAll(true, vmId);
+        vmInterfaceManager.removeAllInterfacesAndMacs(vmId);
         for (VmNetworkInterface vmInterface : nics) {
             // These fields might not be saved in the OVF, so fill them with 
reasonable values.
             if (vmInterface.getId() == null) {
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
index 566a051..3935b5d 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/VmInterfaceManagerTest.java
@@ -4,7 +4,6 @@
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertTrue;
 import static org.mockito.Matchers.any;
-import static org.mockito.Matchers.eq;
 import static org.mockito.Mockito.doNothing;
 import static org.mockito.Mockito.doReturn;
 import static org.mockito.Mockito.never;
@@ -28,6 +27,7 @@
 import org.ovirt.engine.core.common.businessentities.Network;
 import org.ovirt.engine.core.common.businessentities.VM;
 import org.ovirt.engine.core.common.businessentities.VmNetworkInterface;
+import org.ovirt.engine.core.common.errors.VdcBLLException;
 import org.ovirt.engine.core.compat.Guid;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.dao.VmDAO;
@@ -39,6 +39,7 @@
 
     private final String NETWORK_NAME = "networkName";
     private final String VM_NAME = "vmName";
+    private final String MAC_ADDRESS = "00:14:4a:23:67:55";
 
     @Mock
     private MacPoolManager macPoolManager;
@@ -63,6 +64,7 @@
         
doReturn(vmNetworkStatisticsDAO).when(vmInterfaceManager).getVmNetworkStatisticsDAO();
         
doReturn(vmNetworkInterfaceDAO).when(vmInterfaceManager).getVmNetworkInterfaceDAO();
         doReturn(vmDAO).when(vmInterfaceManager).getVmDAO();
+        
doNothing().when(vmInterfaceManager).auditLogMacInUse(any(VmNetworkInterface.class));
 
         doNothing().when(vmInterfaceManager).log(any(AuditLogableBase.class), 
any(AuditLogType.class));
     }
@@ -77,14 +79,12 @@
         runAddAndVerify(createNewInterface(), false, times(1), false);
     }
 
-    @Test
+    @Test(expected = VdcBLLException.class)
     public void addLogsWhenMacAlreadyInUseAndReturnsFalse() {
         VmNetworkInterface iface = createNewInterface();
         
when(macPoolManager.IsMacInUse(iface.getMacAddress())).thenReturn(true);
 
         runAddAndVerify(iface, true, never(), false);
-
-        verify(vmInterfaceManager).log(any(AuditLogableBase.class), 
eq(AuditLogType.MAC_ADDRESS_IS_IN_USE));
     }
 
     protected void runAddAndVerify(VmNetworkInterface iface,
@@ -104,16 +104,6 @@
         when(macPoolManager.allocateNewMac()).thenReturn(newMac);
         vmInterfaceManager.add(iface, NoOpCompensationContext.getInstance(), 
true);
         assertEquals(newMac, iface.getMacAddress());
-    }
-
-    @Test
-    public void removeAllRemovesFromMacPoolAlso() {
-        runRemoveAllAndVerify(true, times(1));
-    }
-
-    @Test
-    public void removeAllDoesntRemoveFromMacPoolWhenNotNeeded() {
-        runRemoveAllAndVerify(false, never());
     }
 
     @Test
@@ -158,22 +148,51 @@
         assertTrue(vmNames.isEmpty());
     }
 
-    private void mockDaos() {
-        VM vm = createVM(VM_NAME, NETWORK_NAME);
-        
when(vmDAO.getAllRunningForVds(any(Guid.class))).thenReturn(Arrays.asList(vm));
-        
when(vmNetworkInterfaceDAO.getAllForVm(vm.getId())).thenReturn(vm.getInterfaces());
-    }
-
-    protected void runRemoveAllAndVerify(boolean removeFromPool, 
VerificationMode freeMacVerification) {
+    @Test
+    public void removeAllInterfacesAndMacs() {
         List<VmNetworkInterface> interfaces = 
Arrays.asList(createNewInterface(), createNewInterface());
 
         
when(vmNetworkInterfaceDAO.getAllForVm(any(Guid.class))).thenReturn(interfaces);
 
-        vmInterfaceManager.removeAll(removeFromPool, Guid.NewGuid());
+        vmInterfaceManager.removeAllInterfacesAndMacs(Guid.NewGuid());
 
         for (VmNetworkInterface iface : interfaces) {
-            verifyRemoveAllDelegatedCorrectly(iface, freeMacVerification);
+            verifyRemoveAllDelegatedCorrectly(iface, times(1));
         }
+    }
+
+    @Test
+    public void removeAllInterfacesAndMacsWithNonEmptyList() {
+        VmNetworkInterface vmNetworkInterface = createNewInterface();
+        vmNetworkInterface.setMacAddress(MAC_ADDRESS);
+        List<VmNetworkInterface> interfaces = 
Arrays.asList(vmNetworkInterface);
+
+        
when(vmNetworkInterfaceDAO.getAllForVm(any(Guid.class))).thenReturn(interfaces);
+
+        vmInterfaceManager.removeAllInterfacesAndMacsFromList(Guid.NewGuid(), 
Collections.singletonList(MAC_ADDRESS));
+
+        for (VmNetworkInterface iface : interfaces) {
+            verifyRemoveAllDelegatedCorrectly(iface, times(1));
+        }
+    }
+
+    @Test
+    public void removeAllInterfacesAndMacsWithEmptyList() {
+        List<VmNetworkInterface> interfaces = 
Arrays.asList(createNewInterface(), createNewInterface());
+
+        
when(vmNetworkInterfaceDAO.getAllForVm(any(Guid.class))).thenReturn(interfaces);
+
+        vmInterfaceManager.removeAllInterfacesAndMacsFromList(Guid.NewGuid(), 
Collections.EMPTY_LIST);
+
+        for (VmNetworkInterface iface : interfaces) {
+            verifyRemoveAllDelegatedCorrectly(iface, never());
+        }
+    }
+
+    private void mockDaos() {
+        VM vm = createVM(VM_NAME, NETWORK_NAME);
+        
when(vmDAO.getAllRunningForVds(any(Guid.class))).thenReturn(Arrays.asList(vm));
+        
when(vmNetworkInterfaceDAO.getAllForVm(vm.getId())).thenReturn(vm.getInterfaces());
     }
 
     /**
@@ -191,7 +210,9 @@
     }
 
     /**
-     * Verify that {@link VmInterfaceManager#removeAll} delegated correctly to 
{@link MacPoolManager} & DAOs.
+     * Verify that {@link VmInterfaceManager#removeAllInterfacesAndMacs} or
+     * {@link VmInterfaceManager#removeAllInterfacesAndMacsFromList} delegated 
correctly to {@link MacPoolManager} &
+     * DAOs.
      *
      * @param iface
      *            The interface to check for.
diff --git 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
index 011ac46..a213129 100644
--- 
a/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
+++ 
b/backend/manager/modules/common/src/main/java/org/ovirt/engine/core/common/errors/VdcBllErrors.java
@@ -364,6 +364,7 @@
     MAC_POOL_INITIALIZATION_FAILED(5010),
     MAC_POOL_NOT_INITIALIZED(5011),
     MAC_POOL_NO_MACS_LEFT(5012),
+    MAC_ADDRESS_IS_IN_USE(5013),
     VM_POOL_CANNOT_ALLOCATE_VM(5014),
     // Could not allocate VDS for a new VM to run on
     RESOURCE_MANAGER_CANT_ALLOC_VDS_MIGRATION(5015),
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 e39b835..19ae47c 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties
@@ -626,6 +626,7 @@
 VAR__TYPE__VM__CLUSTER=$type VM Cluster
 VDS_FENCING_OPERATION_FAILED=Cannot ${action} ${type}. Fencing operation 
failed.
 VM_CANNOT_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO=Cannot ${action} without active 
ISO domain.
+MAC_ADDRESS_IS_IN_USE=MAC Address is in use.
 CAN_DO_ACTION_GENERAL_FAILURE - General command validation failure.
 ERROR_CANNOT_REMOVE_ACTIVE_STORAGE_POOL - Cannot remove an active Data Center.
 ROLE_TYPE_CANNOT_BE_EMPTY - Invalid Role Type.
diff --git 
a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
 
b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
index 7495aa9..6f5342e 100644
--- 
a/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
+++ 
b/backend/manager/modules/dal/src/main/resources/bundles/AuditLogMessages.properties
@@ -320,7 +320,7 @@
 USER_UPDATE_VM_POOL_WITH_VMS_FAILED=Failed to update VM Pool 
${VmPoolName}(User: ${UserName}). 
 USER_VM_POOL_MAX_SUBSEQUENT_FAILURES_REACHED=Not all VMs where successfully 
created in VM Pool ${VmPoolName}.
 MAC_POOL_EMPTY=No MAC addresses left in the MAC Address Pool.
-MAC_ADDRESS_IS_IN_USE=Import Vm ${VmName}: Mac Address ${MACAddr} is in use
+MAC_ADDRESS_IS_IN_USE=VM ${VmName}: Mac Address ${MACAddr} is in use.
 USER_PASSWORD_CHANGED=Password changed successfully for ${UserName}
 USER_PASSWORD_CHANGE_FAILED=Failed to change password. (User: ${UserName})
 USER_CLEAR_UNKNOWN_VMS=All VMs' status on Non-Responsive Host ${VdsName} were 
changed to 'Down' by ${UserName}
diff --git 
a/backend/manager/modules/utils/src/test/resources/AppErrors.properties 
b/backend/manager/modules/utils/src/test/resources/AppErrors.properties
index a1f5a75..ac2491c 100644
--- a/backend/manager/modules/utils/src/test/resources/AppErrors.properties
+++ b/backend/manager/modules/utils/src/test/resources/AppErrors.properties
@@ -333,6 +333,7 @@
 ACTION_TYPE_FAILED_VDS_WITH_SAME_MANAGEMENT_IP_EXIST=Cannot ${action} ${type}. 
Host with the same Power Management address already exists.
 VDS_FENCING_OPERATION_FAILED=Cannot ${action} ${type}. Fencing opperation 
failed.
 # Quota messages.
+MAC_ADDRESS_IS_IN_USE=MAC Address is in use.
 ACTION_TYPE_FAILED_QUOTA_NOT_EXIST=Cannot ${action} ${type}. Quota doesn't 
exist.
 ACTION_TYPE_FAILED_QUOTA_IS_NOT_VALID=Cannot ${action} ${type}. Quota is not 
valid.
 ACTION_TYPE_FAILED_QUOTA_IS_NO_LONGER_AVAILABLE_IN_SYSTEM=Cannot ${action} 
${type}. The quota associated with VM ${VmName} is no longer available. This 
may be a result of an import or snapshot restoring actions. Please reassign a 
quota to this VM.
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 da53061..9b419b4 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
@@ -1675,6 +1675,9 @@
     @DefaultStringValue("Cannot ${action} without active ISO domain.")
     String VM_CANNOT_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO();
 
+    @DefaultStringValue("MAC Address is in use.")
+    String MAC_ADDRESS_IS_IN_USE();
+
     @DefaultStringValue("General command validation failure.")
     String CAN_DO_ACTION_GENERAL_FAILURE();
 
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 86194a7..694a6f1 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
@@ -619,6 +619,7 @@
 VAR__TYPE__VM__CLUSTER=$type VM Cluster
 VDS_FENCING_OPERATION_FAILED=Cannot ${action} ${type}. Fencing operation 
failed.
 VM_CANNOT_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO=Cannot ${action} without active 
ISO domain.
+MAC_ADDRESS_IS_IN_USE=Mac Address is in use.
 CAN_DO_ACTION_GENERAL_FAILURE - General command validation failure.
 ERROR_CANNOT_REMOVE_ACTIVE_STORAGE_POOL - Cannot remove an active Data Center.
 ROLE_TYPE_CANNOT_BE_EMPTY - Invalid Role Type.
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 2c729ff..296a43a 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
@@ -618,6 +618,7 @@
 VAR__TYPE__VM__CLUSTER=$type VM Cluster
 VDS_FENCING_OPERATION_FAILED=Cannot ${action} ${type}. Fencing operation 
failed.
 VM_CANNOT_WITHOUT_ACTIVE_STORAGE_DOMAIN_ISO=Cannot ${action} without active 
ISO domain.
+MAC_ADDRESS_IS_IN_USE=Mac Address is in use.
 CAN_DO_ACTION_GENERAL_FAILURE - General command validation failure.
 ERROR_CANNOT_REMOVE_ACTIVE_STORAGE_POOL - Cannot remove an active Data Center.
 ROLE_TYPE_CANNOT_BE_EMPTY - Invalid Role Type.


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

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

Reply via email to