diff --git a/BZ_2159679-ovsdb-Fix-verification-error-when-ovs-daemon-off.patch b/BZ_2159679-ovsdb-Fix-verification-error-when-ovs-daemon-off.patch new file mode 100644 index 0000000..1b3ffb0 --- /dev/null +++ b/BZ_2159679-ovsdb-Fix-verification-error-when-ovs-daemon-off.patch @@ -0,0 +1,72 @@ +From ae3f45a725cb2639ef9e4c6fab1aead0debe7c29 Mon Sep 17 00:00:00 2001 +From: Gris Ge +Date: Tue, 10 Jan 2023 19:56:23 +0800 +Subject: [PATCH] ovsdb: Fix verification error when ovs daemon off + +When applying `ovs-db: {}` with ovs daemon stopped, nmstate will fail +with: + + NmstateError: VerificationError: Verification failure: + ovsdb.external_ids desire '{}', current 'null' + +Fixed by treating `ovs-db: {}` as + +```yml +ovs-db: + external_ids: {} + other_config: {} +``` + +Unit test case and integration test case included. + +Signed-off-by: Gris Ge +--- + rust/src/lib/query_apply/ovs.rs | 11 ++++++++++- + rust/src/lib/unit_tests/ovsdb.rs | 11 +++++++++++ + 2 files changed, 21 insertions(+), 1 deletion(-) + +diff --git a/rust/src/lib/query_apply/ovs.rs b/rust/src/lib/query_apply/ovs.rs +index c1e0cf2e..13c4079d 100644 +--- a/rust/src/lib/query_apply/ovs.rs ++++ b/rust/src/lib/query_apply/ovs.rs +@@ -30,8 +30,17 @@ impl MergedOvsDbGlobalConfig { + other_config: Some(other_config), + prop_list: vec!["external_ids", "other_config"], + }; ++ + let desired_value = serde_json::to_value(&desired)?; +- let current_value = serde_json::to_value(current)?; ++ let current_value = if current.is_none() { ++ serde_json::to_value(&OvsDbGlobalConfig { ++ external_ids: Some(HashMap::new()), ++ other_config: Some(HashMap::new()), ++ prop_list: Vec::new(), ++ })? ++ } else { ++ serde_json::to_value(current)? ++ }; + + if let Some((reference, desire, current)) = get_json_value_difference( + "ovsdb".to_string(), +diff --git a/rust/src/lib/unit_tests/ovsdb.rs b/rust/src/lib/unit_tests/ovsdb.rs +index 1c9618a2..698f1a65 100644 +--- a/rust/src/lib/unit_tests/ovsdb.rs ++++ b/rust/src/lib/unit_tests/ovsdb.rs +@@ -156,3 +156,14 @@ other_config: {} + expect.other_config.as_ref().unwrap() + ); + } ++ ++#[test] ++fn test_ovsdb_verify_null_current() { ++ let desired: OvsDbGlobalConfig = serde_yaml::from_str("{}").unwrap(); ++ let pre_apply_current = desired.clone(); ++ let current = desired.clone(); ++ ++ let merged_ovsdb = MergedOvsDbGlobalConfig::new(desired, pre_apply_current); ++ ++ merged_ovsdb.verify(¤t).unwrap(); ++} +-- +2.39.0 + diff --git a/nmstate.spec b/nmstate.spec index bc1eb83..51e6c7c 100644 --- a/nmstate.spec +++ b/nmstate.spec @@ -4,7 +4,7 @@ Name: nmstate Version: 2.2.3 -Release: 2%{?dist} +Release: 3%{?dist} Summary: Declarative network manager API License: LGPLv2+ URL: https://github.com/%{srcname}/%{srcname} @@ -12,6 +12,7 @@ Source0: https://github.com/nmstate/nmstate/releases/download/v%{version} Source1: https://github.com/nmstate/nmstate/releases/download/v%{version}/nmstate-%{version}.tar.gz.asc Source2: https://nmstate.io/nmstate.gpg Source3: https://github.com/nmstate/nmstate/releases/download/v%{version}/nmstate-vendor-%{version}.tar.xz +Patch1: BZ_2159679-ovsdb-Fix-verification-error-when-ovs-daemon-off.patch BuildRequires: python3-devel BuildRequires: python3-setuptools BuildRequires: gnupg2 @@ -150,6 +151,9 @@ popd /sbin/ldconfig %changelog +* Wed Jan 11 2023 Gris Ge - 2.2.3-3 +- Fix OVSDB verification error + * Tue Jan 10 2023 Gris Ge - 2.2.3-2 - Enable error message for rpm CI gating diff --git a/tests/cli_query_reapply.sh b/tests/cli_query_reapply.sh index 71dd38e..cf1492f 100755 --- a/tests/cli_query_reapply.sh +++ b/tests/cli_query_reapply.sh @@ -4,4 +4,6 @@ TMP_FILE=$(mktemp /tmp/nmstate.XXXXXX.yaml) nmstatectl show > $TMP_FILE -nmstatectl set $TMP_FILE +cat $TMP_FILE + +nmstatectl set $TMP_FILE -vvv