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
