diff options
author | Nilashish Chakraborty <nilashishchakraborty8@gmail.com> | 2019-10-02 21:13:29 +0530 |
---|---|---|
committer | Toshio Kuratomi <a.badger@gmail.com> | 2019-10-03 11:24:27 -0700 |
commit | e3b61c40bb11aec7fd1aadf896f45716fe1cfc55 (patch) | |
tree | 8d2c5836002e4e775208fd00275f50d8ec1f8ea0 | |
parent | 6d5cac5f510278d1931fc5837cf9fc0edf5ff92a (diff) | |
download | ansible-e3b61c40bb11aec7fd1aadf896f45716fe1cfc55.tar.gz |
IOS-XR: Fix iosxr_lag_interfaces intermittent failures (#62998)
* Fix iosxr_lag_interfaces intermittent failures
* If the dictionary is read out of order from member
the current logic in `diff_list_of_dicts` returns
unwanted diff. Hence use `dict_diff` utils
function instead of sets.
Remove zip() to make existing tests happy
Signed-off-by: NilashishC <nilashishchakraborty8@gmail.com>
* Address review comments
Signed-off-by: NilashishC <nilashishchakraborty8@gmail.com>
(cherry picked from commit 69317a9d3e7286ca5419114b52ebe307aafd702b)
Add changelog for iosxr_lag_interfaces fix
-rw-r--r-- | changelogs/fragments/62998-fix_iosxr_lag_interfaces_random_failures.yaml | 3 | ||||
-rw-r--r-- | lib/ansible/module_utils/network/iosxr/utils/utils.py | 15 |
2 files changed, 11 insertions, 7 deletions
diff --git a/changelogs/fragments/62998-fix_iosxr_lag_interfaces_random_failures.yaml b/changelogs/fragments/62998-fix_iosxr_lag_interfaces_random_failures.yaml new file mode 100644 index 0000000000..2386402456 --- /dev/null +++ b/changelogs/fragments/62998-fix_iosxr_lag_interfaces_random_failures.yaml @@ -0,0 +1,3 @@ +--- +bugfixes: + - iosxr - Fix random idempotence issues with iosxr_lag_interfaces Resource Module (https://github.com/ansible/ansible/pull/62998). diff --git a/lib/ansible/module_utils/network/iosxr/utils/utils.py b/lib/ansible/module_utils/network/iosxr/utils/utils.py index 555a905097..b6d0bef5ac 100644 --- a/lib/ansible/module_utils/network/iosxr/utils/utils.py +++ b/lib/ansible/module_utils/network/iosxr/utils/utils.py @@ -9,7 +9,7 @@ from __future__ import absolute_import, division, print_function __metaclass__ = type from ansible.module_utils.six import iteritems -from ansible.module_utils.network.common.utils import is_masklen, to_netmask +from ansible.module_utils.network.common.utils import dict_diff, is_masklen, to_netmask, search_obj_in_list def remove_command_from_config_list(interface, cmd, commands): @@ -178,12 +178,13 @@ def diff_list_of_dicts(w, h): h = [] 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 w: + h_item = search_obj_in_list(w_item['member'], h, key='member') or {} + d = dict_diff(h_item, w_item) + if d: + if 'member' not in d.keys(): + d['member'] = w_item['member'] + diff.append(d) return diff |