# Role का ढाँचा — Ansible: Playbooks से Servers का Automation

Source: https://www.geekswithgeeks.com/hi/ansible/role-structure

> Role का ढाँचा बनाएँ और जानें कि हर directory किसलिए है।

## मानक ढाँचा

**Role** निश्चित ढाँचे वाली directory है जिसे Ansible लोड करना जानता है: `tasks/` (काम, `main.yml` से शुरू), `handlers/`, `templates/`, `files/`, `defaults/` (कम-प्राथमिकता वाले variables जिन्हें users बदल सकें), `vars/` (ऊँची-प्राथमिकता वाले आंतरिक variables), `meta/` (निर्भरताएँ और metadata) और `tests/`। तब playbooks छोटी हो जाती हैं: वे बस बताती हैं कि किन hosts पर कौन-से roles लागू हैं। `ansible-galaxy role init` ढाँचा बनाता है।

## अपने automation को पैक करें

Roles tasks, templates, defaults और handlers को ऐसी दोबारा उपयोग होने वाली इकाई में बाँधते हैं जिसे projects में साझा किया जा सके।

![तीन चरण: ढाँचा, साझा करना, लागू करना।](assets/figures/ansible/section-5-map.svg) — चित्र 5.1 — ढाँचा, साझा करना और लागू करना।

## Role scaffold करना, चलाकर

मैंने यह चलाया: Ansible ने role और ये directories बनाईं।

```bash
ansible-galaxy role init demo_role
ls demo_role
```

Output:

```
- Role demo_role was created successfully
defaults
files
handlers
meta
README.md
tasks
templates
tests
vars
```

## Playbook में role का उपयोग

Playbook छोटी रहती है; ब्योरे role में रहते हैं। (उदाहरण।)

```yaml
---
- name: Web tier
  hosts: web
  become: true
  roles:
    - role: nginx
      vars:
        nginx_port: 8080
    - role: app_deploy
```

**Quiz:** कौन-सी role directory कम-प्राथमिकता वाले variables रखती है जिन्हें users बदल सकें?

- [ ] handlers/
- [ ] files/
- [x] defaults/
- [ ] tests/

*Answer:* defaults/. defaults/main.yml सबसे कमज़ोर variables तय करता है, जिन्हें बदलने के लिए ही बनाया गया है।
