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

Reply via email to