Moti Asayag has uploaded a new change for review.

Change subject: core: Preserve bonding options when updating vlan over bond
......................................................................

core: Preserve bonding options when updating vlan over bond

The ovirt-engine used to erase any pre-configured
bonding options, if it wasn't provided explicitly
by the api users.

In order to preserve the bonding options properly,
there is a need either to examine it from the supplied
properties or to use the already configured bonding
device from the engine db.

Change-Id: I09b150b11913a9d8cddc5115e28c027e7c944910
Bug-Url: https://bugzilla.redhat.com/1068970
Signed-off-by: Moti Asayag <masa...@redhat.com>
---
M 
backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkToVdsInterfaceCommand.java
M 
backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java
2 files changed, 36 insertions(+), 17 deletions(-)


  git pull ssh://gerrit.ovirt.org:29418/ovirt-engine refs/changes/12/24912/1

diff --git 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkToVdsInterfaceCommand.java
 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkToVdsInterfaceCommand.java
index 7b79edc..f69045a 100644
--- 
a/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkToVdsInterfaceCommand.java
+++ 
b/backend/manager/modules/bll/src/main/java/org/ovirt/engine/core/bll/network/host/UpdateNetworkToVdsInterfaceCommand.java
@@ -7,6 +7,7 @@
 import org.ovirt.engine.core.bll.network.cluster.NetworkClusterHelper;
 import org.ovirt.engine.core.common.AuditLogType;
 import org.ovirt.engine.core.common.action.UpdateNetworkToVdsParameters;
+import org.ovirt.engine.core.common.businessentities.Entities;
 import org.ovirt.engine.core.common.businessentities.VDS;
 import org.ovirt.engine.core.common.businessentities.VDSStatus;
 import org.ovirt.engine.core.common.businessentities.network.Network;
@@ -47,12 +48,17 @@
                 .getSubnet() : getParameters().getSubnet();
         String gateway = StringUtils.isEmpty(getParameters().getGateway()) ? 
"" : getParameters().getGateway();
         java.util.ArrayList<String> interfaceNames = new 
java.util.ArrayList<String>();
+        VdsNetworkInterface bond = null;
+
         for (VdsNetworkInterface i : getParameters().getInterfaces()) {
-            if (i.getBonded() != null && i.getBonded() || 
NetworkUtils.isBondVlan(interfaces, i)) {
-                
getParameters().setBondName(NetworkUtils.stripVlan(i.getName()));
-                for (VdsNetworkInterface ix : interfaces) {
-                    if (NetworkUtils.interfaceBasedOn(i.getName(), 
ix.getBondName())) {
-                        
interfaceNames.add(NetworkUtils.stripVlan(ix.getName()));
+            if (Boolean.TRUE.equals(i.getBonded())) {
+                if (NetworkUtils.isBondVlan(interfaces, i)) {
+                    
getParameters().setBondName(NetworkUtils.stripVlan(i.getName()));
+                    for (VdsNetworkInterface ix : interfaces) {
+                        if (NetworkUtils.interfaceBasedOn(i.getName(), 
ix.getBondName())) {
+                            
interfaceNames.add(NetworkUtils.stripVlan(ix.getName()));
+                            bond = ix;
+                        }
                     }
                 }
             } else {
@@ -60,11 +66,28 @@
             }
         }
 
-        NetworkVdsmVDSCommandParameters parameters = new 
NetworkVdsmVDSCommandParameters(getParameters().getVdsId(),
-                getParameters().getNetwork().getName(), 
getParameters().getNetwork().getVlanId(), getParameters()
-                        .getBondName(), interfaceNames.toArray(new String[] 
{}), address, subnet, gateway,
-                getParameters().getNetwork().getStp(), 
getParameters().getBondingOptions(), getParameters()
-                        .getBootProtocol());
+        // updating a vlan over bond without providing the bond device should 
preserve the bonding options
+        String bondingOptions = null;
+        if (getParameters().getBondingOptions() == null) {
+            if (bond != null && 
Entities.entitiesByName(getParameters().getInterfaces()).containsKey(bond.getName()))
 {
+                bondingOptions = bond.getBondOptions();
+            }
+        } else {
+            bondingOptions = getParameters().getBondingOptions();
+        }
+
+        NetworkVdsmVDSCommandParameters parameters =
+                new NetworkVdsmVDSCommandParameters(getParameters().getVdsId(),
+                        getParameters().getNetwork().getName(),
+                        getParameters().getNetwork().getVlanId(),
+                        getParameters().getBondName(),
+                        interfaceNames.toArray(new String[] {}),
+                        address,
+                        subnet,
+                        gateway,
+                        getParameters().getNetwork().getStp(),
+                        bondingOptions,
+                        getParameters().getBootProtocol());
         parameters.setVmNetwork(getParameters().getNetwork().isVmNetwork());
         parameters.setOldNetworkName(getParameters().getOldNetworkName());
         parameters.setConnectionTimeout(Config.<Integer> 
getValue(ConfigValues.NetworkConnectivityCheckTimeoutInSeconds));
diff --git 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java
 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java
index 3c44ff2..e3fdff0 100644
--- 
a/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java
+++ 
b/backend/manager/modules/utils/src/main/java/org/ovirt/engine/core/utils/NetworkUtils.java
@@ -70,19 +70,15 @@
     }
 
     public static boolean isBondVlan(List<VdsNetworkInterface> interfaces, 
VdsNetworkInterface iface) {
-        boolean retVal = false;
-
         if (isVlan(iface)) {
             for (VdsNetworkInterface i : interfaces) {
-                if (i.getBonded() != null && i.getBonded() == true
-                        && interfaceBasedOn(iface.getName(), i.getName())) {
-                    retVal = true;
-                    break;
+                if (Boolean.TRUE.equals(i.getBonded()) && 
interfaceBasedOn(iface.getName(), i.getName())) {
+                    return true;
                 }
             }
         }
 
-        return retVal;
+        return false;
     }
 
     /**


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

Gerrit-MessageType: newchange
Gerrit-Change-Id: I09b150b11913a9d8cddc5115e28c027e7c944910
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