- Tác giả

- Name
- Nguyễn Đức Xinh
- Ngày xuất bản
- Ngày xuất bản
Jinja2 Templates trong Ansible: Hướng dẫn tạo file cấu hình động với Template Engine
Trong các bài trước, chúng ta đã biết cách quản lý biến trong Ansible. Tuy nhiên, để ứng dụng những biến này vào file config thực tế, ta cần sử dụng Template với Jinja2.
Jinja2 là một engine template mạnh mẽ giúp tạo ra file cấu hình động dựa trên biến, điều kiện, vòng lặp,… Được sử dụng rất nhiều trong việc tạo file .env, config Nginx, systemd service, v.v.
Jinja2 Template là gì?
Template trong Ansible là các file mẫu (.j2 hoặc .tmpl) chứa:
✔ Text tĩnh (giống file cấu hình thông thường)
✔ Biểu thức động của Jinja2: {{ variable }}
✔ Điều kiện, vòng lặp, filters,…
Khi chạy playbook, Ansible sẽ render template và tạo file config thực tế trên server.
Ví dụ Template cơ bản
File: templates/app.env.j2:
APP_NAME={{ app_name }}
APP_ENV={{ app_env }}
DB_HOST={{ db_host }}
DB_USER={{ db_user }}
DB_PASS={{ db_pass }}
Trong Playbook:
- name: Tạo file .env cho ứng dụng
template:
src: app.env.j2
dest: /var/www/app/.env
owner: deploy
group: www-data
mode: '0640'
Biểu thức, điều kiện và vòng lặp trong Jinja2
📌 Điều kiện (if)
{% if app_env == "production" %}
DEBUG=false
{% else %}
DEBUG=true
{% endif %}
📌 Vòng lặp (for)
Ví dụ tạo danh sách IP backend:
BACKENDS=
{% for host in groups['backend'] %}
- {{ host }}
{% endfor %}
📌 Dùng filters
APP_KEY={{ secret_key | default("changeme") }}
PORT={{ app_port | int }}
Ví dụ template file cấu hình Nginx
templates/nginx.conf.j2:
server {
listen {{ nginx_port }};
server_name {{ domain }};
location / {
proxy_pass http://{{ app_host }}:{{ app_port }};
}
}
Playbook:
- name: Template nginx config
template:
src: nginx.conf.j2
dest: /etc/nginx/sites-enabled/app.conf
notify: restart nginx
Sử dụng Template + group_vars / host_vars
group_vars/prod.yml:
app_name: myapp
app_env: production
app_host: 10.0.1.12
app_port: 8080
domain: app.example.com
nginx_port: 80
Chạy:
ansible-playbook -i inventory.ini deploy.yml --limit prod
Debug template trước khi deploy
Xem trước kết quả render template:
ansible all -m template -a "src=app.env.j2 dest=/tmp/preview.txt" --check
Lỗi thường gặp & cách xử lý
| Lỗi | Nguyên nhân | Cách sửa |
|---|---|---|
template error hoặc undefined variable |
Thiếu biến | Kiểm tra group_vars / host_vars |
| File tạo ra bị sai format | Tabs, whitespace | Dùng trim_blocks hoặc kiểm tra indent |
| Không ghi được file | Quyền thư mục | Thêm become: yes hoặc cấp quyền |
🎯 Kết luận
Sau bài này, bạn đã biết:
✔ Jinja2 templates giúp tạo file config động ✔ Sử dụng biến, điều kiện, vòng lặp, filters ✔ Template config Nginx và file .env ✔ Kết hợp với group_vars để deploy theo môi trường
Jinja2 là công cụ cốt lõi trong tự động hóa cấu hình, giúp Ansible trở nên mạnh mẽ và linh hoạt trong thực tế.
