Ansible Advanced Course

Install and Configure

Validate a working configuration using ad hoc Ansible commands

In this article, you will learn how to run ad hoc commands with Ansible. Although YAML-based playbooks are the recommended method for automating tasks—enabling reusability, version control with Git, and easy sharing—ad hoc commands provide a quick and efficient alternative for testing modules, verifying connectivity, or gathering one-off information from multiple servers.

Note

The Ansible ping module is used to verify SSH connectivity to target machines using the configured credentials, not for performing an ICMP ping.

Using a YAML Playbook for Connectivity Testing

For administrators managing virtual machines, a simple playbook using the ping module is an excellent way to test connectivity. Below is an example playbook that pings all target servers:

---
- name: Ping Servers
  hosts: all
  tasks:
    - ping:

To run the playbook, execute the following command in your terminal:

ansible-playbook playbook.yml

Executing Ad-Hoc Commands Directly

If you prefer not to create a playbook, you can achieve the same result using an ad hoc command. Use the -m option to specify the module and designate the target hosts. The command below pings all servers:

ansible -m ping all

When executed, the output appears in JSON format for each host, similar to the following:

web2 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}
web1 | SUCCESS => {
    "changed": false,
    "ping": "pong"
}

Running Arbitrary Commands

To run an arbitrary command on all hosts, use the -a option to pass the command directly. For instance, to display the contents of the /etc/hosts file, run:

ansible -a 'cat /etc/hosts' all

The output will be similar to this:

web1 | CHANGED | rc=0 >>
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.20.1.100 web1
web2 | CHANGED | rc=0 >>
127.0.0.1 localhost
::1 localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
172.20.1.100 web1

Privilege Escalation with Ad-Hoc Commands

You can also include privilege escalation options (such as become or become_user) with these ad hoc commands, just as you would when using a playbook. This flexibility makes ad hoc commands a powerful tool for managing your infrastructure on the fly.

Continue exploring additional methods to effectively utilize ad hoc commands in Ansible for efficient infrastructure management.

Watch Video

Watch video content

Practice Lab

Practice lab

Previous
Create and distribute SSH keys to managed nodes