ansible.builtin.command (v2.16.5) — module

Execute commands on targets

| "added in version" historical of ansible.builtin"

Authors: Ansible Core Team, Michael DeHaan

This plugin has a corresponding action plugin.

Install Ansible via pip

Install with pip install ansible-core==2.16.5

Description

The M(ansible.builtin.command) module takes the command name followed by a list of space-delimited arguments.

The given command will be executed on all selected nodes.

The command(s) will not be processed through the shell, so variables like C($HOSTNAME) and operations like C("*"), C("<"), C(">"), C("|"), C(";") and C("&") will not work. Use the M(ansible.builtin.shell) module if you need these features.

To create C(command) tasks that are easier to read than the ones using space-delimited arguments, pass parameters using the C(args) L(task keyword,https://docs.ansible.com/ansible/latest/reference_appendices/playbooks_keywords.html#task) or use O(cmd) parameter.

Either a free form command or O(cmd) parameter is required, see the examples.

For Windows targets, use the M(ansible.windows.win_command) module instead.

Usage examples

  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Return motd to registered var
  ansible.builtin.command: cat /etc/motd
  register: mymotd
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# free-form (string) arguments, all arguments on one line
- name: Run command if /path/to/database does not exist (without 'args')
  ansible.builtin.command: /usr/bin/make_database.sh db_user db_name creates=/path/to/database
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# free-form (string) arguments, some arguments on separate lines with the 'args' keyword
# 'args' is a task keyword, passed at the same level as the module
- name: Run command if /path/to/database does not exist (with 'args' keyword)
  ansible.builtin.command: /usr/bin/make_database.sh db_user db_name
  args:
    creates: /path/to/database
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# 'cmd' is module parameter
- name: Run command if /path/to/database does not exist (with 'cmd' parameter)
  ansible.builtin.command:
    cmd: /usr/bin/make_database.sh db_user db_name
    creates: /path/to/database
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Change the working directory to somedir/ and run the command as db_owner if /path/to/database does not exist
  ansible.builtin.command: /usr/bin/make_database.sh db_user db_name
  become: yes
  become_user: db_owner
  args:
    chdir: somedir/
    creates: /path/to/database
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
# argv (list) arguments, each argument on a separate line, 'args' keyword not necessary
# 'argv' is a parameter, indented one level from the module
- name: Use 'argv' to send a command as a list - leave 'command' empty
  ansible.builtin.command:
    argv:
      - /usr/bin/make_database.sh
      - Username with whitespace
      - dbname with whitespace
    creates: /path/to/database
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Run command using argv with mixed argument formats
  ansible.builtin.command:
    argv:
      - /path/to/binary
      - -v
      - --debug
      - --longopt
      - value for longopt
      - --other-longopt=value for other longopt
      - positional
  • Success
    Steampunk Spotter scan finished with no errors, warnings or hints.
- name: Safely use templated variable to run command. Always use the quote filter to avoid injection issues
  ansible.builtin.command: cat {{ myfile|quote }}
  register: myoutput

Inputs

    
cmd:
    description:
    - The command to run.
    type: str

argv:
    description:
    - Passes the command as a list rather than a string.
    - Use O(argv) to avoid quoting values that would otherwise be interpreted incorrectly
      (for example "user name").
    - Only the string (free form) or the list (argv) form can be provided, not both.  One
      or the other must be provided.
    elements: str
    type: list
    version_added: '2.6'
    version_added_collection: ansible.builtin

chdir:
    description:
    - Change into this directory before running the command.
    type: path
    version_added: '0.6'
    version_added_collection: ansible.builtin

stdin:
    description:
    - Set the stdin of the command directly to the specified value.
    type: str
    version_added: '2.4'
    version_added_collection: ansible.builtin

creates:
    description:
    - A filename or (since 2.0) glob pattern. If a matching file already exists, this
      step B(will not) be run.
    - This is checked before O(removes) is checked.
    type: path

removes:
    description:
    - A filename or (since 2.0) glob pattern. If a matching file exists, this step B(will)
      be run.
    - This is checked after O(creates) is checked.
    type: path
    version_added: '0.8'
    version_added_collection: ansible.builtin

free_form:
    description:
    - The command module takes a free form string as a command to run.
    - There is no actual parameter named 'free form'.

strip_empty_ends:
    default: true
    description:
    - Strip empty lines from the end of stdout/stderr in result.
    type: bool
    version_added: '2.8'
    version_added_collection: ansible.builtin

stdin_add_newline:
    default: true
    description:
    - If set to V(true), append a newline to stdin data.
    type: bool
    version_added: '2.8'
    version_added_collection: ansible.builtin

expand_argument_vars:
    default: true
    description:
    - Expands the arguments that are variables, for example C($HOME) will be expanded
      before being passed to the command to run.
    - Set to V(false) to disable expansion and treat the value as a literal argument.
    type: bool
    version_added: '2.16'
    version_added_collection: ansible.builtin

Outputs

cmd:
  description: The command executed by the task.
  returned: always
  sample:
  - echo
  - hello
  type: list
delta:
  description: The command execution delta time.
  returned: always
  sample: '0:00:00.001529'
  type: str
end:
  description: The command execution end time.
  returned: always
  sample: '2017-09-29 22:03:48.084657'
  type: str
msg:
  description: changed
  returned: always
  sample: true
  type: bool
rc:
  description: The command return code (0 means success).
  returned: always
  sample: 0
  type: int
start:
  description: The command execution start time.
  returned: always
  sample: '2017-09-29 22:03:48.083128'
  type: str
stderr:
  description: The command standard error.
  returned: always
  sample: 'ls cannot access foo: No such file or directory'
  type: str
stderr_lines:
  description: The command standard error split in lines.
  returned: always
  sample:
  - u'ls cannot access foo: No such file or directory'
  - "u'ls \u2026'"
  type: list
stdout:
  description: The command standard output.
  returned: always
  sample: "Clustering node rabbit@slave1 with rabbit@master \u2026"
  type: str
stdout_lines:
  description: The command standard output split in lines.
  returned: always
  sample:
  - "u'Clustering node rabbit@slave1 with rabbit@master \u2026'"
  type: list

See also