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

This commit is contained in:
Dag Wieers 2012-12-23 22:20:34 +01:00
parent 3d3deb9797
commit eb36ff45b9
3 changed files with 26 additions and 15 deletions

View file

@ -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
# make executable
self.runner._low_level_exec_command(conn, "chmod +x %s" % tmp_src, tmp)
# add preparation steps to one ssh roundtrip executing the script
module_args = prepcmd + '; ' + tmp_src + ' ' + args
# 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)
handler = utils.plugins.action_loader.get('raw', self.runner)
result = handler.run(conn, tmp, 'raw', module_args, 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

View file

@ -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
'''

View file

@ -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