Make script module use raw module so it does not require python

pull/1799/head
Dag Wieers 12 years ago
parent 3d3deb9797
commit eb36ff45b9

@ -34,9 +34,6 @@ class ActionModule(object):
def run(self, conn, tmp, module_name, module_args, inject):
''' handler for file transfer operations '''
# load up options
options = utils.parse_kv(module_args)
tokens = shlex.split(module_args)
source = tokens[0]
# FIXME: error handling
@ -44,8 +41,6 @@ class ActionModule(object):
source = utils.template(self.runner.basedir, source, inject)
source = utils.path_dwim(self.runner.basedir, source)
exec_rc = None
# transfer the file to a remote tmp location
source = source.replace('\x00','') # why does this happen here?
args = args.replace('\x00','') # why does this happen here?
@ -56,12 +51,18 @@ class ActionModule(object):
# fix file permissions when the copy is done as a different user
if self.runner.sudo and self.runner.sudo_user != 'root':
self.runner._low_level_exec_command(conn, "chmod a+r %s" % tmp_src, tmp)
prepcmd = 'chmod a+rx %s' % tmp_src
else:
prepcmd = 'chmod +x %s' % tmp_src
# add preparation steps to one ssh roundtrip executing the script
module_args = prepcmd + '; ' + tmp_src + ' ' + args
# make executable
self.runner._low_level_exec_command(conn, "chmod +x %s" % tmp_src, tmp)
handler = utils.plugins.action_loader.get('raw', self.runner)
result = handler.run(conn, tmp, 'raw', module_args, inject)
# run it through the command module
module_args = tmp_src + " " + args + " #USE_SHELL"
return self.runner._execute_module(conn, tmp, 'command', module_args, inject=inject)
# clean up after
if tmp.find("tmp") != -1 and C.DEFAULT_KEEP_REMOTE_FILES != '1':
self.runner._low_level_exec_command(conn, 'rm -rf %s >/dev/null 2>&1' % tmp, tmp)
return result

@ -16,8 +16,16 @@ description:
given to M(raw) are run directly through the configured remote shell.
Standard output, error output and return code are returned when
available. There is no change handler support for this module.
- This module does not require python on the remote system, much like
the M(script) module.
examples:
- 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"
code: "action: raw yum -y install python-simplejson"
notes:
- If you want to execute a command securely and predictably, it may be
better to use the M(command) module instead. Best practices when writing
playbooks will follow the trend of using M(command) unless M(shell) is
explicitly required. When running ad-hoc commands, use your best
judgement.
author: Michael DeHaan
'''

@ -4,9 +4,11 @@ DOCUMENTATION = """
module: script
short_description: Runs a local script on a remote node
description:
- The M(script) module takes the script name followed by a list of space-delimited arguments.
- The M(script) module takes the script name followed by a list of
space-delimited arguments.
- The given script will be processed through the shell environment.
- See also the M(command) and M(shell) modules.
- This module does not require python on the remote system, much like
the M(raw) module.
options:
free_form:
description:
@ -16,7 +18,7 @@ options:
aliases: []
examples:
- description: "Example from Ansible Playbooks"
code: "script: /some/local/script.sh --some-arguments 1234"
code: "action: script /some/local/script.sh --some-arguments 1234"
notes:
- It is preferable to write Ansible modules than pushing scripts. Convert your script to an Ansible module for bonus points!
author: Michael DeHaan

Loading…
Cancel
Save