Ansible Ad-hoc commands
An Ansible ad hoc command uses the /usr/bin/ansible command-line tool to automate a single task on one or more managed nodes. ad hoc commands are quick and easy, but they are not reusable.
- you could execute a quick one-liner in Ansible without writing a playbook. An ad hoc command looks like this: 
- $ ansible [pattern] -m [module] -a "[module options]" 
The -a option accepts options either through the key=value syntax or a JSON string starting with { and ending with } for more complex option structure. You can learn more about patterns and modules on other pages.
Ansible ad-hoc commands have a simple syntax that you can use to perform quick tasks across your infrastructure
- ansible <host-pattern> -i <inventory-file> -m <module-name> -a "<module-arguments>" [options]
Explanation of Parameters:
- 
ansible: The Ansible command-line tool.
- 
<host-pattern>: Specifies the target hosts (e.g.,all,web,db, or an individual host).
- 
-i <inventory-file>: Specifies the inventory file that contains the hosts you want to target.
- 
-m <module-name>: Specifies the Ansible module you want to use (e.g.,apt,yum,file,ping,copy, etc.).
- 
-a "<module-arguments>": Arguments passed to the module (e.g., the package name, file path, or other options).
- 
[options]: Optional flags like--becomefor privilege escalation,--checkfor dry-run, etc.
Common Options for Ad-Hoc Commands:
- 
--become: Elevates privileges to execute tasks as a superuser (==useful for package installations or service management==).
- 
--check: Performs a ==dry-run== of the playbook or command, showing what changes would be made without actually applying them.
- 
--diff: Shows a diff of what changes will be made (e.g., when modifying files).
- 
--ask-become-pass: Prompts for the sudo password (if required) when using--become
Host Patterns:
- 
all: Targets all hosts in the inventory.
- 
web: Targets thewebgroup in the inventory.
- 
db[0:5]: Targets a range of hosts, likedb0,db1,db2, etc.
- 
localhost: Targets the local machine (useful for testing or local actions).
- 
<hostname>: Targets a specific host by name or IP address.
Important Ad-hoc commands
1. Basic Commands for System Management
1) Ping all hosts
    - ansible all -i inventory.ini -m ping
     * * for particular host
     ansible <hostname> -i inventory.ini -m ping
2) Gather Facts (System Information):
     - ansible all -i inventory.ini -m setup
     - for specific tasks use filter 
       ansible all -i inventory.ini -m setup -a "filter=<fact_name>
   eg .
    1) Gather only memory-related facts:
        ansible all -i inventory.ini -m setup -a "filter=ansible_memory_mb"
    2) Gather only network-related facts: 
        ansible all -i inventory.ini -m setup -a "filter=ansible_default_ipv4,ansible_all_interfaces
    3)  Gather only disk-related facts:
        `ansible all -i inventory.ini -m setup -a "filter=ansible_devices"
3) Check System Uptime
    - ``ansible all -i inventory.ini -m command -a "uptime
2.Package Management (Install/Remove Software)
1) Install Package 
    - ansible all -i inventory.ini -m apt -a "name=nginx state=present" --become  (debian based eg. ubuntu) change to apt for Redhat based
      - became uses root permissions
2) Remove a package
     - ansible all -i inventory.ini -m apt -a "name=nginx state=absent" --become
3) Upgrade All Packages- Upgrades all packages on all hosts.
     - ansible all -i inventory.ini -m apt -a "upgrade=dist" --become
3.File and Directory Management
1) Create a Directory
     - ansible all -i inventory.ini -m file -a "path=/tmp/testdir state=directory mode=0755
     - Creates a directory at testdir
2) Copy a File to Remote Hosts
     - ansible all -i inventory.ini -m copy -a "src=/local/file dest=/remote/file mode=0644
3) Delete a File or Directory
     - ansible all -i inventory.ini -m file -a "path=/tmp/testfile state=absent
4)  Change File Permissions
     - ansible all -i inventory.ini -m file -a "path=/tmp/testfile mode=0755
4. Service Management
1) Start a service
     - ansible all -i inventory.ini -m service -a "name=nginx state=started" --become
2) Stop a Service:
     - ansible all -i inventory.ini -m service -a "name=nginx state=stopped" --become
3) Restart a service:
     - ansible all -i inventory.ini -m service -a "name=nginx state=restarted" --become
4) Enable a service from boot: 
      - ansible all -i inventory.ini -m service -a "name=nginx enabled=yes" --become
      - enabled=no - Disable a Service from boot
5. User and Group Management
1) Create a User:
     - ansible all -i inventory.ini -m user -a "name=deploy state=present" --become
     - Creates the deploy user on all hosts.
2)  Delete a User:
     - ansible all -i inventory.ini -m user -a "name=deploy state=absent" --become
3) Add user to group:
     - ansible all -i inventory.ini -m user -a "name=deploy groups=sudo append=yes" --become
     - Adds the deploy user to the sudo group on all hosts
6. Network Management
1) Check if a Port is Open:
     - ansible all -i inventory.ini -m shell -a "netstat -tuln | grep :80"
 - Checks if port `80` is open on all remote hosts.
2) Download a File from the Internet:
     - ansible all -i inventory.ini -m get_url -a "url=https://example.com/file.tar.gz dest=/tmp/file.tar.gz"
 -  Downloads a file from a URL to the `/tmp` directory on all hosts.
7.Process and System Management
1) Reboot Host 
     - ansible all -i inentory.ini -m reboot --become
2) Kill a process
     - ansible all -i inventory.ini -m shell -a "pkill -f provess_name" --become
3) Check a disk space
     - ansible web -i inventory.ini -m shell -a "df -h"
     - uses only web tagged machines in inventory file
4) Show running processes: 
     - ansible all -i inventory.ini -m shell -a "ps aux"
8.Docker Management
1) Start Docker Container:
     - ansible all -i inventory.ini -m docker_container -a "name=my_cont image=nginx state=started"
2) Stop a docker container 
     - ansible all -i inventory.ini -m docker_container -a "name=my_cont state=stopped"
9. Log Management
1) Tail log file
     - ansible all -i inventory.ini -m shell -a "tail -n 10 /var/log/nginx/access.log" --become
10.Other
1) Execute a Shell Command:
     - ansible all -i inventory.ini -m shell -a "echo Hello, World!"
     - Executes a simple shell command (echo Hello, World!) on all hosts
2) Create file with content 
     - ansible all -i inventory.ini -m copy -a "content='Hello, World!' dest=/usr/share/nginx/html/hello.html"
 

 
    
Top comments (1)