From efbcd8bda086f0d28ab973d2d9276040c34a18d5 Mon Sep 17 00:00:00 2001 From: Toshio Kuratomi Date: Tue, 3 May 2016 07:21:00 -0700 Subject: [PATCH] Add a jsonarg type to arg spec (#15701) This makes sure that if we get a list or dict that it is turned into a jsonified string. --- lib/ansible/module_utils/basic.py | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index a8356d95a79..d8ab7a6b156 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -609,6 +609,7 @@ class AnsibleModule(object): 'float': self._check_type_float, 'path': self._check_type_path, 'raw': self._check_type_raw, + 'jsonarg': self._check_type_jsonarg, } if not bypass_checks: self._check_required_arguments() @@ -1395,6 +1396,16 @@ class AnsibleModule(object): value = self._check_type_str(value) return os.path.expanduser(os.path.expandvars(value)) + def _check_type_jsonarg(self, value): + # Return a jsonified string. Sometimes the controller turns a json + # string into a dict/list so transform it back into json here + if isinstance(value, (unicode, bytes)): + return value + else: + if isinstance(value (list, tuple, dict)): + return json.dumps(value) + raise TypeError('%s cannot be converted to a json string' % type(value)) + def _check_type_raw(self, value): return value