Ansible Module command: Difference between revisions

From NovaOrdis Knowledge Base
Jump to navigation Jump to search
Line 11: Line 11:
The command module takes the command name followed by a list of space-delimited arguments. A command will NOT be interpreted by a shell, so variables like $HOME and operations like "<", ">", "|", ";" and "&" will not work. Use the [[Ansible Module shell|shelll]] module for that.
The command module takes the command name followed by a list of space-delimited arguments. A command will NOT be interpreted by a shell, so variables like $HOME and operations like "<", ">", "|", ";" and "&" will not work. Use the [[Ansible Module shell|shelll]] module for that.


For a discussion on the interaction between <code>command</code>, <code>cmd</code>, <code>args</code>, etc. see [[#command.2C_args_and_cmd|<tt>command</tt>, <tt>args</tt> and <tt>cmd</tt>]] below.
For a discussion on the interaction between <code>command</code>, <code>cmd</code>, <code>argv</code>, etc. see [[#command.2C_argv_and_cmd|<tt>command</tt>, <tt>argv</tt> and <tt>cmd</tt>]] below.


<syntaxhighlight lang='yaml'>
<syntaxhighlight lang='yaml'>

Revision as of 06:17, 4 July 2021

External

Internal

Overview

The command module takes the command name followed by a list of space-delimited arguments. A command will NOT be interpreted by a shell, so variables like $HOME and operations like "<", ">", "|", ";" and "&" will not work. Use the shelll module for that.

For a discussion on the interaction between command, cmd, argv, etc. see command, argv and cmd below.

- name: A command example
  command: some-command arg1 arg2
    argv: ... # Passes the command as a list rather than a string
    cmd: ... # The command to run
    chdir: ... # Change into this directory before running the command
    stdin: ... 
    stdin_add_newline: ...
    warn: ...
    creates: ...
  become: true
  become_user: root
  args:
    chdir: /somedir/

command, args and cmd

The command followed by the space-separated list of arguments can be specified immediately after the command: keyword:

- name: some name
  command: ls -l /tmp

Alternatively, the arguments can be provided as a list under the task's args configuration element:

- name: some name
  command: ls
  args:

Privilege Escalation

See:

Ansible Privilege Escalation

Registering Variables as Results of Command Execution

This sets a variable:

- name: Read requested Java version
  command: "sh -c \"grep ^JAVA_VERSION {{ansible_env.HOME}}/config.txt | sed -e 's/.*=//'\""
  register: java_version
  changed_when: false

Setting Command Output as a Fact

Set the command output as a fact (see set_fact):

- name: Get Homebrew installation directory
  command: "sh -c \"brew --prefix\""
  register: brew_prefix_cmd
  changed_when: false

- name: Set Homebrew installation directory
  set_fact:
    pkg_manager_install_dir: "{{ brew_prefix_cmd.stdout }}"