Trong bài này, chúng ta sẽ tìm hiểu về Templates trong Ansible – một công cụ cực kỳ mạnh mẽ giúp bạn tự động tạo các file cấu hình, script… với nội dung linh hoạt cho từng server khác nhau.
Xem thêm:
Ansible Handler – Bài 8
Ansible Modules – Bài 7
1. Template là gì?
Hiểu đơn giản, Template là một file text có phần nội dung động, thường có đuôi .j2 (viết theo cú pháp Jinja2). Trong đó, bạn có thể chèn biến vào, lặp qua danh sách, kiểm tra điều kiện v.v…
Template thường dùng để:
- Tạo file cấu hình (ví dụ
nginx.conf,index.html) - Tự động tuỳ biến nội dung cho từng môi trường (dev, staging, production)
- Tái sử dụng cấu hình linh hoạt
2. Tại sao nên dùng Template?
Quản lý cấu hình cho nhiều máy khác nhau mà chỉ cần dùng 1 file mẫu
Tăng tính tự động hoá và linh hoạt
Dễ dàng tuỳ biến nội dung bằng biến, vòng lặp, điều kiện…
Ví dụ: bạn có 10 server khác nhau, mỗi cái chạy một cổng và hostname riêng → chỉ cần 1 file .j2 và khai báo biến tương ứng.
3. Cách sử dụng Template trong Ansible
Bước 1: Viết file .j2
Ví dụ nginx.conf.j2:
server {
listen {{ nginx_port }};
server_name {{ nginx_server_name }};
}
Bước 2: Dùng module template trong playbook
- name: Tạo file cấu hình nginx
template:
src: nginx.conf.j2
dest: /etc/nginx/nginx.conf
mode: '0644'
owner: root
group: root
Biến nginx_port và nginx_server_name có thể khai báo trong vars.
4. Cú pháp Jinja2 cơ bản
| Tính năng | Cú pháp mẫu |
|---|---|
| Biến | {{ my_var }} |
| Vòng lặp | {% for item in list %}...{% endfor %} |
| Điều kiện | {% if cond %}...{% else %}...{% endif %} |
| Filter | `{{ name |
5. Một số filters thường dùng
| Filter | Mục đích |
|---|---|
upper |
Chuyển chữ thành viết hoa |
lower |
Chuyển chữ thành viết thường |
default |
Gán giá trị mặc định nếu biến không có |
replace |
Thay thế chuỗi con |
Ví dụ:
{{ "hello world" | upper }} → HELLO WORLD
{{ some_var | default("backup.txt") }}
{{ "Welcome Ansible" | replace("Ansible", "Jinja2") }}
6. Kết hợp biến, vòng lặp, điều kiện
Ví dụ danh sách người dùng:
vars:
users:
- name: dev1
role: admin
- name: dev2
role: viewer
Template index.html.j2:
<h1>Welcome to {{ site_title | replace("Ansible", "Jinja2") }}</h1>
{% if users %}
<ul>
{% for user in users %}
<li>{{ user.name }} - {{ user.role | upper }}</li>
{% endfor %}
</ul>
{% else %}
<p>No users found.</p>
{% endif %}
Sau khi chạy playbook, Ansible sẽ:
- Đọc file
.j2 - Thay biến bằng giá trị thực tế
- Ghi nội dung kết quả vào file đích trên máy chủ
Bạn có thể SSH vào server và kiểm tra:
cat /etc/nginx/nginx.conf
Kết quả sẽ là file cấu hình với các giá trị đã được thay thế tự động.