Moti Asayag has uploaded a new change for review. Change subject: engine: Add validations for removing a network ......................................................................
engine: Add validations for removing a network The patch adds several validations for removing a network: 1. Prevent removing a management network 2. Prevent removing a network used by VMs 3. Prevent removing a network which is attached to hosts Change-Id: Ia3b797f79aac104ff73d5ad21a87ede259276b4c Signed-off-by: Moti Asayag <masa...@redhat.com> --- M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java M backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java 3 files changed, 68 insertions(+), 49 deletions(-) git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/43/10743/1 diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java index 3ae994e..2490d9a 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/NetworkCommon.java @@ -9,16 +9,21 @@ import org.ovirt.engine.core.common.FeatureSupported; import org.ovirt.engine.core.common.VdcObjectType; import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; +import org.ovirt.engine.core.common.businessentities.VDS; +import org.ovirt.engine.core.common.businessentities.VmStatic; import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.businessentities.network.NetworkCluster; import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.dal.VdcBllMessages; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogField; import org.ovirt.engine.core.dal.dbbroker.auditloghandling.CustomLogFields; +import org.ovirt.engine.core.utils.ReplacementUtils; @SuppressWarnings("serial") @CustomLogFields({ @CustomLogField("NetworkName") }) public abstract class NetworkCommon<T extends AddNetworkStoragePoolParameters> extends CommandBase<T> { private List<Network> networks; + private List<NetworkCluster> clusterAttachments; public NetworkCommon(T parameters) { super(parameters); @@ -72,12 +77,6 @@ return ValidationResult.VALID; } - protected ValidationResult networkNotAttachedToCluster(final Network network) { - return getNetworkClusterDAO().getAllForNetwork(network.getId()).isEmpty() - ? ValidationResult.VALID - : new ValidationResult(VdcBllMessages.NETWORK_CLUSTER_NETWORK_IN_USE); - } - protected ValidationResult networkPrefixValid() { return getNetworkName().toLowerCase().startsWith("bond") ? new ValidationResult(VdcBllMessages.NETWORK_CANNOT_CONTAIN_BOND_NAME) @@ -106,4 +105,40 @@ } return networks; } + + protected ValidationResult networkExists(Network network) { + return network == null + ? new ValidationResult(VdcBllMessages.NETWORK_NOT_EXISTS) + : ValidationResult.VALID; + } + + protected ValidationResult networkNotUsedByRunningVm() { + String networkName = getNetworkName(); + for (NetworkCluster clusterAttachment : getClusterAttachments()) { + List<VmStatic> vms = + getVmStaticDAO().getAllByGroupAndNetworkName(clusterAttachment.getClusterId(), networkName); + if (vms.size() > 0) { + return new ValidationResult(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM); + } + } + return ValidationResult.VALID; + } + + protected List<NetworkCluster> getClusterAttachments() { + if (clusterAttachments == null) { + clusterAttachments = getNetworkClusterDAO().getAllForNetwork(getNetwork().getId()); + } + + return clusterAttachments; + } + + protected ValidationResult networkNotUsedByHost(final Network network) { + List<VDS> hostsWithNetwork = getVdsDAO().getAllForNetwork(network.getId()); + if (hostsWithNetwork.isEmpty()) { + return ValidationResult.VALID; + } + + return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_IN_USE_BY_HOSTS, + ReplacementUtils.replaceWithNameable("HOSTS_USING_NETWORK", hostsWithNetwork)); + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java index 775f199..115b161 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/RemoveNetworkCommand.java @@ -1,12 +1,18 @@ package org.ovirt.engine.core.bll.network.dc; +import org.ovirt.engine.core.bll.ValidationResult; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; +import org.ovirt.engine.core.common.businessentities.network.Network; +import org.ovirt.engine.core.common.config.Config; +import org.ovirt.engine.core.common.config.ConfigValues; import org.ovirt.engine.core.dal.VdcBllMessages; @SuppressWarnings("serial") public class RemoveNetworkCommand<T extends AddNetworkStoragePoolParameters> extends NetworkCommon<T> { + private Network network; + public RemoveNetworkCommand(T parameters) { super(parameters); } @@ -25,11 +31,29 @@ @Override protected boolean canDoAction() { - return validate(networkNotAttachedToCluster(getNetwork())); + return validate(networkExists(geRemovedtNetwork())) + && validate(notManagementNetwork()) + && validate(networkNotUsedByRunningVm()) + && validate(networkNotUsedByHost(geRemovedtNetwork())); } @Override public AuditLogType getAuditLogTypeValue() { return getSucceeded() ? AuditLogType.NETWORK_REMOVE_NETWORK : AuditLogType.NETWORK_REMOVE_NETWORK_FAILED; } + + private ValidationResult notManagementNetwork() { + String managementNetwork = Config.<String> GetValue(ConfigValues.ManagementNetwork); + return managementNetwork.equals(geRemovedtNetwork().getName()) + ? new ValidationResult(VdcBllMessages.NETWORK_CAN_NOT_REMOVE_DEFAULT_NETWORK) + : ValidationResult.VALID; + } + + protected Network geRemovedtNetwork() { + if (network == null) { + network = getNetworkDAO().get(super.getNetwork().getId()); + } + + return network; + } } diff --git a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java index fb2d102..99192b4 100644 --- a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java +++ b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/dc/UpdateNetworkCommand.java @@ -6,8 +6,6 @@ import org.ovirt.engine.core.bll.network.cluster.NetworkClusterHelper; import org.ovirt.engine.core.common.AuditLogType; import org.ovirt.engine.core.common.action.AddNetworkStoragePoolParameters; -import org.ovirt.engine.core.common.businessentities.VDS; -import org.ovirt.engine.core.common.businessentities.VmStatic; 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.Config; @@ -16,11 +14,9 @@ import org.ovirt.engine.core.compat.Guid; import org.ovirt.engine.core.compat.NGuid; import org.ovirt.engine.core.dal.VdcBllMessages; -import org.ovirt.engine.core.utils.ReplacementUtils; @SuppressWarnings("serial") public class UpdateNetworkCommand<T extends AddNetworkStoragePoolParameters> extends NetworkCommon<T> { - private List<NetworkCluster> clusterAttachments; private Network oldNetwork; public UpdateNetworkCommand(T parameters) { @@ -51,11 +47,11 @@ && validate(mtuValid()) && validate(networkPrefixValid()) && validate(vlanIsFree()) - && validate(networkExists()) + && validate(networkExists(getOldNetwork())) && validate(notChangingManagementNetworkName()) && validate(networkNameNotUsed()) && validate(networkNotUsedByRunningVm()) - && validate(networkNotUsedByHost()); + && validate(networkNotUsedByHost(getOldNetwork())); } @Override @@ -67,14 +63,6 @@ protected List<Class<?>> getValidationGroups() { addValidationGroup(UpdateEntity.class); return super.getValidationGroups(); - } - - private List<NetworkCluster> getClusterAttachments() { - if (clusterAttachments == null) { - clusterAttachments = getNetworkClusterDAO().getAllForNetwork(getNetwork().getId()); - } - - return clusterAttachments; } private Network getOldNetwork(){ @@ -92,12 +80,6 @@ } } return null; - } - - private ValidationResult networkExists() { - return getOldNetwork() == null - ? new ValidationResult(VdcBllMessages.NETWORK_NOT_EXISTS) - : ValidationResult.VALID; } private ValidationResult networkNameNotUsed() { @@ -121,33 +103,11 @@ return null; } - private ValidationResult networkNotUsedByRunningVm() { - String networkName = getNetworkName(); - for (NetworkCluster clusterAttachment : getClusterAttachments()) { - List<VmStatic> vms = - getVmStaticDAO().getAllByGroupAndNetworkName(clusterAttachment.getClusterId(), networkName); - if (vms.size() > 0) { - return new ValidationResult(VdcBllMessages.NETWORK_INTERFACE_IN_USE_BY_VM); - } - } - return ValidationResult.VALID; - } - private ValidationResult notChangingManagementNetworkName() { String managementNetwork = Config.<String> GetValue(ConfigValues.ManagementNetwork); return getOldNetwork().getName().equals(managementNetwork) && !getNetworkName().equals(managementNetwork) ? new ValidationResult(VdcBllMessages.NETWORK_CAN_NOT_REMOVE_DEFAULT_NETWORK) : ValidationResult.VALID; - } - - private ValidationResult networkNotUsedByHost() { - List<VDS> hostsWithNetwork = getVdsDAO().getAllForNetwork(getOldNetwork().getId()); - if (hostsWithNetwork.isEmpty()) { - return ValidationResult.VALID; - } - - return new ValidationResult(VdcBllMessages.ACTION_TYPE_FAILED_NETWORK_IN_USE_BY_HOSTS, - ReplacementUtils.replaceWithNameable("HOSTS_USING_NETWORK", hostsWithNetwork)); } } -- To view, visit http://gerrit.ovirt.org/10743 To unsubscribe, visit http://gerrit.ovirt.org/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ia3b797f79aac104ff73d5ad21a87ede259276b4c Gerrit-PatchSet: 1 Gerrit-Project: ovirt-engine Gerrit-Branch: master Gerrit-Owner: Moti Asayag <masa...@redhat.com> _______________________________________________ Engine-patches mailing list Engine-patches@ovirt.org http://lists.ovirt.org/mailman/listinfo/engine-patches