From c17e9fe24af9ba876f93d94fe0b8a8f76da2bc60 Mon Sep 17 00:00:00 2001 From: Rafael Guterres Jeffman <rjeffman@redhat.com> Date: Tue, 13 Apr 2021 19:08:14 -0300 Subject: [PATCH] Fix compare_args_ipa when passing None as parameter. There were no test for the arguments of compare_args_ipa() to check if they were `None`, and they were used in contexts where `None` would raise exceptions. A test was added to return `False` if only one of the parameters is `None`, and `True` if both are None. --- plugins/module_utils/ansible_freeipa_module.py | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/plugins/module_utils/ansible_freeipa_module.py b/plugins/module_utils/ansible_freeipa_module.py index 5ac52c73..02e02630 100644 --- a/plugins/module_utils/ansible_freeipa_module.py +++ b/plugins/module_utils/ansible_freeipa_module.py @@ -285,6 +285,23 @@ def compare_args_ipa(module, args, ipa): # noqa """ base_debug_msg = "Ansible arguments and IPA commands differed. " + # If both args and ipa are None, return there's no difference. + # If only one is None, return there is a difference. + # This tests avoid unecessary invalid access to attributes. + if args is None and ipa is None: + return True + if args is None or ipa is None: + module.debug( + base_debug_msg + "args is%s None an ipa is%s None" % ( + "" if args is None else " not", "" if ipa is None else " not", + ) + ) + return False + + # Fail if args or ipa are not dicts. + if not (isinstance(args, dict) and isinstance(ipa, dict)): + raise TypeError("Expected 'dicts' to compare.") + for key in args.keys(): if key not in ipa: module.debug( -- GitLab