Mastering Ansible: A Comprehensive Guide to Commands, Playbooks, and Automation
Your Ultimate Cheat Sheet for Ad-Hoc Tasks, Playbooks, Inventory, Roles, and Advanced Ansible Features
Table of contents
- Basic Commands
- Playbook Commands
- Ad-Hoc Commands
- Inventory Management
- Roles and Collections
- Troubleshooting and Debugging
- Vault Commands
- Miscellaneous
- Advanced Playbook Commands
- Ad-Hoc Commands (Advanced)
- Inventory Management (Advanced)
- Roles and Collections (Advanced)
- Vault Commands (Advanced)
- Troubleshooting and Debugging (Advanced)
- Miscellaneous (Advanced)
- Useful Tips
- Reference
Basic Commands
Check Ansible Version
ansible --version
Ping All Hosts
ansible all -m ping
Run a Command on All Hosts
ansible all -a "<command>"
List All Hosts in Inventory
ansible all --list-hosts
Check Host Syntax
ansible-inventory --list
Playbook Commands
Run a Playbook
ansible-playbook playbook.yml
Run a Playbook with Tags
ansible-playbook playbook.yml --tags "tag1,tag2"
Run a Playbook and Start at a Specific Task
ansible-playbook playbook.yml --start-at-task "<task_name>"
Check Playbook Syntax
ansible-playbook playbook.yml --syntax-check
Dry Run (Simulate Changes)
ansible-playbook playbook.yml --check
Run a Playbook with Verbose Output
ansible-playbook playbook.yml -v
Limit Playbook Execution to Specific Hosts
ansible-playbook playbook.yml --limit "host1,host2"
Ad-Hoc Commands
Copy a File
ansible all -m copy -a "src=<source_path> dest=<destination_path>"
Create a Directory
ansible all -m file -a "path=<directory_path> state=directory"
Delete a File or Directory
ansible all -m file -a "path=<path> state=absent"
Install a Package
ansible all -m apt -a "name=<package_name> state=present"
Start a Service
ansible all -m service -a "name=<service_name> state=started"
Stop a Service
ansible all -m service -a "name=<service_name> state=stopped"
Reboot Hosts
ansible all -m reboot
Inventory Management
Specify a Custom Inventory File
ansible-playbook playbook.yml -i <inventory_file>
Dynamic Inventory Script
ansible-playbook playbook.yml -i <inventory_script>
Roles and Collections
Initialize a New Role
ansible-galaxy init <role_name>
Install a Role from Ansible Galaxy
ansible-galaxy install <role_name>
Install a Collection
ansible-galaxy collection install <namespace.collection>
List Installed Roles
ansible-galaxy list
Troubleshooting and Debugging
Increase Verbosity
ansible-playbook playbook.yml -vvv
Test Connectivity
ansible all -m ping
Check Host Variables
ansible-inventory --host <hostname>
Debug a Specific Task
ansible-playbook playbook.yml --tags "debug_task"
Vault Commands
Encrypt a File
ansible-vault encrypt <file>
Decrypt a File
ansible-vault decrypt <file>
Edit an Encrypted File
ansible-vault edit <file>
Run a Playbook with Vault
ansible-playbook playbook.yml --ask-vault-pass
Create an Encrypted Variable
ansible-vault encrypt_string '<value>' --name '<variable_name>'
Miscellaneous
Generate a Crypted Password
ansible localhost -m debug -a "msg={{ 'password' | password_hash('sha512') }}"
Run a Playbook as a Different User
ansible-playbook playbook.yml --user=<username> --ask-pass
Become Root (sudo)
ansible-playbook playbook.yml --become --ask-become-pass
Advanced Playbook Commands
Run a Playbook with Specific Variables
ansible-playbook playbook.yml -e "var1=value1 var2=value2"
Run a Playbook with Extra Variables from a File
ansible-playbook playbook.yml -e "@vars_file.yml"
Run a Playbook with a Custom Inventory and Extra Variables
ansible-playbook playbook.yml -i inventory_file -e "var1=value1"
Run a Playbook with Parallel Execution (Forking)
ansible-playbook playbook.yml --forks=10
Run a Playbook and Skip Specific Tags
ansible-playbook playbook.yml --skip-tags "tag1,tag2"
Run a Playbook and Limit Execution to a Single Host
ansible-playbook playbook.yml --limit "host1"
Run a Playbook with a Specific Strategy
ansible-playbook playbook.yml --strategy=free
Ad-Hoc Commands (Advanced)
Check Disk Usage
ansible all -m shell -a "df -h"
Check Memory Usage
ansible all -m shell -a "free -m"
Check Uptime
ansible all -m shell -a "uptime"
Run a Command with Sudo
ansible all -m shell -a "sudo <command>" --become
Fetch Files from Remote Hosts
ansible all -m fetch -a "src=<remote_path> dest=<local_path>"
Check if a File Exists
ansible all -m stat -a "path=<file_path>"
Run a Command with Conditional Logic
ansible all -m shell -a "if [ -f <file_path> ]; then echo 'File exists'; fi"
Inventory Management (Advanced)
Use a Dynamic Inventory Script with AWS
ansible-playbook playbook.yml -i aws_ec2.yml
Group Hosts by Custom Criteria
[webservers] host1 host2 [dbservers] host3 host4
Use Variables in Inventory
[webservers] host1 ansible_user=admin ansible_port=2222
Use Inventory Aliases
host1 ansible_host=192.168.1.10 ansible_user=admin
Generate a Dynamic Inventory from a Script
./inventory_script.py --list
Roles and Collections (Advanced)
Install a Specific Version of a Role
ansible-galaxy install <role_name>,<version>
Install a Role from a Private Repository
ansible-galaxy install git+https://github.com/user/repo.git
Create a Custom Collection
ansible-galaxy collection init <namespace.collection>
Publish a Collection to Ansible Galaxy
ansible-galaxy collection publish <collection_file>
List Installed Collections
ansible-galaxy collection list
Vault Commands (Advanced)
Create a New Encrypted File
ansible-vault create <file>
Re-key an Encrypted File
ansible-vault rekey <file>
Run a Playbook with Multiple Vault Passwords
ansible-playbook playbook.yml --vault-id @prompt
View an Encrypted File
ansible-vault view <file>
Encrypt a Variable in a Playbook
ansible-vault encrypt_string '<value>' --name '<variable_name>'
Troubleshooting and Debugging (Advanced)
Check Playbook Execution Time
time ansible-playbook playbook.yml
Run a Playbook with Debug Output
ansible-playbook playbook.yml -vvvv
Test Connectivity with a Specific User
ansible all -m ping -u <username> --ask-pass
Check for Syntax Errors in Roles
ansible-lint <role_directory>
Use Debug Module for Variable Output
- name: Debug a variable debug: var: my_variable
Miscellaneous (Advanced)
Generate a Password Hash
ansible localhost -m debug -a "msg={{ 'password' | password_hash('sha512', 'my_salt') }}"
Run a Playbook with a Custom Config File
ansible-playbook playbook.yml -c <config_file>
Use Ansible Pull for Distributed Execution
ansible-pull -U <repository_url> playbook.yml
Run a Playbook with a Specific Python Interpreter
ansible-playbook playbook.yml -e "ansible_python_interpreter=/usr/bin/python3"
Use Ansible with Docker
ansible-playbook playbook.yml -i inventory -e "ansible_connection=docker"
Useful Tips
Use
--diff
to See Changesansible-playbook playbook.yml --diff
Use
--step
for Interactive Playbook Executionansible-playbook playbook.yml --step
Use
--list-tasks
to Preview Tasks in a Playbookansible-playbook playbook.yml --list-tasks
Use
--list-tags
to List Tags in a Playbookansible-playbook playbook.yml --list-tags
Use
--force-handlers
to Force Handler Executionansible-playbook playbook.yml --force-handlers
Reference
Ansible Official Documentation
https://docs.ansible.com/
The official Ansible documentation, offering detailed explanations of Ansible core concepts, modules, playbooks, and advanced features.Ansible Ad-Hoc Command Documentation
https://docs.ansible.com/ansible/latest/cli/ansible.html
Comprehensive guide on running ad-hoc commands using theansible
CLI to perform quick tasks without writing playbooks.Ansible Playbook Documentation
https://docs.ansible.com/ansible/latest/cli/ansible-playbook.html
Details on running Ansible playbooks, with information about options like--tags
,--limit
,--check
, and more.Ansible Galaxy Documentation
https://galaxy.ansible.com/
A portal to discover, download, and share reusable Ansible roles and collections, along with installation and usage instructions.Ansible Vault Documentation
https://docs.ansible.com/ansible/latest/user_guide/vault.html
A detailed guide to using Ansible Vault for securing sensitive data such as passwords, keys, and other variables in playbooks.