Blame SOURCES/BZ_1809330-Bond-mode-change.patch

4a7787
From b78579503ac16b9f7c71a023532fcb5f1586bc1d Mon Sep 17 00:00:00 2001
4a7787
From: Gris Ge <fge@redhat.com>
4a7787
Date: Mon, 9 Mar 2020 22:16:18 +0800
4a7787
Subject: [PATCH] nm applier: only create ethernet when explicitly
4a7787
4a7787
Creating ethernet configuration when user not requested will
4a7787
cause two major problems:
4a7787
    * Adding slave to newly create bridge will cause bridge link down.
4a7787
    * Cannot switch bond mode from 1(active-backup) to 5(balance-tlb).
4a7787
4a7787
To fix the problem, only create ethernet/wired setting when user
4a7787
explicitly requested.
4a7787
4a7787
Remove the xfail of test case for changing bond mode from 1(active-backup)
4a7787
to 5(balance-tlb).
4a7787
4a7787
Remove the workaround in test case for adding slave to newly created
4a7787
bridge without link state down.
4a7787
4a7787
Add test case showing old ethernet configuration will not be removed when
4a7787
desire state does not include so.
4a7787
4a7787
Signed-off-by: Gris Ge <fge@redhat.com>
4a7787
---
4a7787
 libnmstate/netapplier.py |  8 +++++---
4a7787
 libnmstate/nm/applier.py | 31 ++++++++++++++++++++++++++-----
4a7787
 2 files changed, 31 insertions(+), 8 deletions(-)
4a7787
4a7787
diff --git a/libnmstate/netapplier.py b/libnmstate/netapplier.py
4a7787
index cc6b6e3..d9d10cf 100644
4a7787
--- a/libnmstate/netapplier.py
4a7787
+++ b/libnmstate/netapplier.py
4a7787
@@ -152,7 +152,9 @@ def _apply_ifaces_state(
4a7787
                 state2edit = _create_editable_desired_state(
4a7787
                     desired_state, current_state, new_interfaces
4a7787
                 )
4a7787
-                ifaces2edit, ifaces_edit_configs = _edit_interfaces(state2edit)
4a7787
+                ifaces2edit, ifaces_edit_configs = _edit_interfaces(
4a7787
+                    state2edit, original_desired_state
4a7787
+                )
4a7787
                 nm.applier.set_ifaces_admin_state(
4a7787
                     ifaces2add + ifaces2edit,
4a7787
                     con_profiles=ifaces_add_configs + ifaces_edit_configs,
4a7787
@@ -231,7 +233,7 @@ def _add_interfaces(new_interfaces, desired_state):
4a7787
     return (ifaces2add, ifaces_configs)
4a7787
 
4a7787
 
4a7787
-def _edit_interfaces(state2edit):
4a7787
+def _edit_interfaces(state2edit, original_desired_state):
4a7787
     logging.debug("Editing interfaces: %s", list(state2edit.interfaces))
4a7787
 
4a7787
     ifaces2edit = list(state2edit.interfaces.values())
4a7787
@@ -244,7 +246,7 @@ def _edit_interfaces(state2edit):
4a7787
     )
4a7787
     proxy_ifaces = nm.applier.prepare_proxy_ifaces_desired_state(iface2prepare)
4a7787
     ifaces_configs = nm.applier.prepare_edited_ifaces_configuration(
4a7787
-        iface2prepare + proxy_ifaces
4a7787
+        iface2prepare + proxy_ifaces, original_desired_state
4a7787
     )
4a7787
     nm.applier.edit_existing_ifaces(ifaces_configs)
4a7787
 
4a7787
diff --git a/libnmstate/nm/applier.py b/libnmstate/nm/applier.py
4a7787
index 77e869e..8d31e35 100644
4a7787
--- a/libnmstate/nm/applier.py
4a7787
+++ b/libnmstate/nm/applier.py
4a7787
@@ -69,7 +69,10 @@ def prepare_new_ifaces_configuration(ifaces_desired_state):
4a7787
         )
4a7787
 
4a7787
     return [
4a7787
-        _build_connection_profile(iface_desired_state)
4a7787
+        _build_connection_profile(
4a7787
+            iface_desired_state,
4a7787
+            original_desired_iface_state=iface_desired_state,
4a7787
+        )
4a7787
         for iface_desired_state in ifaces_desired_state
4a7787
     ]
4a7787
 
4a7787
@@ -89,7 +92,9 @@ def edit_existing_ifaces(con_profiles):
4a7787
             connection_profile.add(save_to_disk=True)
4a7787
 
4a7787
 
4a7787
-def prepare_edited_ifaces_configuration(ifaces_desired_state):
4a7787
+def prepare_edited_ifaces_configuration(
4a7787
+    ifaces_desired_state, original_desired_state
4a7787
+):
4a7787
     con_profiles = []
4a7787
 
4a7787
     for iface_desired_state in ifaces_desired_state:
4a7787
@@ -101,8 +106,13 @@ def prepare_edited_ifaces_configuration(ifaces_desired_state):
4a7787
         if nmdev:
4a7787
             cur_con_profile = connection.ConnectionProfile()
4a7787
             cur_con_profile.import_by_device(nmdev)
4a7787
+        original_desired_iface_state = original_desired_state.interfaces.get(
4a7787
+            ifname, {}
4a7787
+        )
4a7787
         new_con_profile = _build_connection_profile(
4a7787
-            iface_desired_state, base_con_profile=cur_con_profile
4a7787
+            iface_desired_state,
4a7787
+            base_con_profile=cur_con_profile,
4a7787
+            original_desired_iface_state=original_desired_iface_state,
4a7787
         )
4a7787
         if not new_con_profile.devname:
4a7787
             set_conn = new_con_profile.profile.get_setting_connection()
4a7787
@@ -366,7 +376,14 @@ def _generate_hash_iface_name(name):
4a7787
     return name_[:MAXIMUM_INTERFACE_LENGTH].decode()
4a7787
 
4a7787
 
4a7787
-def _build_connection_profile(iface_desired_state, base_con_profile=None):
4a7787
+def _build_connection_profile(
4a7787
+    iface_desired_state,
4a7787
+    base_con_profile=None,
4a7787
+    original_desired_iface_state=None,
4a7787
+):
4a7787
+    if original_desired_iface_state is None:
4a7787
+        original_desired_iface_state = {}
4a7787
+
4a7787
     iface_type = translator.Api2Nm.get_iface_type(
4a7787
         iface_desired_state[Interface.TYPE]
4a7787
     )
4a7787
@@ -401,7 +418,11 @@ def _build_connection_profile(iface_desired_state, base_con_profile=None):
4a7787
     con_setting.set_master(master, master_type)
4a7787
     settings.append(con_setting.setting)
4a7787
 
4a7787
-    wired_setting = wired.create_setting(iface_desired_state, base_profile)
4a7787
+    # Only apply wired/ethernet configuration based on original desire
4a7787
+    # state rather than the merged one.
4a7787
+    wired_setting = wired.create_setting(
4a7787
+        original_desired_iface_state, base_profile
4a7787
+    )
4a7787
     if wired_setting:
4a7787
         settings.append(wired_setting)
4a7787
 
4a7787
-- 
4a7787
2.18.2
4a7787