Post

Ansible Ad-Hoc Commands

Ansible Ad-Hoc Commands

Ansible Ad-Hoc Commands

Ad-hoc commands in Ansible are simple, one-liner commands used to perform quick tasks on managed nodes without the need for a full playbook. They are useful for testing connectivity, gathering facts, or making quick configuration changes.


Basic Syntax

The general syntax for an ad-hoc command is:

1
ansible <host-pattern> -m <module-name> -a "<module-arguments>"
  • <host-pattern>: Specifies which hosts from your inventory to target (e.g., all, webservers, 192.168.1.10).
  • -m <module-name>: Specifies the Ansible module to use (e.g., ping, command, shell, copy).
  • -a "<module-arguments>": Provides arguments to the module.

Common Ad-Hoc Command Examples

1. Ping all hosts

This command uses the ping module to test connectivity to all hosts defined in your inventory.

1
ansible all -m ping

2. Check system uptime

This command uses the command module to execute the uptime command on all hosts.

1
ansible all -a "uptime"

3. Run commands as root (become)

The -b (or --become) flag allows you to run commands with elevated privileges (e.g., sudo).

1
ansible all -b -a "whoami"

4. Copy content to a file (using copy module)

The copy module is used to copy files from the control node to managed nodes, or to create files with specific content.

  • --check: Performs a “dry run” to show what changes would be made without actually making them.
  • --diff: Shows the differences between the current state and the desired state.
1
2
3
4
5
6
7
8
# Perform a dry run to see what would happen
ansible all -b -m copy -a "content='# This file was configured by ansible #' dest=/etc/motd" --check

# Show the differences without applying changes
ansible all -b -m copy -a "content='# This file was configured by ansible #' dest=/etc/motd" --diff

# Perform a dry run and show differences
ansible all -b -m copy -a "content='# This file was configured by ansible #' dest=/etc/motd" --check --diff

5. Using shell module for commands with pipes or redirection

The shell module allows you to run commands that require shell features like pipes (|), redirection (>), or environment variables.

1
ansible all -m shell -a "echo 'Hello from Ansible' > /tmp/ansible_message.txt"

6. Using raw module for devices without Python

The raw module is used to execute commands directly on remote hosts, bypassing Ansible’s Python-based module system. This is useful for bootstrapping Python on new hosts or managing devices that do not have Python installed (e.g., some network devices).

1
ansible all -m raw -a "ls -l /"

Viewing Module Documentation

To get detailed information about any Ansible module, use the ansible-doc command:

1
ansible-doc <module_name>

Example:

1
ansible-doc copy

Press q to exit the documentation viewer.


Summary

Ad-hoc commands are a quick and efficient way to interact with your managed nodes for simple tasks. For more complex, repeatable, and structured automation, playbooks are the preferred method.

This post is licensed under CC BY 4.0 by the author.