From cb46e5f06b1c0ffcd16a9a4013c451011f16421d Mon Sep 17 00:00:00 2001 From: Nilashish Chakraborty Date: Tue, 7 Jan 2020 13:12:54 +0530 Subject: [PATCH] Use dict_diff instead of sets to take diff lag members (#66126) Signed-off-by: NilashishC --- .../config/lag_interfaces/lag_interfaces.py | 25 +++++++++++++------ 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/lib/ansible/module_utils/network/nxos/config/lag_interfaces/lag_interfaces.py b/lib/ansible/module_utils/network/nxos/config/lag_interfaces/lag_interfaces.py index 226706e6f38..da6bfd0d410 100644 --- a/lib/ansible/module_utils/network/nxos/config/lag_interfaces/lag_interfaces.py +++ b/lib/ansible/module_utils/network/nxos/config/lag_interfaces/lag_interfaces.py @@ -14,9 +14,9 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from ansible.module_utils.network.common.cfg.base import ConfigBase -from ansible.module_utils.network.common.utils import to_list, remove_empties +from ansible.module_utils.network.common.utils import to_list, remove_empties, dict_diff, search_obj_in_list from ansible.module_utils.network.nxos.facts.facts import Facts -from ansible.module_utils.network.nxos.utils.utils import normalize_interface, search_obj_in_list +from ansible.module_utils.network.nxos.utils.utils import normalize_interface class Lag_interfaces(ConfigBase): @@ -184,13 +184,22 @@ class Lag_interfaces(ConfigBase): commands.extend(self.del_all_commands(h)) return commands - def diff_list_of_dicts(self, w, h): + def diff_list_of_dicts(self, want, have): + if not want: + want = [] + + if not have: + have = [] + diff = [] - set_w = set(tuple(d.items()) for d in w) - set_h = set(tuple(d.items()) for d in h) - difference = set_w.difference(set_h) - for element in difference: - diff.append(dict((x, y) for x, y in element)) + for w_item in want: + h_item = search_obj_in_list(w_item['member'], have, key='member') or {} + delta = dict_diff(h_item, w_item) + if delta: + if 'member' not in delta.keys(): + delta['member'] = w_item['member'] + diff.append(delta) + return diff def intersect_list_of_dicts(self, w, h):