Alona Kaplan has uploaded a new change for review.

Change subject: core: add NetworkLinking to AddVmInterfaceCommand
......................................................................

core: add NetworkLinking to AddVmInterfaceCommand

- canDoAction-
If "UnlinkingSupported" is false for the cluster compatibility version.
- block 'null' network.
- block unlinking.

If "UnlinkingSupported" is true
- allow 'null' network.

Change-Id: I4f804e0d3117eed22814a8397d0fee12dd9e1347
Signed-off-by: Alona Kaplan <[email protected]>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java
1 file changed, 53 insertions(+), 15 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/98/9798/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java
index 2dd0ac4..717e06f 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/AddVmInterfaceCommand.java
@@ -122,6 +122,7 @@
 
     @Override
     protected boolean canDoAction() {
+
         VmStatic vm = getVm().getStaticData();
         if (vm == null) {
             
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_VM_NOT_EXIST);
@@ -161,23 +162,60 @@
             return false;
         }
 
-        // check that the exists in current cluster
-        List<Network> networks = 
DbFacade.getInstance().getNetworkDao().getAllForCluster(vm.getvds_group_id());
-
-        Network interfaceNetwork = LinqUtils.firstOrNull(networks, new 
Predicate<Network>() {
-            @Override
-            public boolean eval(Network network) {
-                return 
network.getname().equals(getParameters().getInterface().getNetworkName());
+        // check that the number of interfaces does not exceed limit. Necessary
+        // only for version 2.2.
+        boolean limitNumOfNics = Config.<Boolean> 
GetValue(ConfigValues.LimitNumberOfNetworkInterfaces, getVm()
+                .getvds_group_compatibility_version().toString());
+        if (limitNumOfNics) {
+            boolean numOfNicsLegal = validateNumberOfNics(interfaces, 
getParameters().getInterface());
+            if (!numOfNicsLegal) {
+                
addCanDoActionMessage(VdcBllMessages.NETWORK_INTERFACE_EXITED_MAX_INTERFACES);
+                return false;
             }
-        });
+        }
 
-        if (interfaceNetwork == null) {
-            
addCanDoActionMessage(VdcBllMessages.NETWORK_NOT_EXISTS_IN_CURRENT_CLUSTER);
-            return false;
-        } else if (!interfaceNetwork.isVmNetwork()) {
-            
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_NOT_A_VM_NETWORK);
-            addCanDoActionMessage(String.format("$networks %1$s", 
interfaceNetwork.getname()));
-            return false;
+        boolean unlinkingSupported =
+                Config.<Boolean> GetValue(ConfigValues.NetworkLinkingSupported,
+                        getVm().getvds_group_compatibility_version().
+                                getValue());
+
+        if (!unlinkingSupported) {
+            if (!getParameters().getInterface().isLinked()) {
+                
addCanDoActionMessage(VdcBllMessages.UNLINKING_IS_NOT_SUPPORTED);
+                addCanDoActionMessage(String.format("$clusterVersion %1$s",
+                        getVm().getvds_group_compatibility_version().
+                                getValue()));
+                return false;
+            }
+
+            if (getParameters().getInterface().getNetworkName() == null) {
+                
addCanDoActionMessage(VdcBllMessages.NULL_NETWORK_IS_NOT_SUPPORTED);
+                addCanDoActionMessage(String.format("$clusterVersion %1$s",
+                        getVm().getvds_group_compatibility_version().
+                                getValue()));
+                return false;
+            }
+        }
+
+        if (getParameters().getInterface().getNetworkName() != null) {
+            // check that the exists in current cluster
+            List<Network> networks = 
DbFacade.getInstance().getNetworkDao().getAllForCluster(vm.getvds_group_id());
+
+            Network interfaceNetwork = LinqUtils.firstOrNull(networks, new 
Predicate<Network>() {
+                @Override
+                public boolean eval(Network network) {
+                    return 
network.getname().equals(getParameters().getInterface().getNetworkName());
+                }
+            });
+
+            if (interfaceNetwork == null) {
+                
addCanDoActionMessage(VdcBllMessages.NETWORK_NOT_EXISTS_IN_CURRENT_CLUSTER);
+                return false;
+            } else if (!interfaceNetwork.isVmNetwork()) {
+                
addCanDoActionMessage(VdcBllMessages.ACTION_TYPE_FAILED_NOT_A_VM_NETWORK);
+                addCanDoActionMessage(String.format("$networks %1$s", 
interfaceNetwork.getname()));
+                return false;
+            }
         }
 
         if (!StringUtils.isEmpty(getMacAddress())) {


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I4f804e0d3117eed22814a8397d0fee12dd9e1347
Gerrit-PatchSet: 1
Gerrit-Project: ovirt-engine
Gerrit-Branch: master
Gerrit-Owner: Alona Kaplan <[email protected]>
_______________________________________________
Engine-patches mailing list
[email protected]
http://lists.ovirt.org/mailman/listinfo/engine-patches

Reply via email to