From f4244ca2859148a0d871ce74eeff8bbe875e1d3e Mon Sep 17 00:00:00 2001 From: Gris Ge Date: Wed, 26 Jun 2024 11:40:24 +0800 Subject: [PATCH] Fix global DNS on second apply Resolves: RHEL-44623 Signed-off-by: Gris Ge --- RHEL-44623-fix-global-dns.patch | 70 +++++++++++++++++++++++++++++++++ nmstate.spec | 6 ++- 2 files changed, 75 insertions(+), 1 deletion(-) create mode 100644 RHEL-44623-fix-global-dns.patch diff --git a/RHEL-44623-fix-global-dns.patch b/RHEL-44623-fix-global-dns.patch new file mode 100644 index 0000000..bebdfc7 --- /dev/null +++ b/RHEL-44623-fix-global-dns.patch @@ -0,0 +1,70 @@ +From 364842c0c09f9799a2c48a1bc3ce4debb1a3ddc2 Mon Sep 17 00:00:00 2001 +From: Gris Ge +Date: Tue, 18 Jun 2024 13:44:55 +0800 +Subject: [PATCH] dns: Do not touch iface DNS when apply identical DNS state + +When applying the same DNS only desire state again, nmstate incorrectly +purged interface DNS. + +The root cause is we only set `self.use_global_dns` to True when +DNS changed. The fix is set `self.use_global_dns` to True always unless +iface DNS is required. + +Signed-off-by: Gris Ge +--- + libnmstate/net_state.py | 12 +++++------- + 1 file changed, 5 insertions(+), 7 deletions(-) + +diff --git a/libnmstate/net_state.py b/libnmstate/net_state.py +index 7b208daa..fe6fc31d 100644 +--- a/libnmstate/net_state.py ++++ b/libnmstate/net_state.py +@@ -32,7 +32,7 @@ class NetState: + gen_conf_mode=False, + ignored_dns_ifaces=None, + ): +- self.use_global_dns = False ++ self.use_global_dns = True + if current_state is None: + current_state = {} + self._ifaces = Ifaces( +@@ -76,17 +76,17 @@ class NetState: + "interface profile, using global DNS" + ) + logging.warning( +- "Storing DNS to NetworkManager via global dns API, " +- "this will cause __all__ interface level DNS settings " +- "been ignored" ++ "Storing DNS to NetworkManager via global DNS " ++ "API, this will cause __all__ interface level " ++ "DNS settings been ignored" + ) +- self.use_global_dns = True + else: + if self.dns.is_purge() or self._is_iface_dns_prefered(): + try: + self._ifaces.gen_dns_metadata( + self._dns, self._route, ignored_dns_ifaces + ) ++ self.use_global_dns = False + except NmstateValueError as e: + if ( + gen_conf_mode +@@ -99,14 +99,12 @@ class NetState: + "API, this will cause __all__ interface level " + "DNS settings been ignored" + ) +- self.use_global_dns = True + elif self.dns.config_changed: + logging.warning( + "Storing DNS to NetworkManager via global DNS " + "API, this will cause __all__ interface level " + "DNS settings been ignored" + ) +- self.use_global_dns = True + + self._ifaces.gen_route_metadata(self._route) + self._ifaces.gen_route_rule_metadata(self._route_rule, self._route) +-- +2.45.2 + diff --git a/nmstate.spec b/nmstate.spec index 60bd266..2ad1069 100644 --- a/nmstate.spec +++ b/nmstate.spec @@ -4,7 +4,7 @@ Name: nmstate Version: 1.4.6 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Declarative network manager API License: LGPLv2+ URL: https://github.com/%{srcname}/%{srcname} @@ -15,6 +15,7 @@ Source3: %{url}/releases/download/v%{version}/%{srcname}-vendor-%{version # Patches 0X are reserved to downstream only Patch0: BZ_2132570-nm-reverse-IPv6-order-before-adding-them-to-setting.patch Patch10: 0001-clib-Use-build.rs-to-fix-SONAME.patch +Patch11: RHEL-44623-fix-global-dns.patch BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: gnupg2 @@ -142,6 +143,9 @@ popd /sbin/ldconfig %changelog +* Wed Jun 26 2024 Gris Ge - 1.4.6-3 +- Fix global DNS on second apply. RHEL-44623 + * Fri May 17 2024 Gris Ge - 1.4.6-2 - Fix clib SONAME. RHEL-32218