Module: check_mk
Branch: master
Commit: aa1e61093accbed362b33794fef715baa9b2242a
URL:
http://git.mathias-kettner.de/git/?p=check_mk.git;a=commit;h=aa1e61093accbe…
Author: Lars Michelsen <lm(a)mathias-kettner.de>
Date: Sat May 26 20:56:55 2018 +0200
Inventory: Fixed merging of Numerations
When two structured data trees are merged while there is no key
intersection found, e.g. because there are no entries in the Numeration
in the origin tree, then the merged tree contained only one item of the
Numeration.
Change-Id: Idaa1995c602cbef83355b08f453e77c935a776e3
---
cmk/structured_data.py | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/cmk/structured_data.py b/cmk/structured_data.py
index ce1d56a..b6cfde5 100644
--- a/cmk/structured_data.py
+++ b/cmk/structured_data.py
@@ -896,13 +896,24 @@ class Numeration(Leaf):
foreign_keys = foreign._get_numeration_keys()
my_keys = self._get_numeration_keys()
intersect_keys = my_keys.intersection(foreign_keys)
+
+ # In case there is no intersection, append all foreign rows without
+ # merging with own rows
+ if not intersect_keys:
+ self._numeration += foreign._numeration
+ return
+
+ # Try to match rows of both trees based on the keys that are found in
+ # both. Matching rows are updated. Others are appended.
foreign_num = {foreign._prepare_key(entry, intersect_keys): entry
for entry in foreign._numeration}
+
for entry in self._numeration:
key = self._prepare_key(entry, intersect_keys)
if key in foreign_num:
entry.update(foreign_num[key])
del foreign_num[key]
+
self._numeration += foreign_num.values()