Xin chào ! Nếu đây là lần đầu tiên bạn đến với diễn đàn, xin vui lòng danh ra một phút bấm vào đây để đăng kí và tham gia thảo luận cùng VnPro.
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • 📂 Ansible Directory Structure – Best Practice cho team DevOps mở rộng quy mô!

    📂 Ansible Directory Structure – Best Practice cho team DevOps mở rộng quy mô!

    Nếu bạn đang bắt đầu xây dựng automation với Ansible hoặc muốn chuẩn hóa một project tự động hóa lớn hơn, thì việc tổ chức cấu trúc thư mục đúng chuẩn là yếu tố cực kỳ quan trọng. Bức ảnh trên là một tóm tắt cực kỳ dễ hiểu về cách tổ chức một Ansible project chuyên nghiệp — nhưng đằng sau đó là rất nhiều best practice mà dân DevNetOps cần nắm kỹ!

    🔥 Giải mã từng thành phần trong cấu trúc chuẩn này:
    1. roles/ – How to do it!
      Đây là linh hồn của Ansible: mỗi "role" là một chức năng riêng biệt như cài Nginx, cấu hình firewall, tạo user, v.v. Bên trong mỗi role sẽ có các thư mục tasks/, handlers/, defaults/, vars/, files/, templates/... giúp chia nhỏ logic và dễ tái sử dụng.

      Ví dụ:
      roles/webserver/tasks/main.yml có thể khai báo các task để cài và cấu hình Apache hoặc Nginx.

    1. playbooks/ – What to do!
      Nơi chứa các file .yml gọi các roles theo kịch bản cụ thể. Playbook trả lời cho câu hỏi: “Làm gì trên hệ thống?”

      Ví dụ:
      playbooks/deploy-app.yml sẽ dùng webserver, dbserver, appconfig role để triển khai ứng dụng đầy đủ.

    1. group_vars/ – Data to do it!
      Nơi khai báo biến cho từng nhóm host (ví dụ: staging, production). Cách quản lý biến hiệu quả giúp playbook tái sử dụng và dễ scale.

      Ví dụ:
      group_vars/prod.yml chứa app_version: 1.2.0, còn group_vars/dev.yml là app_version: latest.

    1. files/ – Stuff to do it!
      Chứa các file tĩnh cần copy lên server, như tập tin cấu hình, binary, script shell...

      Ví dụ:
      Copy file nginx.conf vào /etc/nginx/nginx.conf.

    1. inventory.yaml – Who to do it to!
      Đây là file mô tả “những host nào sẽ được cấu hình”. Bạn có thể dùng dynamic inventory hoặc chia thành nhiều nhóm như [web], [db], [dev], [prod].

      Ví dụ:


      all: children: prod: hosts: web01.vnpro.local: db01.vnpro.local:


    💡 Tại sao cần tổ chức như vậy?
    • 🧩 Modular hóa – chia nhỏ theo chức năng, dễ test, dễ tái sử dụng
    • 🚀 Dễ scale – quản lý hàng trăm máy chỉ bằng cách thêm biến và host
    • 🛠 CI/CD ready – dễ tích hợp vào pipeline như GitLab, Jenkins
    • 📚 Dễ đào tạo và bảo trì – người mới vào nhìn vào biết ngay project chạy thế nào


    🔁 Tips thực chiến:
    • Tạo role bằng lệnh ansible-galaxy init roles/myrole để có skeleton chuẩn.
    • Dùng defaults/main.yml để set biến mặc định có thể override ở nhiều mức (group_vars, host_vars, CLI).
    • Gắn version vào playbook để audit cấu hình rõ ràng.
    • Nếu dùng Git, tách inventory/ riêng cho từng environment (inventory/prod, inventory/dev).


    💬 Bạn đang dùng cấu trúc gì cho project Ansible của mình? Gặp khó khăn ở đâu trong việc tái sử dụng roles? Hãy chia sẻ để cùng nhau tối ưu!
    #DevOpsVN #NetDevOps #AnsibleBestPractice vnpro #AutomationTraining
    Attached Files
    Đặng Quang Minh, CCIE#11897 (Enterprise Infrastructure, Wireless, Automation, AI), CCSI#31417

    Email : dangquangminh@vnpro.org
    https://www.facebook.com/groups/vietprofessional/
Working...
X