script - Runs a local script on a remote node after transferring it

Synopsis

Parameters

Parameter Choices/Defaults Comments
chdir
(added in 2.4)
Change into this directory on the remote node before running the script.
creates
(added in 1.5)
A filename on the remote node, when it already exists, this step will not be run.
decrypt
bool

(added in 2.4)
    Choices:
  • no
  • yes ←
This option controls the autodecryption of source files using vault.
executable
(added in 2.6)
Name or path of a executable to invoke the script with.
free_form
required
Path to the local script file followed by optional arguments.
There is no parameter actually named 'free form', see the examples!
removes
(added in 1.5)
A filename on the remote node, when it does not exist, this step will not be run.

Notes

Note

  • It is usually preferable to write Ansible modules rather than pushing scripts. Convert your script to an Ansible module for bonus points!
  • The ssh connection plugin will force pseudo-tty allocation via -tt when scripts are executed. Pseudo-ttys do not have a stderr channel and all stderr is sent to stdout. If you depend on separated stdout and stderr result keys, please switch to a copy+command set of tasks instead of using script.
  • If the path to the local script contains spaces, it needs to be quoted.
  • This module is also supported for Windows targets.

Examples

- name: Run a script with arguments
  script: /some/local/script.sh --some-argument 1234

- name: Run a script only if file.txt does not exist on the remote node
  script: /some/local/create_file.sh --some-argument 1234
  args:
    creates: /the/created/file.txt

- name: Run a script only if file.txt exists on the remote node
  script: /some/local/remove_file.sh --some-argument 1234
  args:
    removes: /the/removed/file.txt

- name: Run a script using an executable in a non-system path
  script: /some/local/script
  args:
    executable: /some/remote/executable

- name: Run a script using an executable in a system path
  script: /some/local/script.py
  args:
    executable: python3

Status

This module is flagged as stableinterface which means that the maintainers for this module guarantee that no backward incompatible interface changes will be made.

Maintenance

This module is flagged as core which means that it is maintained by the Ansible Core Team. See Module Maintenance & Support for more info.

For a list of other modules that are also maintained by the Ansible Core Team, see here.

Support

For more information about Red Hat’s support of this module, please refer to this Knowledge Base article

Author

  • Ansible Core Team
  • Michael DeHaan

Hint

If you notice any issues in this documentation you can edit this document to improve it.