Add return code and error output to raw module

Since we use 'raw' heavily on equipment where 'command' and 'shell' are not (yet) working (and python may need to be installed first using raw) these improvements are necessary in order to write more complex scripts (with return code handling and separated stdout/stderr).

This change includes the following changes:

 - exec_command() now returns the return code of the command
 - _low_level_exec_command() now returns a dict, including 'rc', 'stdout' and 'stderr'
 - all users of the above interfaces have been improved to make use of the above changes
 - all connection plugins have been modified to return rc and stderr
 - fix the newline problem (stdout and stderr would have excess newlines)

In a future commit I intend to add assertions or error handling code to verify the return code in those places where it wasn't done. Since only the output was available, the return code was ignored, even though we expect them to be 0.
reviewable/pr18780/r1
Dag Wieers 12 years ago
parent 0fe2d4e5e3
commit 0ef97cd917

@ -159,7 +159,7 @@ def command(data):
stderr = '' stderr = ''
log("got stdout: %s" % stdout) log("got stdout: %s" % stdout)
return dict(stdout=stdout, stderr=stderr) return dict(rc=p.returncode, stdout=stdout, stderr=stderr)
def fetch(data): def fetch(data):
if 'in_path' not in data: if 'in_path' not in data:

10
raw

@ -13,11 +13,11 @@ description:
all core modules require it. Another is speaking to any devices such as all core modules require it. Another is speaking to any devices such as
routers that do not have any Python installed. In any other case, using routers that do not have any Python installed. In any other case, using
the M(shell) or M(command) module is much more appropriate. Arguments the M(shell) or M(command) module is much more appropriate. Arguments
given to M(raw) are run directly through the configured remote shell and given to M(raw) are run directly through the configured remote shell.
only output is returned. There is no error detection or change handler Standard output, error output and return code are returned when
support for this module available. There is no change handler support for this module.
examples: examples:
- code: ansible newhost.example.com -m raw -a "yum -y install python-simplejson" - description: Example from C(/usr/bin/ansible) to bootstrap a legacy python 2.4 host
description: Example from C(/usr/bin/ansible) to bootstrap a legacy python 2.4 host code: ansible newhost.example.com -m raw -a "yum -y install python-simplejson"
author: Michael DeHaan author: Michael DeHaan
''' '''

Loading…
Cancel
Save