๐ŸŽญ Ansible Roles & Project Structure

๐ŸŽฏ What is an Ansible Role?

An Ansible Role is a predefined structure used to organize your automation.

๐Ÿ‘‰ Simple meaning:

Instead of writing everything in one big playbook, we split into reusable parts


๐Ÿ“ฆ Real-Life Example

Think like this:

๐Ÿฝ๏ธ Hotel Kitchen

* ๐Ÿ› Cooking team

* ๐Ÿงน Cleaning team

* ๐Ÿงพ Billing team

Each section = Role


๐Ÿ’ก Easy Definition

* Organize code

* Reuse tasks

* Maintain easily


๐Ÿ“ Role Structure (Important)

When you create a role, it follows a standard folder structure:

my-role/
โ”‚
โ”œโ”€โ”€ tasks/
โ”‚   โ””โ”€โ”€ main.yml
โ”‚
โ”œโ”€โ”€ handlers/
โ”‚   โ””โ”€โ”€ main.yml
โ”‚
โ”œโ”€โ”€ templates/
โ”‚
โ”œโ”€โ”€ files/
โ”‚
โ”œโ”€โ”€ vars/
โ”‚   โ””โ”€โ”€ main.yml
โ”‚
โ”œโ”€โ”€ defaults/
โ”‚   โ””โ”€โ”€ main.yml
โ”‚
โ”œโ”€โ”€ meta/
โ”‚   โ””โ”€โ”€ main.yml

๐Ÿ” Folder Explanation (Very Important ๐Ÿ”ฅ)

๐Ÿ“Œ tasks/

๐Ÿ‘‰ Main เฎตเฏ‡เฎฒเฏˆ เฎ‡เฎ™เฏเฎ• เฎคเฎพเฎฉเฏ เฎจเฎŸเฎ•เฏเฎ•เฏเฎฎเฏ

Example:

- name: Install nginx
  apt:
    name: nginx
    state: present

๐Ÿ” handlers/

๐Ÿ‘‰ Used for restart/reload services

Example:

- name: restart nginx
  service:
    name: nginx
    state: restarted

Called only when needed (notify)


๐Ÿ“‚ templates/

๐Ÿ‘‰ Dynamic files (Jinja2 templates)

Example:


๐Ÿ“ files/

๐Ÿ‘‰ Static files


๐Ÿ“Š vars/

๐Ÿ‘‰ Variables (high priority)

port: 80

โš™๏ธ defaults/

๐Ÿ‘‰ Default variables (low priority)

port: 8080

๐Ÿ‘‰ If user doesnโ€™t override โ†’ this value used


๐Ÿ”— meta/

๐Ÿ‘‰ Role dependencies

Example:

dependencies:
  - role: common

๐Ÿงฑ Project Structure (Full Project)

Now letโ€™s see how a real Ansible project looks

my-ansible-project/
โ”‚
โ”œโ”€โ”€ inventory
โ”‚
โ”œโ”€โ”€ playbook.yml
โ”‚
โ”œโ”€โ”€ roles/
โ”‚   โ”œโ”€โ”€ webserver/
โ”‚   โ”œโ”€โ”€ database/
โ”‚   โ””โ”€โ”€ common/
โ”‚
โ”œโ”€โ”€ group_vars/
โ”œโ”€โ”€ host_vars/

๐Ÿ“Œ Explanation

๐Ÿ“„ inventory

๐Ÿ‘‰ Target servers list

[web]
192.168.1.10

โ–ถ๏ธ playbook.yml

๐Ÿ‘‰ Main entry point

Example:

- hosts: web
  roles:
    - webserver

๐ŸŽญ roles/

๐Ÿ‘‰ Contains all roles


๐Ÿงพ group_vars/

๐Ÿ‘‰ Variables for group


๐Ÿ–ฅ๏ธ host_vars/

๐Ÿ‘‰ Variables per server


๐Ÿ”„ How Everything Works Together

1. You run playbook

2. Playbook calls role

3. Role runs tasks

4. Tasks use variables

5. Handlers trigger when needed


๐Ÿฐ Real-Life Example (Like your Docker one)

Think of building a website server


๐Ÿ”ฅ Key Difference (Like Image vs Container style)

| Concept | Meaning |

| -------- | ----------------- |

| Playbook | Main controller |

| Role | Reusable module |

| Tasks | Actual work |

| Handlers | Triggered actions |


๐Ÿง  Short Summary