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

Mastering Ansible: A Comprehensive Guide to Commands, Playbooks, and Automation

Basic Commands

  1. Check Ansible Version

     ansible --version
    
  2. Ping All Hosts

     ansible all -m ping
    
  3. Run a Command on All Hosts

     ansible all -a "<command>"
    
  4. List All Hosts in Inventory

     ansible all --list-hosts
    
  5. Check Host Syntax

     ansible-inventory --list
    

Playbook Commands

  1. Run a Playbook

     ansible-playbook playbook.yml
    
  2. Run a Playbook with Tags

     ansible-playbook playbook.yml --tags "tag1,tag2"
    
  3. Run a Playbook and Start at a Specific Task

     ansible-playbook playbook.yml --start-at-task "<task_name>"
    
  4. Check Playbook Syntax

     ansible-playbook playbook.yml --syntax-check
    
  5. Dry Run (Simulate Changes)

     ansible-playbook playbook.yml --check
    
  6. Run a Playbook with Verbose Output

     ansible-playbook playbook.yml -v
    
  7. Limit Playbook Execution to Specific Hosts

     ansible-playbook playbook.yml --limit "host1,host2"
    

Ad-Hoc Commands

  1. Copy a File

     ansible all -m copy -a "src=<source_path> dest=<destination_path>"
    
  2. Create a Directory

     ansible all -m file -a "path=<directory_path> state=directory"
    
  3. Delete a File or Directory

     ansible all -m file -a "path=<path> state=absent"
    
  4. Install a Package

     ansible all -m apt -a "name=<package_name> state=present"
    
  5. Start a Service

     ansible all -m service -a "name=<service_name> state=started"
    
  6. Stop a Service

     ansible all -m service -a "name=<service_name> state=stopped"
    
  7. Reboot Hosts

     ansible all -m reboot
    

Inventory Management

  1. Specify a Custom Inventory File

     ansible-playbook playbook.yml -i <inventory_file>
    
  2. Dynamic Inventory Script

     ansible-playbook playbook.yml -i <inventory_script>
    

Roles and Collections

  1. Initialize a New Role

     ansible-galaxy init <role_name>
    
  2. Install a Role from Ansible Galaxy

     ansible-galaxy install <role_name>
    
  3. Install a Collection

     ansible-galaxy collection install <namespace.collection>
    
  4. List Installed Roles

     ansible-galaxy list
    

Troubleshooting and Debugging

  1. Increase Verbosity

     ansible-playbook playbook.yml -vvv
    
  2. Test Connectivity

     ansible all -m ping
    
  3. Check Host Variables

     ansible-inventory --host <hostname>
    
  4. Debug a Specific Task

     ansible-playbook playbook.yml --tags "debug_task"
    

Vault Commands

  1. Encrypt a File

     ansible-vault encrypt <file>
    
  2. Decrypt a File

     ansible-vault decrypt <file>
    
  3. Edit an Encrypted File

     ansible-vault edit <file>
    
  4. Run a Playbook with Vault

     ansible-playbook playbook.yml --ask-vault-pass
    
  5. Create an Encrypted Variable

     ansible-vault encrypt_string '<value>' --name '<variable_name>'
    

Miscellaneous

  1. Generate a Crypted Password

     ansible localhost -m debug -a "msg={{ 'password' | password_hash('sha512') }}"
    
  2. Run a Playbook as a Different User

     ansible-playbook playbook.yml --user=<username> --ask-pass
    
  3. Become Root (sudo)

     ansible-playbook playbook.yml --become --ask-become-pass
    

Advanced Playbook Commands

  1. Run a Playbook with Specific Variables

     ansible-playbook playbook.yml -e "var1=value1 var2=value2"
    
  2. Run a Playbook with Extra Variables from a File

     ansible-playbook playbook.yml -e "@vars_file.yml"
    
  3. Run a Playbook with a Custom Inventory and Extra Variables

     ansible-playbook playbook.yml -i inventory_file -e "var1=value1"
    
  4. Run a Playbook with Parallel Execution (Forking)

     ansible-playbook playbook.yml --forks=10
    
  5. Run a Playbook and Skip Specific Tags

     ansible-playbook playbook.yml --skip-tags "tag1,tag2"
    
  6. Run a Playbook and Limit Execution to a Single Host

     ansible-playbook playbook.yml --limit "host1"
    
  7. Run a Playbook with a Specific Strategy

     ansible-playbook playbook.yml --strategy=free
    

Ad-Hoc Commands (Advanced)

  1. Check Disk Usage

     ansible all -m shell -a "df -h"
    
  2. Check Memory Usage

     ansible all -m shell -a "free -m"
    
  3. Check Uptime

     ansible all -m shell -a "uptime"
    
  4. Run a Command with Sudo

     ansible all -m shell -a "sudo <command>" --become
    
  5. Fetch Files from Remote Hosts

     ansible all -m fetch -a "src=<remote_path> dest=<local_path>"
    
  6. Check if a File Exists

     ansible all -m stat -a "path=<file_path>"
    
  7. Run a Command with Conditional Logic

     ansible all -m shell -a "if [ -f <file_path> ]; then echo 'File exists'; fi"
    

Inventory Management (Advanced)

  1. Use a Dynamic Inventory Script with AWS

     ansible-playbook playbook.yml -i aws_ec2.yml
    
  2. Group Hosts by Custom Criteria

     [webservers]
     host1
     host2
    
     [dbservers]
     host3
     host4
    
  3. Use Variables in Inventory

     [webservers]
     host1 ansible_user=admin ansible_port=2222
    
  4. Use Inventory Aliases

     host1 ansible_host=192.168.1.10 ansible_user=admin
    
  5. Generate a Dynamic Inventory from a Script

     ./inventory_script.py --list
    

Roles and Collections (Advanced)

  1. Install a Specific Version of a Role

     ansible-galaxy install <role_name>,<version>
    
  2. Install a Role from a Private Repository

     ansible-galaxy install git+https://github.com/user/repo.git
    
  3. Create a Custom Collection

     ansible-galaxy collection init <namespace.collection>
    
  4. Publish a Collection to Ansible Galaxy

     ansible-galaxy collection publish <collection_file>
    
  5. List Installed Collections

     ansible-galaxy collection list
    

Vault Commands (Advanced)

  1. Create a New Encrypted File

     ansible-vault create <file>
    
  2. Re-key an Encrypted File

     ansible-vault rekey <file>
    
  3. Run a Playbook with Multiple Vault Passwords

     ansible-playbook playbook.yml --vault-id @prompt
    
  4. View an Encrypted File

     ansible-vault view <file>
    
  5. Encrypt a Variable in a Playbook

     ansible-vault encrypt_string '<value>' --name '<variable_name>'
    

Troubleshooting and Debugging (Advanced)

  1. Check Playbook Execution Time

     time ansible-playbook playbook.yml
    
  2. Run a Playbook with Debug Output

     ansible-playbook playbook.yml -vvvv
    
  3. Test Connectivity with a Specific User

     ansible all -m ping -u <username> --ask-pass
    
  4. Check for Syntax Errors in Roles

     ansible-lint <role_directory>
    
  5. Use Debug Module for Variable Output

     - name: Debug a variable
       debug:
         var: my_variable
    

Miscellaneous (Advanced)

  1. Generate a Password Hash

     ansible localhost -m debug -a "msg={{ 'password' | password_hash('sha512', 'my_salt') }}"
    
  2. Run a Playbook with a Custom Config File

     ansible-playbook playbook.yml -c <config_file>
    
  3. Use Ansible Pull for Distributed Execution

     ansible-pull -U <repository_url> playbook.yml
    
  4. Run a Playbook with a Specific Python Interpreter

     ansible-playbook playbook.yml -e "ansible_python_interpreter=/usr/bin/python3"
    
  5. Use Ansible with Docker

     ansible-playbook playbook.yml -i inventory -e "ansible_connection=docker"
    

Useful Tips

  • Use --diff to See Changes

      ansible-playbook playbook.yml --diff
    
  • Use --step for Interactive Playbook Execution

      ansible-playbook playbook.yml --step
    
  • Use --list-tasks to Preview Tasks in a Playbook

      ansible-playbook playbook.yml --list-tasks
    
  • Use --list-tags to List Tags in a Playbook

      ansible-playbook playbook.yml --list-tags
    
  • Use --force-handlers to Force Handler Execution

      ansible-playbook playbook.yml --force-handlers
    

Reference

  1. Ansible Official Documentation
    https://docs.ansible.com/
    The official Ansible documentation, offering detailed explanations of Ansible core concepts, modules, playbooks, and advanced features.

  2. Ansible Ad-Hoc Command Documentation
    https://docs.ansible.com/ansible/latest/cli/ansible.html
    Comprehensive guide on running ad-hoc commands using the ansible CLI to perform quick tasks without writing playbooks.

  3. 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.

  4. 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.

  5. 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.