Yevgeny Zaspitsky has uploaded a new change for review. Change subject: engine: update AddVdsGroupCommand ......................................................................
engine: update AddVdsGroupCommand Update AddVdsGroupCommand with the new logic. Change-Id: I196a583ae7d8d7e373a1aca2a48e592232b18a5b Signed-off-by: Yevgeny Zaspitsky <[email protected]> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java M backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.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 frontend/webadmin/modules/frontend/src/main/java/org/ovirt/engine/ui/frontend/AppErrors.java M frontend/webadmin/modules/webadmin/src/main/resources/org/ovirt/engine/ui/frontend/AppErrors.properties 9 files changed, 301 insertions(+), 56 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/16/33416/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java index 1923438..d4c2dd8 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVdsGroupCommand.java @@ -3,15 +3,20 @@ import java.util.Collections; import java.util.List; +import javax.inject.Inject; + +import org.ovirt.engine.core.bll.network.cluster.DefaultManagementNetworkFinder; +import org.ovirt.engine.core.bll.network.cluster.NetworkClusterValidator; import org.ovirt.engine.core.bll.profiles.CpuProfileHelper; import org.ovirt.engine.core.bll.utils.PermissionSubject; import org.ovirt.engine.core.bll.utils.VersionSupport; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.VdcObjectType; -import org.ovirt.engine.core.common.action.VdsGroupOperationParameters; +import org.ovirt.engine.core.common.action.AddVdsGroupOperationParameters; import org.ovirt.engine.core.common.businessentities.MigrateOnErrorOptions; import org.ovirt.engine.core.common.businessentities.StoragePool; +import org.ovirt.engine.core.common.businessentities.VDSGroup; import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.businessentities.network.NetworkStatus; @@ -20,15 +25,17 @@ import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.common.gluster.GlusterFeatureSupported; import org.ovirt.engine.core.common.validation.group.CreateEntity; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.DbFacade; -import org.ovirt.engine.core.utils.NetworkUtils; -import org.ovirt.engine.core.utils.linq.LinqUtils; -import org.ovirt.engine.core.utils.linq.Predicate; +import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator; -public class AddVdsGroupCommand<T extends VdsGroupOperationParameters> extends +public class AddVdsGroupCommand<T extends AddVdsGroupOperationParameters> extends VdsGroupOperationCommandBase<T> { public static final String DefaultNetworkDescription = "Management Network"; + + @Inject + private DefaultManagementNetworkFinder defaultManagementNetworkFinder; public AddVdsGroupCommand(T parameters) { super(parameters); @@ -40,30 +47,13 @@ checkMaxMemoryOverCommitValue(); getVdsGroup().setDetectEmulatedMachine(true); - DbFacade.getInstance().getVdsGroupDao().save(getVdsGroup()); + DbFacadeLocator.getDbFacade().getVdsGroupDao().save(getVdsGroup()); alertIfFencingDisabled(); // add default network if (getParameters().getVdsGroup().getStoragePoolId() != null) { - final String networkName = NetworkUtils.getDefaultManagementNetworkName(); - List<Network> networks = DbFacade - .getInstance() - .getNetworkDao() - .getAllForDataCenter( - getParameters().getVdsGroup().getStoragePoolId()); - - Network net = LinqUtils.firstOrNull(networks, new Predicate<Network>() { - @Override - public boolean eval(Network network) { - return network.getName().equals(networkName); - } - }); - if (net != null) { - DbFacade.getInstance().getNetworkClusterDao().save( - new NetworkCluster(getParameters().getVdsGroup().getId(), net.getId(), - NetworkStatus.OPERATIONAL, true, true, true, false)); - } + attachManagementNetwork(); } // create default CPU profile for supported clusters. @@ -74,6 +64,31 @@ setActionReturnValue(getVdsGroup().getId()); setSucceeded(true); + } + + private void attachManagementNetwork() { + Network net = findManagementNetwork(getVdsGroup(), getManagementNetworkId()); + if (net != null) { + DbFacadeLocator.getDbFacade().getNetworkClusterDao().save(createNetworkCluster(net.getId())); + } + } + + private Guid getManagementNetworkId() { + return getParameters().getManagementNetworkId(); + } + + private Network findManagementNetwork(VDSGroup cluster, Guid managementNetworkId) { + if (managementNetworkId == null) { + return defaultManagementNetworkFinder.findDefaultManagementNetwork(cluster.getStoragePoolId()); + } else { + return getManagementNetworkById(managementNetworkId); + } + } + + private Network getManagementNetworkById(Guid managementNetworkId) { + return DbFacadeLocator.getDbFacade() + .getNetworkDao() + .get(managementNetworkId); } @Override @@ -96,8 +111,7 @@ // cpu check required only if the cluster supports Virt service addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_CPU_NOT_FOUND); result = false; - } else if (!VersionSupport.checkVersionSupported(getVdsGroup().getcompatibility_version() - )) { + } else if (!VersionSupport.checkVersionSupported(getVdsGroup().getcompatibility_version())) { addCanDoActionMessage(VersionSupport.getUnsupportedVersionMessage()); result = false; } else if (getVdsGroup().getStoragePoolId() != null) { @@ -134,6 +148,10 @@ result = false; } } + } + + if (result) { + result = validateManagementNetwork(); } if (getVdsGroup().getcompatibility_version() != null @@ -184,6 +202,40 @@ return result; } + private boolean validateManagementNetwork() { + final Network managementNetwork; + + if (getManagementNetworkId() == null) { + managementNetwork = + defaultManagementNetworkFinder.findDefaultManagementNetwork(getVdsGroup().getStoragePoolId()); + if (managementNetwork == null) { + addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND); + return false; + } + } else { + managementNetwork = getManagementNetworkById(getManagementNetworkId()); + if (managementNetwork == null) { + addCanDoActionMessage(VdcBllMessages.NETWORK_NOT_EXISTS); + return false; + } + } + + final NetworkClusterValidator networkClusterValidator = createNetworkClusterValidator(); + return validate(networkClusterValidator.networkBelongsToDataCenter(getVdsGroup(), managementNetwork)) + && validate(networkClusterValidator.managementNetworkAttachment(managementNetwork)) + && validate(networkClusterValidator.migrationPropertySupported()); + } + + private NetworkClusterValidator createNetworkClusterValidator() { + return new NetworkClusterValidator(createNetworkCluster(getManagementNetworkId()), + getVdsGroup().getcompatibility_version()); + } + + private NetworkCluster createNetworkCluster(Guid networkId) { + return new NetworkCluster(getVdsGroup().getId(), networkId, + NetworkStatus.OPERATIONAL, true, true, true, true); + } + @Override public List<PermissionSubject> getPermissionCheckSubjects() { return Collections.singletonList(new PermissionSubject(getVdsGroup().getStoragePoolId(), diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java index 12523c8..75e8ce6 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/AttachNetworkToVdsGroupCommand.java @@ -107,11 +107,10 @@ private boolean validateAttachment() { NetworkClusterValidator validator = new NetworkClusterValidator(getNetworkCluster(), getVdsGroup().getcompatibility_version()); - return (!NetworkUtils.isManagementNetwork(getNetwork()) - || validate(validator.managementNetworkAttachment(getNetworkName()))) - && validate(validator.migrationPropertySupported(getNetworkName())) - && (!getPersistedNetwork().isExternal() - || validateExternalNetwork(validator)); + return (validate(validator.managementNetworkAttachment(getNetwork()))) + && validate(validator.managementNetworkChange(null)) + && validate(validator.migrationPropertySupported()) + && (!getPersistedNetwork().isExternal() || validateExternalNetwork(validator)); } private boolean validateExternalNetwork(NetworkClusterValidator validator) { diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java index bcafb22..d6100d1 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidator.java @@ -2,9 +2,12 @@ import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.common.FeatureSupported; +import org.ovirt.engine.core.common.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.errors.VdcBllMessages; import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator; /** * Validator class for {@link NetworkCluster} instances. @@ -20,27 +23,80 @@ } /** - * Make sure the management network attachment is valid: The network must be required. - * - * @param networkName - * The network's name. - * @return Error iff the management network attachment is not valid. + * Make sure the given {@link Network} belongs to the same DC as the cluster. + * + * @param cluster the cluster to be checked against + * @param network network to be checked */ - public ValidationResult managementNetworkAttachment(String networkName) { - return networkCluster.isRequired() ? ValidationResult.VALID - : new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED, - String.format(NETWORK_NAME_REPLACEMENT, networkName)); + public ValidationResult networkBelongsToDataCenter(VDSGroup cluster, Network network) { + if (!cluster.getStoragePoolId().equals(network.getDataCenterId())) { + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC, + String.format(NETWORK_NAME_REPLACEMENT, network.getName())); + } + return ValidationResult.VALID; + } + + /** + * Make sure the management network attachment is valid: + * <ol> + * <li>The network must be required.</li> + * <li>Management network cannot be required</li> + * </ol> + * + * @param network + * The attached network + * @return Error if the management network attachment is not valid. + */ + public ValidationResult managementNetworkAttachment(Network network) { + if (networkCluster.isManagement()) { + if (!networkCluster.isRequired()) { + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED, + String.format(NETWORK_NAME_REPLACEMENT, network.getName())); + } + + if (network.isExternal()) { + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL, + String.format(NETWORK_NAME_REPLACEMENT, network.getName())); + } + } + return ValidationResult.VALID; + } + + /** + * Make sure the management network change is valid - that's is allowed in an empty cluster only</li> + * + * @return Error if the management network change is not allowed. + */ + public ValidationResult managementNetworkChange(NetworkCluster oldNetworkCluster) { + if (isManagementNetworkChanged(oldNetworkCluster) && isManagementNetworkChangeAllowed()) { + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED); + } + return ValidationResult.VALID; + } + + private boolean isManagementNetworkChangeAllowed() { + return !isClusterEmpty(); + } + + private boolean isManagementNetworkChanged(NetworkCluster oldNetworkCluster) { + if (oldNetworkCluster == null) { + return networkCluster.isManagement(); + } else { + return oldNetworkCluster.isManagement() != networkCluster.isManagement(); + } + } + + private boolean isClusterEmpty() { + return DbFacadeLocator.getDbFacade().getVdsDao().getAllForVdsGroup(networkCluster.getClusterId()).isEmpty(); } /** * Make sure the migration network is valid. * - * @param networkName - * The network's name. * @return Error if the migration network feature is not supported and this network is marked as migration and is * not the management network. */ - public ValidationResult migrationPropertySupported(String networkName) { + public ValidationResult migrationPropertySupported() { return !networkCluster.isMigration() || FeatureSupported.migrationNetwork(version) ? ValidationResult.VALID : new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED); } @@ -48,7 +104,7 @@ /** * Make sure the external network attachment is supported for the version. * - * @return Error iff the external network attachment is not supported. + * @return Error if the external network attachment is not supported. */ public ValidationResult externalNetworkSupported() { return FeatureSupported.deviceCustomProperties(version) diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java index 4b06f45..1113dc9 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/cluster/UpdateNetworkOnClusterCommand.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.List; +import javax.inject.Inject; + import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.bll.VdsGroupCommandBase; import org.ovirt.engine.core.bll.network.cluster.helper.DisplayNetworkClusterHelper; @@ -17,10 +19,12 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.AuditLogDirectorDelegator; -import org.ovirt.engine.core.utils.NetworkUtils; public class UpdateNetworkOnClusterCommand<T extends NetworkClusterParameters> extends VdsGroupCommandBase<T> { + + @Inject + private ManagementNetworkUtil managementNetworkUtil; private Network network; private Network mgmtNetwork; @@ -41,7 +45,7 @@ private Network getManagementNetwork() { if (mgmtNetwork == null) { - mgmtNetwork = getNetworkDAO().getByNameAndCluster(NetworkUtils.getDefaultManagementNetworkName(), getVdsGroupId()); + mgmtNetwork = managementNetworkUtil.getManagementNetwork(getVdsGroupId()); } return mgmtNetwork; @@ -107,10 +111,10 @@ getVdsGroupDAO().get(getNetworkCluster().getClusterId()).getcompatibility_version(); NetworkClusterValidator validator = new NetworkClusterValidator(getNetworkCluster(), clusterVersion); - return (!NetworkUtils.isManagementNetwork(getNetwork()) - || validate(validator.managementNetworkAttachment(getNetworkName()))) - && validate(validator.migrationPropertySupported(getNetworkName())) - && (!getNetwork().isExternal() || validateExternalNetwork(validator)); + return (validate(validator.managementNetworkAttachment(getNetwork())) + && validate(validator.managementNetworkChange(getOldNetworkCluster())) + && validate(validator.migrationPropertySupported()) + && (!getNetwork().isExternal() || validateExternalNetwork(validator))); } private boolean validateExternalNetwork(NetworkClusterValidator validator) { diff --git a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java index a20baae..68a3c07 100644 --- a/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java +++ b/backend/manager/modules/bll/src/test/java/org/ovirt/engine/core/bll/network/cluster/NetworkClusterValidatorTest.java @@ -1,12 +1,14 @@ package org.ovirt.engine.core.bll.network.cluster; -import static org.junit.Assert.assertThat; import static org.hamcrest.CoreMatchers.both; import static org.hamcrest.CoreMatchers.hasItem; +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 static org.ovirt.engine.core.bll.validator.ValidationResultMatchers.replacements; + +import java.util.Collections; import org.hamcrest.Matcher; import org.junit.Before; @@ -16,15 +18,25 @@ import org.mockito.Mock; 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.businessentities.VDSGroup; +import org.ovirt.engine.core.common.businessentities.network.Network; import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.common.errors.VdcBllMessages; +import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.Version; +import org.ovirt.engine.core.dal.dbbroker.DbFacade; +import org.ovirt.engine.core.dal.dbbroker.DbFacadeLocator; +import org.ovirt.engine.core.dao.VdsDAO; import org.ovirt.engine.core.utils.MockConfigRule; import org.ovirt.engine.core.utils.RandomUtils; @RunWith(MockitoJUnitRunner.class) public class NetworkClusterValidatorTest { + + private static final Guid TEST_CLUSTER_ID = Guid.newGuid(); + private static final Guid TEST_DC_ID = Guid.newGuid(); private static final String CLUSTER_VERSION = "7"; @@ -35,7 +47,17 @@ NetworkClusterValidator.NETWORK_NAME_REPLACEMENT, NETWORK_NAME); @Mock + private VdsDAO vdsDao; + @Mock + private DbFacade dbFacade; + @Mock private NetworkCluster networkCluster; + @Mock + private NetworkCluster oldNetworkCluster; + @Mock + private Network network; + @Mock + private VDSGroup cluster; @Mock private Version version; @@ -48,23 +70,94 @@ @Before public void setup() { when(version.getValue()).thenReturn(CLUSTER_VERSION); + when(network.getName()).thenReturn(NETWORK_NAME); + when(networkCluster.getClusterId()).thenReturn(TEST_CLUSTER_ID); + when(dbFacade.getVdsDao()).thenReturn(vdsDao); + DbFacadeLocator.setDbFacade(dbFacade); + validator = new NetworkClusterValidator(networkCluster, version); } @Test - public void managementNetworkAttachmentValid() throws Exception { + public void managementNetworkAttachmentValid() { + when(networkCluster.isManagement()).thenReturn(Boolean.TRUE); when(networkCluster.isRequired()).thenReturn(Boolean.TRUE); + when(network.isExternal()).thenReturn(Boolean.FALSE); - assertThat(validator.managementNetworkAttachment(NETWORK_NAME), isValid()); + assertThat(validator.managementNetworkAttachment(network), isValid()); } @Test - public void managementNetworkAttachmentInvalid() throws Exception { + public void managementNetworkAttachmentValidNotManagement() { + when(networkCluster.isManagement()).thenReturn(Boolean.FALSE); + + assertThat(validator.managementNetworkAttachment(network), isValid()); + } + + @Test + public void managementNetworkAttachmentInvalidNotReqired() { + when(networkCluster.isManagement()).thenReturn(true); when(networkCluster.isRequired()).thenReturn(Boolean.FALSE); - assertThat(validator.managementNetworkAttachment(NETWORK_NAME), + assertThat(validator.managementNetworkAttachment(network), both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_REQUIRED)) .and(replacements(hasItem(NETWORK_NAME_REPLACEMENT)))); + } + + @Test + public void managementNetworkAttachmentInvalidExternal() { + when(networkCluster.isManagement()).thenReturn(Boolean.TRUE); + when(networkCluster.isRequired()).thenReturn(Boolean.TRUE); + when(network.isExternal()).thenReturn(Boolean.TRUE); + + assertThat(validator.managementNetworkAttachment(network), + both(failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL)) + .and(replacements(hasItem(NETWORK_NAME_REPLACEMENT)))); + } + + @Test + public void managementNetworkChangeValidNoChangePositive() { + testManagementNetworkChange(Boolean.TRUE, Boolean.TRUE, true, isValid()); + } + + @Test + public void managementNetworkChangeValidNoChangeNegative() { + testManagementNetworkChange(Boolean.FALSE, Boolean.FALSE, true, isValid()); + } + + @Test + public void managementNetworkChangeValidEmptyCluster() { + testManagementNetworkChange(Boolean.FALSE, Boolean.FALSE, true, isValid()); + } + + @Test + public void managementNetworkChangeValidInvalidNonEmptyCluster1() { + testManagementNetworkChange( + Boolean.TRUE, + Boolean.FALSE, + false, + failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED)); + } + + @Test + public void managementNetworkChangeValidInvalidNonEmptyCluster2() { + testManagementNetworkChange( + Boolean.FALSE, + Boolean.TRUE, + false, + failsWith(VdcBllMessages.ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED)); + } + + private void testManagementNetworkChange(Boolean managementBefore, + Boolean managementAfter, + boolean emptyCluster, + Matcher<ValidationResult> expectedResult) { + when(networkCluster.isManagement()).thenReturn(managementBefore); + when(oldNetworkCluster.isManagement()).thenReturn(managementAfter); + when(vdsDao.getAllForVdsGroup(TEST_CLUSTER_ID)).thenReturn(emptyCluster ? + Collections.<VDS> emptyList() : + Collections.<VDS> singletonList(null)); + assertThat(validator.managementNetworkChange(oldNetworkCluster), expectedResult); } @Test @@ -101,7 +194,7 @@ mockConfigRule.mockConfigValue(ConfigValues.MigrationNetworkEnabled, version, migrationNetworkSupported); when(networkCluster.isMigration()).thenReturn(migration); - assertThat(validator.migrationPropertySupported(NETWORK_NAME), matcher); + assertThat(validator.migrationPropertySupported(), matcher); } @Test @@ -122,4 +215,21 @@ assertThat(validator.externalNetworkSupported(), matcher); } + + @Test + public void networkBelongsToDataCenterValid() throws Exception { + when(cluster.getStoragePoolId()).thenReturn(TEST_DC_ID); + when(network.getDataCenterId()).thenReturn(TEST_DC_ID); + + assertThat(validator.networkBelongsToDataCenter(cluster, network), isValid()); + } + + @Test + public void networkBelongsToDataCenterNotValid() throws Exception { + when(cluster.getStoragePoolId()).thenReturn(TEST_DC_ID); + when(network.getDataCenterId()).thenReturn(Guid.newGuid()); + + assertThat(validator.networkBelongsToDataCenter(cluster, network), + failsWith(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC)); + } } 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 a3b983d..7ddf33a 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 @@ -484,6 +484,10 @@ ACTION_TYPE_FAILED_NETWORK_NAME_IN_USE(ErrorType.CONFLICT), ACTION_TYPE_FAILED_NETWORK_IN_USE(ErrorType.CONFLICT), ACTION_TYPE_FAILED_NETWORK_ALREADY_LABELED(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED(ErrorType.BAD_PARAMETERS), + ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL(ErrorType.BAD_PARAMETERS), NETWORK_NOT_EXISTS(ErrorType.BAD_PARAMETERS), ACTION_TYPE_FAILED_NETWORK_QOS_NOT_EXISTS(ErrorType.BAD_PARAMETERS), NETWORK_NOT_EXISTS_IN_CLUSTER(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 0ba7011..5ece6d5 100644 --- a/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties +++ b/backend/manager/modules/dal/src/main/resources/bundles/AppErrors.properties @@ -598,6 +598,10 @@ NON_VM_NETWORK_CANNOT_SUPPORT_STP=Cannot ${action} ${type}. STP can only be enabled on VM Networks. NETWORK_MTU_DIFFERENCES=Cannot ${action} ${type}. The following Logical Networks do not have the same MTU value: ${NETWORK_MTU_DIFFERENCES_LIST}. NETWORK_MTU_OVERRIDE_NOT_SUPPORTED=Cannot ${action} ${type}. Overriding MTU is not supported for this Data Center's compatibility version. +ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC=Cannot ${action} ${type}. Network belongs to a different data-center. +ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND=Cannot ${action} ${type}. Default management network is not found or is ambiguous. +ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED=Cannot ${action} ${type}. Changing management network in a non-empty cluster is not allowed. +ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL=Cannot ${action} ${type}. Management network has to be not external one. ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED=Cannot ${action} ${type}. Migration network is not supported for this cluster version. ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST=Cannot ${action} ${type}. The provider does not exist in the system. ACTION_TYPE_FAILED_PROVIDER_NETWORKS_USED=Cannot ${action} ${type}. Several external networks (${NETWORK_NAMES_COUNTER}) are being used by virtual machines and/or templates:\n${NETWORK_NAMES}\n - Please resolve the external networks usage first and try again. 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 6709876..77027dc 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 @@ -1642,6 +1642,18 @@ @DefaultStringValue("Cannot ${action} ${type}. Overriding MTU is not supported for this Data Center's compatibility version.") String NETWORK_MTU_OVERRIDE_NOT_SUPPORTED(); + @DefaultStringValue("Cannot ${action} ${type}. Network belongs to a different data-center.") + String ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC(); + + @DefaultStringValue("Cannot ${action} ${type}. Default management network is not found or is ambiguous.") + String ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND(); + + @DefaultStringValue("Cannot ${action} ${type}. Changing management network in a non-empty cluster is not allowed.") + String ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED(); + + @DefaultStringValue("Cannot ${action} ${type}. Management network has to be not external one.") + String ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL(); + @DefaultStringValue("Cannot ${action} ${type}. Migration network is not supported for this cluster version.") String ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED(); 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 83b64e3..42e6ca6 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 @@ -601,6 +601,10 @@ NON_VM_NETWORK_CANNOT_SUPPORT_STP=Cannot ${action} ${type}. STP can only be enabled on VM Networks. NETWORK_MTU_DIFFERENCES=Cannot ${action} ${type}. The following Logical Networks do not have the same MTU value: ${NETWORK_MTU_DIFFERENCES_LIST}. NETWORK_MTU_OVERRIDE_NOT_SUPPORTED=Cannot ${action} ${type}. Overriding MTU is not supported for this Data Center's compatibility version. +ACTION_TYPE_FAILED_NETWORK_FROM_DIFFERENT_DC=Cannot ${action} ${type}. Network belongs to a different data-center. +ACTION_TYPE_FAILED_DEFAULT_MANAGEMENT_NETWORK_NOT_FOUND=Cannot ${action} ${type}. Default management network is not found or is ambiguous. +ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_CHANGED=Cannot ${action} ${type}. Changing management network in a non-empty cluster is not allowed. +ACTION_TYPE_FAILED_MANAGEMENT_NETWORK_CANNOT_BE_EXTERNAL=Cannot ${action} ${type}. Management network has to be not external one. ACTION_TYPE_FAILED_MIGRATION_NETWORK_IS_NOT_SUPPORTED=Cannot ${action} ${type}. Migration network is not supported for this cluster version. ACTION_TYPE_FAILED_PROVIDER_DOESNT_EXIST=Cannot ${action} ${type}. The provider does not exist in the system. ACTION_TYPE_FAILED_PROVIDER_TYPE_MISMATCH=Cannot ${action} ${type}. The provider type should be 'OpenStack Networking'. -- To view, visit http://gerrit.ovirt.org/33416 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I196a583ae7d8d7e373a1aca2a48e592232b18a5b Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Yevgeny Zaspitsky <[email protected]> _______________________________________________ Engine-patches mailing list [email protected] http://lists.ovirt.org/mailman/listinfo/engine-patches
