From e822ce196c651db9f216f5624dc80da5bde34f21 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 (cherry picked from commit cb46e5f06b1c0ffcd16a9a4013c451011f16421d) Add nxos_lag_interfaces fix changelog Signed-off-by: NilashishC --- ...6_fix_nxos_lag_interfaces_idempotence.yaml | 3 +++ .../config/lag_interfaces/lag_interfaces.py | 25 +++++++++++++------ 2 files changed, 20 insertions(+), 8 deletions(-) create mode 100644 changelogs/fragments/66126_fix_nxos_lag_interfaces_idempotence.yaml diff --git a/changelogs/fragments/66126_fix_nxos_lag_interfaces_idempotence.yaml b/changelogs/fragments/66126_fix_nxos_lag_interfaces_idempotence.yaml new file mode 100644 index 00000000000..5a77069048a --- /dev/null +++ b/changelogs/fragments/66126_fix_nxos_lag_interfaces_idempotence.yaml @@ -0,0 +1,3 @@ +--- +bugfixes: + - Fix idempotence issue in nxos_lag_interfaces with Python 3 (https://github.com/ansible/ansible/pull/66126) 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 1f7878194e3..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 get_interface_type, 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):