From ddda1163e4a9ee5c91d678b196ebd37863f1520e Mon Sep 17 00:00:00 2001
From: Christian Poessinger <christian@poessinger.com>
Date: Tue, 22 Feb 2022 10:29:32 +0100
Subject: vyos.configdict: T4263: leaf_node_changed() must also honor valueLess
 CLI nodes

If a valueLess node is added or removed from the CLI, a call to
leaf_node_changed() will not detect it.

If node is valueLess, on change old or new (depending on addition or deletion)
will be {} and is treated as None.

Add handler for this special case where old or new is an instance of a
dictionary but empty.

(cherry picked from commit 149f704a172fb14f16d0ba00ef237b972539492f)
---
 python/vyos/configdict.py | 6 ++++++
 1 file changed, 6 insertions(+)

diff --git a/python/vyos/configdict.py b/python/vyos/configdict.py
index b18db1fb8..1f245f3d2 100644
--- a/python/vyos/configdict.py
+++ b/python/vyos/configdict.py
@@ -117,6 +117,12 @@ def leaf_node_changed(conf, path):
     D.set_level(conf.get_level())
     (new, old) = D.get_value_diff(path)
     if new != old:
+        if isinstance(old, dict):
+            # valueLess nodes return {} if node is deleted
+            return True
+        if old is None and isinstance(new, dict):
+            # valueLess nodes return {} if node was added
+            return True
         if old is None:
             return []
         if isinstance(old, str):
-- 
cgit v1.2.3