From 5d435c375c6a970984d47ab96fd984f497ccab40 Mon Sep 17 00:00:00 2001
From: Thomas Woerner <twoerner@redhat.com>
Date: Tue, 22 Oct 2019 12:28:53 +0200
Subject: [PATCH] ansible_freeipa_module: Convert int to string in
 compare_args_ipa

With IPA 4.5 integers for examle in pwpolicy_find are returned as
integer values. The internally generated value will be converted from
integer to string (using to_text) if the value from find call result
is a string (or unicode for Python2).
---
 plugins/module_utils/ansible_freeipa_module.py | 14 ++++++++++++--
 1 file changed, 12 insertions(+), 2 deletions(-)

diff --git a/plugins/module_utils/ansible_freeipa_module.py b/plugins/module_utils/ansible_freeipa_module.py
index eedb5c28..12c2b29c 100644
--- a/plugins/module_utils/ansible_freeipa_module.py
+++ b/plugins/module_utils/ansible_freeipa_module.py
@@ -38,6 +38,11 @@ from ipapython.ipautil import run
 from ipaplatform.paths import paths
 from ipalib.krb_utils import get_credentials_if_valid
 from ansible.module_utils._text import to_text
+import six
+
+
+if six.PY3:
+    unicode = str
 
 
 def valid_creds(module, principal):
@@ -185,8 +190,13 @@ def compare_args_ipa(module, args, ipa):
             # are lists, but not all.
             if isinstance(ipa_arg, tuple):
                 ipa_arg = list(ipa_arg)
-            if isinstance(ipa_arg, list) and not isinstance(arg, list):
-                arg = [arg]
+            if isinstance(ipa_arg, list):
+                if not isinstance(arg, list):
+                    arg = [arg]
+                if isinstance(ipa_arg[0], str) and isinstance(arg[0], int):
+                    arg = [to_text(_arg) for _arg in arg]
+                if isinstance(ipa_arg[0], unicode) and isinstance(arg[0], int):
+                    arg = [to_text(_arg) for _arg in arg]
             # module.warn("%s <=> %s" % (arg, ipa_arg))
             if set(arg) != set(ipa_arg):
                 # module.warn("DIFFERENT")
-- 
GitLab