summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJames Cammarata <jimi@sngx.net>2015-09-17 16:04:47 -0400
committerJames Cammarata <jimi@sngx.net>2015-09-17 16:04:47 -0400
commitcc6627cdd63552fe9a2158065fb5cf5e7540c4e4 (patch)
tree2781b115bbdc945c98ff654ca7fdd670432b84b2
parenta431121f9f14375d5f9d9795072dacda0fddddba (diff)
downloadansible-cc6627cdd63552fe9a2158065fb5cf5e7540c4e4.tar.gz
Remove custom json encoder cleaner and strip proxy var stuff out before encoding
Fixes #12349
-rw-r--r--lib/ansible/executor/task_executor.py17
-rw-r--r--lib/ansible/utils/vars.py12
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
-