summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Coca <bcoca@ansible.com>2015-12-23 10:42:40 -0500
committerBrian Coca <bcoca@ansible.com>2015-12-23 10:42:40 -0500
commit9a118ce2134abf1dc57ee8269e02bcd71419ac03 (patch)
treec42fab143e3bb431daa92e62ac0961922c85c643
parentb201cf2ee13a9e4e1c5dc222043e3f1c84940044 (diff)
parent957b376f9eb959f4f3627a622f7776a26442bf9c (diff)
downloadansible-9a118ce2134abf1dc57ee8269e02bcd71419ac03.tar.gz
Merge pull request #13648 from bcoca/fix_invocation_and_moderrors
better module error handling
-rw-r--r--lib/ansible/module_utils/basic.py4
-rw-r--r--lib/ansible/plugins/action/__init__.py5
-rw-r--r--lib/ansible/plugins/action/normal.py5
3 files changed, 9 insertions, 5 deletions
diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py
index f9dc964e67..6fd382aa49 100644
--- a/lib/ansible/module_utils/basic.py
+++ b/lib/ansible/module_utils/basic.py
@@ -1531,7 +1531,7 @@ class AnsibleModule(object):
if not 'changed' in kwargs:
kwargs['changed'] = False
if 'invocation' not in kwargs:
- kwargs['invocation'] = self.params
+ kwargs['invocation'] = {'module_args': self.params}
kwargs = remove_values(kwargs, self.no_log_values)
self.do_cleanup_files()
print(self.jsonify(kwargs))
@@ -1543,7 +1543,7 @@ class AnsibleModule(object):
assert 'msg' in kwargs, "implementation error -- msg to explain the error is required"
kwargs['failed'] = True
if 'invocation' not in kwargs:
- kwargs['invocation'] = self.params
+ kwargs['invocation'] = {'module_args': self.params}
kwargs = remove_values(kwargs, self.no_log_values)
self.do_cleanup_files()
print(self.jsonify(kwargs))
diff --git a/lib/ansible/plugins/action/__init__.py b/lib/ansible/plugins/action/__init__.py
index 765ba66316..5383f8afd4 100644
--- a/lib/ansible/plugins/action/__init__.py
+++ b/lib/ansible/plugins/action/__init__.py
@@ -460,9 +460,10 @@ class ActionBase(with_metaclass(ABCMeta, object)):
if 'stderr' in res and res['stderr'].startswith(u'Traceback'):
data['exception'] = res['stderr']
else:
- data['msg'] = res.get('stdout', u'')
+ data['msg'] = "MODULE FAILURE"
+ data['module_stdout'] = res.get('stdout', u'')
if 'stderr' in res:
- data['msg'] += res['stderr']
+ data['module_stderr'] = res['stderr']
# pre-split stdout into lines, if stdout is in the data and there
# isn't already a stdout_lines value there
diff --git a/lib/ansible/plugins/action/normal.py b/lib/ansible/plugins/action/normal.py
index f9b55e1ff5..932ad8309c 100644
--- a/lib/ansible/plugins/action/normal.py
+++ b/lib/ansible/plugins/action/normal.py
@@ -18,6 +18,7 @@ from __future__ import (absolute_import, division, print_function)
__metaclass__ = type
from ansible.plugins.action import ActionBase
+from ansible.utils.vars import merge_hash
class ActionModule(ActionBase):
@@ -27,7 +28,9 @@ class ActionModule(ActionBase):
task_vars = dict()
results = super(ActionModule, self).run(tmp, task_vars)
- results.update(self._execute_module(tmp=tmp, task_vars=task_vars))
+ # remove as modules might hide due to nolog
+ del results['invocation']['module_args']
+ results = merge_hash(results, self._execute_module(tmp=tmp, task_vars=task_vars))
# Remove special fields from the result, which can only be set
# internally by the executor engine. We do this only here in
# the 'normal' action, as other action plugins may set this.