Merge pull request #1799 from dagwieers/raw-script
Make script module use raw module so it does not require python
This commit is contained in:
commit
b54bb2dfed
3 changed files with 26 additions and 15 deletions
|
@ -34,9 +34,6 @@ class ActionModule(object):
|
||||||
def run(self, conn, tmp, module_name, module_args, inject):
|
def run(self, conn, tmp, module_name, module_args, inject):
|
||||||
''' handler for file transfer operations '''
|
''' handler for file transfer operations '''
|
||||||
|
|
||||||
# load up options
|
|
||||||
options = utils.parse_kv(module_args)
|
|
||||||
|
|
||||||
tokens = shlex.split(module_args)
|
tokens = shlex.split(module_args)
|
||||||
source = tokens[0]
|
source = tokens[0]
|
||||||
# FIXME: error handling
|
# FIXME: error handling
|
||||||
|
@ -44,8 +41,6 @@ class ActionModule(object):
|
||||||
source = utils.template(self.runner.basedir, source, inject)
|
source = utils.template(self.runner.basedir, source, inject)
|
||||||
source = utils.path_dwim(self.runner.basedir, source)
|
source = utils.path_dwim(self.runner.basedir, source)
|
||||||
|
|
||||||
exec_rc = None
|
|
||||||
|
|
||||||
# transfer the file to a remote tmp location
|
# transfer the file to a remote tmp location
|
||||||
source = source.replace('\x00','') # why does this happen here?
|
source = source.replace('\x00','') # why does this happen here?
|
||||||
args = args.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
|
# fix file permissions when the copy is done as a different user
|
||||||
if self.runner.sudo and self.runner.sudo_user != 'root':
|
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
|
# add preparation steps to one ssh roundtrip executing the script
|
||||||
self.runner._low_level_exec_command(conn, "chmod +x %s" % tmp_src, tmp)
|
module_args = prepcmd + '; ' + tmp_src + ' ' + args
|
||||||
|
|
||||||
# run it through the command module
|
handler = utils.plugins.action_loader.get('raw', self.runner)
|
||||||
module_args = tmp_src + " " + args + " #USE_SHELL"
|
result = handler.run(conn, tmp, 'raw', module_args, inject)
|
||||||
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
|
||||||
|
|
10
library/raw
10
library/raw
|
@ -16,8 +16,16 @@ description:
|
||||||
given to M(raw) are run directly through the configured remote shell.
|
given to M(raw) are run directly through the configured remote shell.
|
||||||
Standard output, error output and return code are returned when
|
Standard output, error output and return code are returned when
|
||||||
available. There is no change handler support for this module.
|
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:
|
examples:
|
||||||
- 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"
|
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
|
author: Michael DeHaan
|
||||||
'''
|
'''
|
||||||
|
|
|
@ -4,9 +4,11 @@ DOCUMENTATION = """
|
||||||
module: script
|
module: script
|
||||||
short_description: Runs a local script on a remote node
|
short_description: Runs a local script on a remote node
|
||||||
description:
|
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.
|
- 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:
|
options:
|
||||||
free_form:
|
free_form:
|
||||||
description:
|
description:
|
||||||
|
@ -16,7 +18,7 @@ options:
|
||||||
aliases: []
|
aliases: []
|
||||||
examples:
|
examples:
|
||||||
- description: "Example from Ansible Playbooks"
|
- 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:
|
notes:
|
||||||
- It is preferable to write Ansible modules than pushing scripts. Convert your script to an Ansible module for bonus points!
|
- It is preferable to write Ansible modules than pushing scripts. Convert your script to an Ansible module for bonus points!
|
||||||
author: Michael DeHaan
|
author: Michael DeHaan
|
||||||
|
|
Loading…
Reference in a new issue