ansible.builtin.script – Runs a local script on a remote node after transferring it

Note

This module is part of ansible-base and included in all Ansible installations. In most cases, you can use the short module name script even without specifying the collection: keyword. Despite that, we recommend you use the FQCN for easy linking to the module documentation and to avoid conflicting with other collections that may have the same module name.

New in version 0.9: of ansible.builtin

Synopsis

  • The script module takes the script name followed by a list of space-delimited arguments.

  • Either a free form command or cmd parameter is required, see the examples.

  • The local script at path will be transferred to the remote node and then executed.

  • The given script will be processed through the shell environment on the remote node.

  • This module does not require python on the remote system, much like the ansible.builtin.raw module.

  • This module is also supported for Windows targets.

Parameters

Parameter Choices/Defaults Comments
chdir
string
added in 2.4 of ansible.builtin
Change into this directory on the remote node before running the script.
cmd
string
Path to the local script to run followed by optional arguments.
creates
string
added in 1.5 of ansible.builtin
A filename on the remote node, when it already exists, this step will not be run.
decrypt
boolean
added in 2.4 of ansible.builtin
    Choices:
  • no
  • yes ←
This option controls the autodecryption of source files using vault.
executable
string
added in 2.6 of ansible.builtin
Name or path of a executable to invoke the script with.
free_form
string
Path to the local script file followed by optional arguments.
removes
string
added in 1.5 of ansible.builtin
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.

See Also

See also

ansible.builtin.shell

The official documentation on the ansible.builtin.shell module.

ansible.windows.win_shell

The official documentation on the ansible.windows.win_shell module.

Examples

- name: Run a script with arguments (free form)
  script: /some/local/script.sh --some-argument 1234

- name: Run a script with arguments (using 'cmd' parameter)
  script:
    cmd: /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

Authors

  • Ansible Core Team

  • Michael DeHaan