- Tác giả

- Name
- Nguyễn Đức Xinh
- Ngày xuất bản
- Ngày xuất bản
Ansible Variables, Facts và Registers: Hướng dẫn sử dụng biến và thu thập thông tin hệ thống
Ansible Variables, Facts & Registers — Hiểu đúng và thực hành hiệu quả
Trong Playbook, bạn sẽ thường xuyên cần truyền dữ liệu, lấy thông tin từ hệ thống, hoặc lưu kết quả của một tác vụ. Ba khái niệm quan trọng hỗ trợ việc này chính là:
| Thành phần | Mục đích |
|---|---|
| Variables | Lưu giá trị để tái sử dụng |
| Facts | Thu thập thông tin hệ thống máy chủ |
| Registers | Lưu kết quả trả về của một task |
Hiểu rõ 3 thành phần này sẽ giúp Playbook linh hoạt, dễ bảo trì và tự động hóa cao hơn.
Variables (Biến)
Dùng làm gì?
- Tái sử dụng giá trị (tên package, port, user…)
- Dễ thay đổi theo môi trường (dev, staging, prod)
- Giảm trùng lặp Playbook
Cách khai báo biến
📌 Khai báo trực tiếp trong Playbook:
vars:
app_port: 8080
package_name: nginx
📌 Gọi biến trong task:
- name: Cài đặt package
apt:
name: "{{ package_name }}"
state: present
📌 Khai báo biến qua file riêng:
group_vars/webservers.yml
📌 Khai báo khi chạy Playbook:
ansible-playbook deploy.yml -e "app_port=8080"
📌 Biến fact có thể gọi bằng syntax:
{{ ansible_facts['hostname'] }}
Facts (Thông tin hệ thống)
Facts là gì?
Facts là dữ liệu mà Ansible tự động thu thập từ máy chủ trước khi chạy task, ví dụ:
- IP, hostname
- OS, kernel
- CPU, RAM, Disk
- Network interfaces
☑ Lấy danh sách facts của server
ansible web -m setup
📌 Ví dụ dùng facts trong Playbook
- name: In ra thông tin hệ điều hành
debug:
msg: "Server đang chạy: {{ ansible_facts['distribution'] }} {{ ansible_facts['distribution_version'] }}"
🔕 Tắt việc thu thập facts (nếu không cần)
- hosts: all
gather_facts: no
Registers (Lưu kết quả task)
Registers dùng làm gì?
Khi bạn muốn lấy output của một task để dùng cho task tiếp theo:
- Kiểm tra trạng thái systemd
- Lấy phiên bản ứng dụng
- Lưu kết quả câu lệnh shell
☑ Ví dụ sử dụng register
- name: Kiểm tra phiên bản nginx
command: nginx -v
register: nginx_version
ignore_errors: yes
- name: In ra kết quả
debug:
var: nginx_version.stderr
📌 Output có thể gồm các trường:
| Trường | Mô tả |
|---|---|
stdout |
Kết quả dòng lệnh |
stderr |
Lỗi nếu có |
rc |
Mã trả về (0 = thành công) |
changed |
Task có thay đổi hay không |
🎯 Ví dụ Playbook hoàn chỉnh
Tạo file variables-facts-register.yml
- name: Demo Variables, Facts và Registers
hosts: web
become: yes
vars:
package_name: nginx
tasks:
- name: Cài package
apt:
name: "{{ package_name }}"
state: present
- name: Lấy thông tin ip
debug:
msg: "IP Server: {{ ansible_facts['default_ipv4']['address'] }}"
- name: Kiểm tra phiên bản nginx
command: nginx -v
register: nginx_version
ignore_errors: yes
- name: In kết quả
debug:
var: nginx_version.stderr
Chạy Playbook:
ansible-playbook -i inventory variables-facts-register.yml
💡 Ghi nhớ nhanh
| Thành phần | Công dụng chính |
|---|---|
| Variables | Lưu trữ giá trị cấu hình |
| Facts | Thu thập thông tin hệ thống |
| Registers | Lưu output của task để dùng lại |
🔚 Kết luận
Sau bài này, bạn đã biết:
✔ Cách khai báo và sử dụng biến ✔ Cách đọc facts và ứng dụng trong điều kiện cấu hình ✔ Cách lưu và tái sử dụng kết quả task với register
Đây là các khối kiến thức nền tảng giúp Playbook trở nên động, thông minh và dễ tái sử dụng.
