From bc2f8445d493f8a5a4ff1ceead13d2b3ac5325cc Mon Sep 17 00:00:00 2001 From: Fernando Fernandez Mancera Date: Sun, 26 Jul 2020 00:46:16 +0200 Subject: [PATCH 1/2] nm.wired: do not report MTU if it is 0 If an interface contains an MTU with value 0, Nmstate should not report it because it is an special interface like OVS patch port interfaces. Added a test case for this. Signed-off-by: Fernando Fernandez Mancera --- libnmstate/nm/wired.py | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libnmstate/nm/wired.py b/libnmstate/nm/wired.py index 27d4318..64662ac 100644 --- a/libnmstate/nm/wired.py +++ b/libnmstate/nm/wired.py @@ -124,7 +124,9 @@ def get_info(device): iface = device.get_iface() try: - info[Interface.MTU] = int(device.get_mtu()) + mtu = int(device.get_mtu()) + if mtu: + info[Interface.MTU] = mtu except AttributeError: pass -- 2.27.0 From 03aea7d7debfca0f01b60e9f406c9acdf3de3775 Mon Sep 17 00:00:00 2001 From: Gris Ge Date: Mon, 27 Jul 2020 20:51:53 +0800 Subject: [PATCH 2/2] nm ovs: Raise NmstateNotSupportedError for save_to_disk=False Due to limitation of NetworkManager 1.26, nmstate cannot support `save_to_disk=False`(ask, memory only) state for OVS interfaces. Raise NmstateNotSupportedError if NetworkManager version is older than 1.28 and has OVS interface in desire state with `save_to_disk=False`. Integration test case included. Signed-off-by: Gris Ge Signed-off-by: Fernando Fernandez Mancera --- libnmstate/nm/applier.py | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/libnmstate/nm/applier.py b/libnmstate/nm/applier.py index 4e20af5..a91cee5 100644 --- a/libnmstate/nm/applier.py +++ b/libnmstate/nm/applier.py @@ -17,9 +17,11 @@ # along with this program. If not, see . # +from distutils.version import StrictVersion import logging import itertools +from libnmstate.error import NmstateNotSupportedError from libnmstate.error import NmstateValueError from libnmstate.schema import Interface from libnmstate.schema import InterfaceState @@ -65,6 +67,17 @@ MASTER_IFACE_TYPES = ( def apply_changes(context, net_state, save_to_disk): con_profiles = [] + if ( + not save_to_disk + and _has_ovs_interface_desired_or_changed(net_state) + and StrictVersion(context.client.get_version()) + < StrictVersion("1.28.0") + ): + raise NmstateNotSupportedError( + f"NetworkManager version {context.client.get_version()} does not " + f"support 'save_to_disk=False' against OpenvSwitch interface" + ) + _preapply_dns_fix(context, net_state) ifaces_desired_state = net_state.ifaces.state_to_edit @@ -602,3 +615,13 @@ def _preapply_dns_fix(context, net_state): for iface in net_state.ifaces.values(): if iface.is_changed or iface.is_desired: iface.remove_dns_metadata() + + +def _has_ovs_interface_desired_or_changed(net_state): + for iface in net_state.ifaces.values(): + if iface.type in ( + InterfaceType.OVS_BRIDGE, + InterfaceType.OVS_INTERFACE, + InterfaceType.OVS_PORT, + ) and (iface.is_desired or iface.is_changed): + return True -- 2.27.0