Skip to content

Commit b1094be

Browse files
committed
object_changed(): fix list comparison
1 parent 1c95b80 commit b1094be

File tree

1 file changed

+18
-10
lines changed

1 file changed

+18
-10
lines changed

plugins/module_utils/common.py

Lines changed: 18 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,21 @@
66

77

88
def object_changed(superset, subset, ignore=None):
9+
def list_changed(lst2, lst):
10+
if len(lst2) != len(lst):
11+
return True
12+
for i in range(len(lst)):
13+
if type(lst[i]) == list:
14+
if list_changed(lst2[i], lst[i]):
15+
return True
16+
elif type(lst[i]) == dict:
17+
if len(lst2[i]) != len(lst[i]) or object_changed(lst2[i], lst[i]):
18+
return True
19+
else:
20+
if lst[i] != lst2[i]:
21+
return True
22+
return False
23+
924
changed_keys = []
1025
for key, value in subset.items():
1126
value2 = superset.get(key)
@@ -18,17 +33,10 @@ def object_changed(superset, subset, ignore=None):
1833
elif ignore_value is None:
1934
continue
2035
if type(value) == list:
21-
for i in range(len(value)):
22-
if not value2:
23-
changed_keys.append((key, superset.get(key), subset[key]))
24-
elif type(value[i]) == list or type(value[i]) == dict:
25-
if i >= len(value2) or object_changed(value2[i], value[i]):
26-
changed_keys.append((key, superset.get(key), subset[key]))
27-
else:
28-
if value[i] != value2[i]:
29-
changed_keys.append((key, superset.get(key), subset[key]))
36+
if list_changed(value2, value):
37+
changed_keys.append((key, superset.get(key), subset[key]))
3038
elif type(value) == dict:
31-
if object_changed(value2, value):
39+
if len(value2) != len(value) or object_changed(value2, value):
3240
changed_keys.append((key, superset.get(key), subset[key]))
3341
else:
3442
if value != value2:

0 commit comments

Comments
 (0)