Yevgeny Zaspitsky has uploaded a new change for review.

Change subject: engine: update UpdateVdsGroupCommand
......................................................................

engine: update UpdateVdsGroupCommand

Update logic of attaching a cluster to a DC.

Change-Id: Ica33589687a6190c1fa595beda461470afe9a6db
Signed-off-by: Yevgeny Zaspitsky <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
A 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidator.java
M 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
A 
backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidatorTest.java
4 files changed, 149 insertions(+), 14 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/13/33813/14

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
index 6acdf69..8cf5376 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommand.java
@@ -4,8 +4,12 @@
 import java.util.List;
 import java.util.Objects;
 
+import javax.inject.Inject;
+
 import org.apache.commons.lang.StringUtils;
 import org.ovirt.engine.core.bll.context.CommandContext;
+import 
org.ovirt.engine.core.bll.network.cluster.DefaultManagementNetworkFinder;
+import 
org.ovirt.engine.core.bll.network.cluster.UpdateClusterNetworkClusterValidator;
 import org.ovirt.engine.core.bll.profiles.CpuProfileHelper;
 import org.ovirt.engine.core.bll.utils.VersionSupport;
 import org.ovirt.engine.core.common.AuditLogType;
@@ -39,13 +43,19 @@
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirector;
 import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogableBase;
 import org.ovirt.engine.core.dao.network.NetworkDao;
-import org.ovirt.engine.core.utils.NetworkUtils;
 
 public class UpdateVdsGroupCommand<T extends VdsGroupOperationParameters> 
extends
         VdsGroupOperationCommandBase<T>  implements RenamedEntityInfoProvider{
 
+    @Inject
+    private DefaultManagementNetworkFinder defaultManagementNetworkFinder;
+
     private List<VDS> allForVdsGroup;
     private VDSGroup oldGroup;
+
+    private boolean isAddedToStoragePool = false;
+
+    private NetworkCluster managementNetworkCluster;
 
     public UpdateVdsGroupCommand(T parameters) {
         this(parameters, null);
@@ -115,22 +125,26 @@
                 }
             }
 
-            // when moving the cluster back into a DC, need to add its 
management network
-            Network managementNetwork =
-                    
getNetworkDAO().getByNameAndDataCenter(NetworkUtils.getDefaultManagementNetworkName(),
-                            getVdsGroup().getStoragePoolId());
-            getNetworkClusterDAO().save(new 
NetworkCluster(getVdsGroup().getId(),
-                    managementNetwork.getId(),
-                    NetworkStatus.OPERATIONAL,
-                    true,
-                    true,
-                    true,
-                    false));
+            if (isAddedToStoragePool) {
+                getNetworkClusterDAO().save(managementNetworkCluster);
+            }
         }
 
         alertIfFencingDisabled();
 
         setSucceeded(true);
+    }
+
+    private NetworkCluster createManagementNetworkCluster(Network 
managementNetwork) {
+        final NetworkCluster networkCluster = new NetworkCluster(
+                getVdsGroup().getId(),
+                managementNetwork.getId(),
+                NetworkStatus.OPERATIONAL,
+                true,
+                true,
+                true,
+                true);
+        return networkCluster;
     }
 
     @Override
@@ -249,8 +263,13 @@
 
         if (result) {
             List<VDS> vdss = new ArrayList<VDS>();
-            boolean isAddedToStoragePool = oldGroup.getStoragePoolId() == null
+            isAddedToStoragePool = oldGroup.getStoragePoolId() == null
                     && getVdsGroup().getStoragePoolId() != null;
+
+            if (isAddedToStoragePool && 
!validateManagementNetworkAttachement()) {
+                return false;
+            }
+
             for (VDS vds : allForVdsGroup) {
                 if (vds.getStatus() == VDSStatus.Up) {
                     if (isAddedToStoragePool) {
@@ -384,6 +403,19 @@
         return result;
     }
 
+    private boolean validateManagementNetworkAttachement() {
+        final Network managementNetwork =
+                
getDefaultManagementNetworkFinder().findDefaultManagementNetwork(getVdsGroup().getStoragePoolId());
+        if (managementNetwork == null) {
+            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND);
+            return false;
+        }
+
+        managementNetworkCluster = 
createManagementNetworkCluster(managementNetwork);
+        final UpdateClusterNetworkClusterValidator networkClusterValidator = 
createManagementNetworkClusterValidator();
+        return validate(networkClusterValidator.managementNetworkChange());
+    }
+
     @Override
     protected void setActionMessageParameters() {
         addCanDoActionMessage(VdcBllMessages.VAR__TYPE__CLUSTER);
@@ -464,4 +496,13 @@
     public void setEntityId(AuditLogableBase logable) {
         logable.setVdsGroupId(oldGroup.getId());
     }
+
+    DefaultManagementNetworkFinder getDefaultManagementNetworkFinder() {
+        return defaultManagementNetworkFinder;
+    }
+
+    UpdateClusterNetworkClusterValidator 
createManagementNetworkClusterValidator() {
+        return new 
UpdateClusterNetworkClusterValidator(managementNetworkCluster,
+                getVdsGroup().getcompatibility_version());
+    }
 }
diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidator.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidator.java
new file mode 100644
index 0000000..3de8f25
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidator.java
@@ -0,0 +1,17 @@
+package org.ovirt.engine.core.bll.network.cluster;
+
+import org.ovirt.engine.core.common.businessentities.network.NetworkCluster;
+import org.ovirt.engine.core.compat.Version;
+
+public class UpdateClusterNetworkClusterValidator extends 
NetworkClusterValidatorBase {
+
+    public UpdateClusterNetworkClusterValidator(NetworkCluster networkCluster, 
Version version) {
+        super(networkCluster, version);
+    }
+
+    @Override
+    protected boolean isManagementNetworkChangeInvalid() {
+        return isManagementNetworkChangeForbidden();
+    }
+
+}
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
index a270948..af5885a 100644
--- 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/UpdateVdsGroupCommandTest.java
@@ -25,6 +25,8 @@
 import org.mockito.Mock;
 import org.mockito.Mockito;
 import org.mockito.runners.MockitoJUnitRunner;
+import 
org.ovirt.engine.core.bll.network.cluster.DefaultManagementNetworkFinder;
+import 
org.ovirt.engine.core.bll.network.cluster.UpdateClusterNetworkClusterValidator;
 import org.ovirt.engine.core.common.action.VdsGroupOperationParameters;
 import org.ovirt.engine.core.common.businessentities.ArchitectureType;
 import org.ovirt.engine.core.common.businessentities.StoragePool;
@@ -33,6 +35,7 @@
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.VM;
 import 
org.ovirt.engine.core.common.businessentities.gluster.GlusterVolumeEntity;
+import org.ovirt.engine.core.common.businessentities.network.Network;
 import org.ovirt.engine.core.common.config.ConfigValues;
 import org.ovirt.engine.core.common.errors.VdcBllMessages;
 import org.ovirt.engine.core.compat.Guid;
@@ -47,11 +50,13 @@
 @RunWith(MockitoJUnitRunner.class)
 public class UpdateVdsGroupCommandTest {
 
+
     private static final Version VERSION_1_0 = new Version(1, 0);
     private static final Version VERSION_1_1 = new Version(1, 1);
     private static final Version VERSION_1_2 = new Version(1, 2);
     private static final Guid STORAGE_POOL_ID = Guid.newGuid();
     private static final Guid DEFAULT_VDS_GROUP_ID = new 
Guid("99408929-82CF-4DC7-A532-9D998063FA95");
+    private static final Guid TEST_MANAGEMENT_NETWORK_ID = Guid.newGuid();
 
     private static final Map<String, String> migrationMap = new HashMap<>();
 
@@ -78,6 +83,19 @@
     private GlusterVolumeDao glusterVolumeDao;
     @Mock
     private VmDAO vmDao;
+    @Mock
+    private DefaultManagementNetworkFinder defaultManagementNetworkFinder;
+    @Mock
+    private UpdateClusterNetworkClusterValidator networkClusterValidator;
+
+    @Mock
+    private Network mockManagementNetwork = createManagementNetwork();
+
+    private Network createManagementNetwork() {
+        final Network network = new Network();
+        network.setId(TEST_MANAGEMENT_NETWORK_ID);
+        return network;
+    }
 
     private UpdateVdsGroupCommand<VdsGroupOperationParameters> cmd;
 
@@ -223,6 +241,8 @@
 
     @Test
     public void clusterAlreadyInLocalFs() {
+        prepareManagementNetworkMocks();
+
         createCommandWithDefaultVdsGroup();
         oldGroupIsDetachedDefault();
         storagePoolIsLocalFS();
@@ -236,6 +256,8 @@
 
     @Test
     public void defaultClusterInLocalFs() {
+        prepareManagementNetworkMocks();
+
         mcr.mockConfigValue(ConfigValues.AutoRegistrationDefaultVdsGroupID, 
DEFAULT_VDS_GROUP_ID);
         createCommandWithDefaultVdsGroup();
         oldGroupIsDetachedDefault();
@@ -245,6 +267,12 @@
         allQueriesForVms();
         architectureIsUpdatable();
         
canDoActionFailedWithReason(VdcBllMessages.DEFAULT_CLUSTER_CANNOT_BE_ON_LOCALFS);
+    }
+
+    private void prepareManagementNetworkMocks() {
+        
when(defaultManagementNetworkFinder.findDefaultManagementNetwork(STORAGE_POOL_ID)).
+                thenReturn(mockManagementNetwork);
+        
when(networkClusterValidator.managementNetworkChange()).thenReturn(ValidationResult.VALID);
     }
 
     @Test
@@ -375,6 +403,8 @@
         doReturn(storagePoolDAO).when(cmd).getStoragePoolDAO();
         doReturn(glusterVolumeDao).when(cmd).getGlusterVolumeDao();
         doReturn(vmDao).when(cmd).getVmDAO();
+        
doReturn(defaultManagementNetworkFinder).when(cmd).getDefaultManagementNetworkFinder();
+        
doReturn(networkClusterValidator).when(cmd).createManagementNetworkClusterValidator();
         doReturn(true).when(cmd).validateClusterPolicy();
 
         if (StringUtils.isEmpty(group.getcpu_name())) {
@@ -458,7 +488,7 @@
 
     private static VDSGroup createVdsGroupWithDifferentPool() {
         VDSGroup group = createNewVdsGroup();
-        group.setStoragePoolId(Guid.newGuid());
+        group.setStoragePoolId(TEST_MANAGEMENT_NETWORK_ID);
         return group;
     }
 
diff --git 
a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidatorTest.java
 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidatorTest.java
new file mode 100644
index 0000000..76c28c8
--- /dev/null
+++ 
b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/UpdateClusterNetworkClusterValidatorTest.java
@@ -0,0 +1,47 @@
+package org.ovirt.engine.core.bll.network.cluster;
+
+import static org.junit.Assert.assertThat;
+import static org.mockito.Mockito.when;
+import static 
org.ovirt.engine.core.bll.validator.ValidationResultMatchers.failsWith;
+import static 
org.ovirt.engine.core.bll.validator.ValidationResultMatchers.isValid;
+
+import java.util.Collections;
+
+import org.hamcrest.Matcher;
+import org.junit.Test;
+import org.junit.runner.RunWith;
+import org.mockito.runners.MockitoJUnitRunner;
+import org.ovirt.engine.core.bll.ValidationResult;
+import org.ovirt.engine.core.common.businessentities.VDS;
+import org.ovirt.engine.core.common.errors.VdcBllMessages;
+
+@RunWith(MockitoJUnitRunner.class)
+public class UpdateClusterNetworkClusterValidatorTest
+                                                     extends
+                                                     
NetworkClusterValidatorTestBase<UpdateClusterNetworkClusterValidator> {
+
+    @Override
+    protected UpdateClusterNetworkClusterValidator createValidator() {
+        return new UpdateClusterNetworkClusterValidator(networkCluster, 
version);
+    }
+
+    @Test
+    public void managementNetworkChangeValid() {
+        testUpdateManagementNetworkChange(true, isValid());
+    }
+
+    @Test
+    public void managementNetworkChangeInvalid() {
+        testUpdateManagementNetworkChange(false,
+                
failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED));
+    }
+
+    private void testUpdateManagementNetworkChange(boolean emptyCluster,
+                                                   Matcher<ValidationResult> 
expectedResult) {
+        when(networkCluster.getClusterId()).thenReturn(TEST_CLUSTER_ID);
+        
when(vdsDao.getAllForVdsGroup(TEST_CLUSTER_ID)).thenReturn(emptyCluster ?
+                                                                               
Collections.<VDS> emptyList() :
+                                                                               
Collections.<VDS> singletonList(null));
+        assertThat(validator.managementNetworkChange(), expectedResult);
+    }
+}


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: Ica33589687a6190c1fa595beda461470afe9a6db
Gerrit-PatchSet: 14
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Yevgeny Zaspitsky <[email protected]>
Gerrit-Reviewer: Alona Kaplan <[email protected]>
Gerrit-Reviewer: [email protected]
Gerrit-Reviewer: oVirt Jenkins CI Server
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to