|
|
520691 |
From fb9352b902f8fec813c149e02e97c7014ef6399c Mon Sep 17 00:00:00 2001
|
|
|
520691 |
From: Fernando Fernandez Mancera <ffmancera@riseup.net>
|
|
|
520691 |
Date: Mon, 1 Mar 2021 16:25:57 +0100
|
|
|
520691 |
Subject: [PATCH] nm.applier: ignore not desired unmanaged ifaces
|
|
|
520691 |
|
|
|
520691 |
Nmstate will ignore not desired unmanaged interfaces. If an existing
|
|
|
520691 |
unmanaged port of a bridge is not being included in the desired state
|
|
|
520691 |
bridge port list, it will not be removed. Basically, Nmstate will not be
|
|
|
520691 |
able to remove unmanaged ports from a bridge.
|
|
|
520691 |
|
|
|
520691 |
Signed-off-by: Fernando Fernandez Mancera <ffmancera@riseup.net>
|
|
|
520691 |
---
|
|
|
520691 |
libnmstate/ifaces/ifaces.py | 11 ++++++---
|
|
|
520691 |
libnmstate/nm/applier.py | 11 ++++++++-
|
|
|
520691 |
tests/integration/linux_bridge_test.py | 1 +
|
|
|
520691 |
tests/integration/nm/linux_bridge_test.py | 30 +++--------------------
|
|
|
520691 |
4 files changed, 21 insertions(+), 32 deletions(-)
|
|
|
520691 |
|
|
|
520691 |
diff --git a/libnmstate/ifaces/ifaces.py b/libnmstate/ifaces/ifaces.py
|
|
|
520691 |
index 5f1f548d..cfc306c6 100644
|
|
|
520691 |
--- a/libnmstate/ifaces/ifaces.py
|
|
|
520691 |
+++ b/libnmstate/ifaces/ifaces.py
|
|
|
520691 |
@@ -193,7 +193,7 @@ class Ifaces:
|
|
|
520691 |
if not defiend in desire state
|
|
|
520691 |
"""
|
|
|
520691 |
for iface in self._ifaces.values():
|
|
|
520691 |
- if iface.is_up and iface.is_master:
|
|
|
520691 |
+ if iface.is_desired and iface.is_up and iface.is_master:
|
|
|
520691 |
cur_iface = self.current_ifaces.get(iface.name)
|
|
|
520691 |
for slave_name in iface.slaves:
|
|
|
520691 |
if cur_iface and slave_name in cur_iface.slaves:
|
|
|
520691 |
@@ -353,14 +353,17 @@ class Ifaces:
|
|
|
520691 |
|
|
|
520691 |
def _remove_unknown_interface_type_slaves(self):
|
|
|
520691 |
"""
|
|
|
520691 |
- When master containing slaves with unknown interface type, they should
|
|
|
520691 |
- be removed from master slave list before verifying.
|
|
|
520691 |
+ When master containing slaves with unknown interface type or down
|
|
|
520691 |
+ state, they should be removed from master slave list before verifying.
|
|
|
520691 |
"""
|
|
|
520691 |
for iface in self._ifaces.values():
|
|
|
520691 |
if iface.is_up and iface.is_master and iface.slaves:
|
|
|
520691 |
for slave_name in iface.slaves:
|
|
|
520691 |
slave_iface = self._ifaces[slave_name]
|
|
|
520691 |
- if slave_iface.type == InterfaceType.UNKNOWN:
|
|
|
520691 |
+ if (
|
|
|
520691 |
+ slave_iface.type == InterfaceType.UNKNOWN
|
|
|
520691 |
+ or slave_iface.state != InterfaceState.UP
|
|
|
520691 |
+ ):
|
|
|
520691 |
iface.remove_slave(slave_name)
|
|
|
520691 |
|
|
|
520691 |
def verify(self, cur_iface_infos):
|
|
|
520691 |
diff --git a/libnmstate/nm/applier.py b/libnmstate/nm/applier.py
|
|
|
520691 |
index cd319ffb..da2dab5b 100644
|
|
|
520691 |
--- a/libnmstate/nm/applier.py
|
|
|
520691 |
+++ b/libnmstate/nm/applier.py
|
|
|
520691 |
@@ -80,7 +80,16 @@ def apply_changes(context, net_state, save_to_disk):
|
|
|
520691 |
_preapply_dns_fix(context, net_state)
|
|
|
520691 |
_mark_nm_external_subordinate_changed(context, net_state)
|
|
|
520691 |
|
|
|
520691 |
- ifaces_desired_state = net_state.ifaces.state_to_edit
|
|
|
520691 |
+ ifaces_desired_state = []
|
|
|
520691 |
+ for iface in net_state.ifaces.all_ifaces.values():
|
|
|
520691 |
+ nm_dev = context.get_nm_dev(iface.name)
|
|
|
520691 |
+ if nm_dev and not nm_dev.get_managed() and not iface.is_desired:
|
|
|
520691 |
+ # We don't change NM.Device from unmanaged to managed unless
|
|
|
520691 |
+ # been asked explicitly in desire state
|
|
|
520691 |
+ continue
|
|
|
520691 |
+ if iface.is_changed or iface.is_desired:
|
|
|
520691 |
+ ifaces_desired_state.append(iface.to_dict())
|
|
|
520691 |
+
|
|
|
520691 |
ifaces_desired_state.extend(
|
|
|
520691 |
_create_proxy_ifaces_desired_state(ifaces_desired_state)
|
|
|
520691 |
)
|
|
|
520691 |
--
|
|
|
520691 |
2.29.2
|
|
|
520691 |
|