# Jinja2 Templates — Ansible: Playbooks से Servers का Automation

Source: https://www.geekswithgeeks.com/hi/ansible/var-templates

> Variables, defaults और loops के साथ templates से configuration files बनाएँ।

## एक template, कई files

**`template`** module हर host के लिए **Jinja2** फ़ाइल render करता है और नतीजा कॉपी करता है। Templates के भीतर `{{ var }}` मान छापता है, `{{ var | default(80) }}` **filter** से विकल्प देता है, और `{% for %}` loops चलाता है। जो configs host या environment के अनुसार अलग हैं उनके लिए templates उपयोग करें, और static files `files/` में `copy` module के लिए रखें। "managed by Ansible" जैसा header comment लोगों को फ़ाइल हाथ से न बदलने की चेतावनी देता है।

## Template

`http_port` inventory के `[web:vars]` group से और `users` play के vars से आता है।

```jinja
# managed by Ansible - do not edit
server_name={{ inventory_hostname }}
port={{ http_port | default(80) }}
{% for u in users %}
user={{ u }}
{% endfor %}
```

## Render हुई फ़ाइल, चलाकर

यह पहले run से बनी असली `out/web1.conf` है: hostname, group variable से पोर्ट 8080, और हर user के लिए एक पंक्ति।

```ini
# managed by Ansible - do not edit
server_name=web1
port=8080
user=asha
user=ravi
```

**Quiz:** `{{ http_port | default(80) }}` क्या करता है?

- [ ] परिभाषित हो तो error देता है
- [ ] हमेशा 80 छापता है
- [ ] http_port हटाता है
- [x] http_port परिभाषित हो तो वही, वरना 80

*Answer:* http_port परिभाषित हो तो वही, वरना 80. default filter तभी विकल्प देता है जब variable अपरिभाषित हो।
