Ở bài trước, chúng ta đã xem Check modeDiff mode để verify playbook trước khi apply.

Bài này đi thêm một bước: đảm bảo chất lượng và tính nhất quán của playbook khi số lượng file ngày càng nhiều.


1) Vì sao cần Ansible-Lint?

Khi hạ tầng lớn dần, team thường gặp tình huống:

  • Nhiều playbook do nhiều người viết
  • Style không đồng nhất (indentation, task naming…)
  • Một số pattern dễ gây lỗi nhưng khó nhìn ra ngay

Ansible-Lint là CLI tool giúp quét:

  • potential errors / bugs
  • stylistic issues
  • suspicious constructs

Hiểu đơn giản: như có một reviewer Ansible “soi” trước khi code vào pipeline.

Playbook tăng số lượng
        ↓
Khó maintain + style lệch nhau
        ↓
Chạy ansible-lint
        ↓
Nhận cảnh báo có ngữ cảnh
        ↓
Sửa sớm trước khi deploy

2) Ansible-Lint kiểm tra được gì?

Một số nhóm vấn đề phổ biến:

  • Indentation không nhất quán trong YAML
  • Task name thiếu hoặc không rõ nghĩa
  • Dùng module/cách viết đã deprecated
  • Pattern dễ gây behavior khó đoán trong runtime

Nếu lệnh ansible-lint chạy xong không có output, thường nghĩa là không phát hiện issue theo rules hiện tại.


3) Ví dụ tình huống thực tế

Giả sử file style_example.yml cài và cấu hình NGINX nhưng có lỗi style:

  • Task A indent 2 spaces
  • Task B indent 4 spaces
  • Có task đặt tên theo câu đầy đủ, task khác đặt tên quá ngắn/thiếu nhất quán
  • Một task thiếu name

Kết quả khi lint:

  • cảnh báo về indentation
  • cảnh báo naming consistency
  • cảnh báo module deprecated (nếu có)

Điểm quan trọng: cảnh báo này giúp bạn chuẩn hóa playbook trước khi merge.


4) Vị trí của Ansible-Lint trong workflow

Kết hợp 3 lớp kiểm tra sẽ an toàn hơn:

  1. --check → mô phỏng thay đổi
  2. --diff → thấy rõ nội dung sẽ đổi
  3. ansible-lint → bắt lỗi style/chất lượng/code smell
Author playbook
   -> ansible-lint
   -> ansible-playbook --check --diff
   -> Pull Request
   -> CI pass
   -> Deploy thật

5) Best practices ngắn gọn

  • Viết task name theo một chuẩn thống nhất trong team
  • Giữ indentation YAML tuyệt đối nhất quán
  • Chạy lint local trước khi push
  • Bắt buộc lint trong CI để tránh “works on my machine”

Kết luận

ansible-lint không thay thế việc test runtime, nhưng là lớp phòng thủ cực tốt cho readability, consistencymaintainability.

Khi kết hợp với Check mode + Diff mode, bạn có một workflow verify playbook khá vững trước khi chạy trên môi trường thật.