From 073f10a52afaa5bc84aafcdc6efd2cd8a7ca2801 Mon Sep 17 00:00:00 2001 From: Marius Gedminas Date: Wed, 14 Oct 2015 08:43:26 +0300 Subject: [PATCH] Python 3: don't convert module arguments to bytes Fixes a test failure: ====================================================================== ERROR: test_module_utils_basic_ansible_module_creation (units.module_utils.test_basic.TestModuleUtilsBasic) ---------------------------------------------------------------------- Traceback (most recent call last): File "/home/mg/src/ansible/test/units/module_utils/test_basic.py", line 250, in test_module_utils_basic_ansible_module_creation supports_check_mode=True, File "/home/mg/src/ansible/lib/ansible/module_utils/basic.py", line 470, in __init__ self._check_required_arguments() File "/home/mg/src/ansible/lib/ansible/module_utils/basic.py", line 1050, in _check_required_arguments self.fail_json(msg="missing required arguments: %s" % ",".join(missing)) File "/home/mg/src/ansible/lib/ansible/module_utils/basic.py", line 1445, in fail_json sys.exit(1) SystemExit: 1 -------------------- >> begin captured stdout << --------------------- {"msg": "missing required arguments: foo", "failed": true} because converting 'foo' to bytes yields b'foo' on Python 3, which doesn't match the native-unicode 'foo' argument spec. --- lib/ansible/module_utils/basic.py | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index 0da00053a0..fbd1cdf468 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -1240,7 +1240,10 @@ class AnsibleModule(object): def _load_params(self): ''' read the input and return a dictionary and the arguments string ''' - params = json_dict_unicode_to_bytes(json.loads(MODULE_COMPLEX_ARGS)) + params = json.loads(MODULE_COMPLEX_ARGS) + if str is bytes: + # Python 2 + params = json_dict_unicode_to_bytes(params) if params is None: params = dict() return params