Blame SOURCES/BZ_2080528-ovs-Do-not-validate-on-non-desired-interface.patch

d3f050
From c2aa72122d811180ae8c8f7f4fcb19a251024528 Mon Sep 17 00:00:00 2001
d3f050
From: Gris Ge <fge@redhat.com>
d3f050
Date: Fri, 29 Apr 2022 14:25:53 +0800
d3f050
Subject: [PATCH] ovs: Do not validate on non-desired interface
d3f050
d3f050
Currently nmstate is showing unmanaged ovs vxlan with empty parent which
d3f050
failure the apply() even it is not mentioned in desire state.
d3f050
d3f050
The fix is skip all the validations on non-desired interfaces.
d3f050
d3f050
Integration test case included.
d3f050
d3f050
Signed-off-by: Gris Ge <fge@redhat.com>
d3f050
---
d3f050
 libnmstate/ifaces/ifaces.py   | 14 ++++++++++----
d3f050
 tests/integration/ovs_test.py | 26 ++++++++++++++++++++++++++
d3f050
 2 files changed, 36 insertions(+), 4 deletions(-)
d3f050
d3f050
diff --git a/libnmstate/ifaces/ifaces.py b/libnmstate/ifaces/ifaces.py
d3f050
index c2a5d3c4..c2f9bfa9 100644
d3f050
--- a/libnmstate/ifaces/ifaces.py
d3f050
+++ b/libnmstate/ifaces/ifaces.py
d3f050
@@ -159,7 +159,8 @@ class Ifaces:
d3f050
             self._apply_copy_mac_from()
d3f050
             self.gen_metadata()
d3f050
             for iface in self.all_ifaces():
d3f050
-                iface.pre_edit_validation_and_cleanup()
d3f050
+                if iface.is_desired and iface.is_up:
d3f050
+                    iface.pre_edit_validation_and_cleanup()
d3f050
 
d3f050
             self._pre_edit_validation_and_cleanup()
d3f050
 
d3f050
@@ -293,7 +294,11 @@ class Ifaces:
d3f050
         When OVS patch peer does not exist or is down, raise an error.
d3f050
         """
d3f050
         for iface in self._kernel_ifaces.values():
d3f050
-            if iface.type == InterfaceType.OVS_INTERFACE and iface.is_up:
d3f050
+            if (
d3f050
+                iface.type == InterfaceType.OVS_INTERFACE
d3f050
+                and iface.is_up
d3f050
+                and iface.is_desired
d3f050
+            ):
d3f050
                 if iface.peer:
d3f050
                     peer_iface = self._kernel_ifaces.get(iface.peer)
d3f050
                     if not peer_iface or not peer_iface.is_up:
d3f050
@@ -315,9 +320,9 @@ class Ifaces:
d3f050
         Validate that vlan is not being created over infiniband interface
d3f050
         """
d3f050
         for iface in self._kernel_ifaces.values():
d3f050
-
d3f050
             if (
d3f050
                 iface.type in [InterfaceType.VLAN, InterfaceType.VXLAN]
d3f050
+                and iface.is_desired
d3f050
                 and iface.is_up
d3f050
             ):
d3f050
                 if (
d3f050
@@ -338,9 +343,9 @@ class Ifaces:
d3f050
         If base MTU is not present, set same as vlan MTU
d3f050
         """
d3f050
         for iface in self._kernel_ifaces.values():
d3f050
-
d3f050
             if (
d3f050
                 iface.type in [InterfaceType.VLAN, InterfaceType.VXLAN]
d3f050
+                and iface.is_desired
d3f050
                 and iface.is_up
d3f050
                 and iface.mtu
d3f050
             ):
d3f050
@@ -423,6 +428,7 @@ class Ifaces:
d3f050
         for ifname, iface in self._kernel_ifaces.items():
d3f050
             if (
d3f050
                 iface.type == InterfaceType.VETH
d3f050
+                and iface.is_desired
d3f050
                 and iface.is_up
d3f050
                 and not iface.peer
d3f050
             ):
d3f050
-- 
d3f050
2.35.1
d3f050