This repository is a template for new Ansible projects. It also contains some useful commands.
ansible-template/
├── ansible.cfg # Main Ansible configuration
├── .gitignore
├── README.md
├── requirements.yml # Galaxy roles and collections dependencies
│
├── inventory/ # One group per environment (dev, staging, prod)
│ ├── mygroup/
│ │ ├── hosts.yml # mygroup hosts
│ │ └── group_vars/all.yml # mygroup variables
│ └─── hosts.yml # global hosts file
│
├── group_vars/
│ └── all.yml # Global variables for all environments
├── host_vars/ # Host-specific variables
│ └── myhost/
│ ├── main.yml
│ └── secrets.yml
│
├── roles/
│ └── common/ # Example role with complete structure
│ ├── tasks/main.yml # Role tasks
│ ├── handlers/main.yml # Service handlers
│ ├── templates/ # Jinja2 templates
│ │ └── template.file.j2
│ ├── files/ # Static files
│ ├── vars/main.yml # Role variables
│ ├── defaults/main.yml # Default variables
│ ├── meta/main.yml # Role metadata and dependencies
│ └── tests/ # Role tests
│
├── playbooks/
│ └── playbook.yml
│
├── filter_plugins/ # Custom Jinja2 filters
├── library/ # Custom Ansible modules
└── files/ # Global static files
# Install required collections and roles
ansible-galaxy install -r requirements.yml
# Install Python dependencies (if any)
pip install -r requirements.txt# Run the main site playbook
ansible-playbook playbooks/playbook.yml
# Run with specific inventory
ansible-playbook -i inventory/mygroup/hosts.yml playbooks/playbook.yml
# Run with tags
ansible-playbook playbooks/playbook.yml --tags "webservers"
# Check mode (dry-run)
ansible-playbook playbooks/playbook.yml --check
# With verbose output
ansible-playbook playbooks/playbook.yml -vvvSwitch between environments by specifying the inventory:
ansible-playbook -i inventory/mygroup/hosts.yml playbooks/playbook.ymlOr use the default one spec'd in ansible.cfg:
ansible-playbook playbooks/playbook.yml# Syntax check
ansible-playbook playbooks/playbook.yml --syntax-check
# List tasks
ansible-playbook playbooks/playbook.yml --list-tasks
# List hosts
ansible-playbook playbooks/playbook.yml --list-hosts
# Dry run
ansible-playbook playbooks/playbook.yml --check --diff