Site logo
Tác giả
  • avatar Nguyễn Đức Xinh
    Name
    Nguyễn Đức Xinh
    Twitter
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  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.