From cc6627cdd63552fe9a2158065fb5cf5e7540c4e4 Mon Sep 17 00:00:00 2001 From: James Cammarata Date: Thu, 17 Sep 2015 16:04:47 -0400 Subject: [PATCH] Remove custom json encoder cleaner and strip proxy var stuff out before encoding Fixes #12349 --- lib/ansible/executor/task_executor.py | 17 ++++++++++++++--- lib/ansible/utils/vars.py | 12 +----------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/lib/ansible/executor/task_executor.py b/lib/ansible/executor/task_executor.py index e643c3ae0f..acab6d668f 100644 --- a/lib/ansible/executor/task_executor.py +++ b/lib/ansible/executor/task_executor.py @@ -35,7 +35,7 @@ from ansible.playbook.task import Task from ansible.template import Templar from ansible.utils.listify import listify_lookup_plugin_terms from ansible.utils.unicode import to_unicode -from ansible.utils.vars import json_variable_cleaner +from ansible.vars.unsafe_proxy import UnsafeProxy from ansible.utils.debug import debug @@ -124,10 +124,21 @@ class TaskExecutor: if 'changed' not in res: res['changed'] = False + def _clean_res(res): + if isinstance(res, dict): + for k in res.keys(): + res[k] = _clean_res(res[k]) + elif isinstance(res, list): + for idx,item in enumerate(res): + res[idx] = _clean_res(item) + elif isinstance(res, UnsafeProxy): + return res._obj + return res + debug("dumping result to json") - result = json.dumps(res, default=json_variable_cleaner) + res = _clean_res(res) debug("done dumping result, returning") - return result + return res except AnsibleError as e: return dict(failed=True, msg=to_unicode(e, nonstring='simplerepr')) finally: diff --git a/lib/ansible/utils/vars.py b/lib/ansible/utils/vars.py index 7d150e5fa5..c1de70a1ce 100644 --- a/lib/ansible/utils/vars.py +++ b/lib/ansible/utils/vars.py @@ -20,6 +20,7 @@ from __future__ import (absolute_import, division, print_function) __metaclass__ = type import ast +from json import JSONEncoder from collections import MutableMapping from six import iteritems, string_types @@ -128,14 +129,3 @@ def isidentifier(ident): return True -def json_variable_cleaner(obj): - ''' - Used as the default= parameter to json.dumps(), this method helps - clear out UnsafeProxy variables so they can be properly JSON encoded - ''' - from ansible.vars.unsafe_proxy import UnsafeProxy - if isinstance(obj, UnsafeProxy): - return obj._obj - else: - return obj -