Blog
Thoughts on engineering, design, and building great products.
Ansible Galaxy và Collections
Cách đóng gói và phân phối hiện đại của Ansible: collection gom module, role, plugin dưới một namespace; FQCN để gọi rõ ràng; cài collection từ Galaxy bằng requirements.yml; và phân biệt ansible-core với gói ansible đầy đủ.
Roles: Tổ Chức Code Tái Sử Dụng
Khi playbook lớn lên, ta cần tổ chức. Role là cách Ansible đóng gói task, handler, template, biến thành một đơn vị tái sử dụng theo cấu trúc thư mục chuẩn. Bài này: tạo role bằng ansible-galaxy init, điền nội dung, và dùng trong playbook.
Handlers, Loops và Conditionals
Điều khiển luồng playbook: loop để lặp một task qua nhiều giá trị, when để chạy có điều kiện, handlers để phản ứng với thay đổi (restart khi đổi config), và block/rescue để xử lý lỗi gọn gàng. Kèm log chạy thật.
Biến, Facts và Template (Jinja2)
Làm playbook linh hoạt: biến (khai báo ở nhiều nơi, có thứ tự ưu tiên), facts (thông tin host Ansible tự thu thập), và template Jinja2 để sinh file cấu hình động từ biến và facts. Quan sát file render thật trên host.
Module và Idempotency
Deep-dive: module hoạt động bên trong thế nào để đạt idempotency — đọc trạng thái hiện tại, so với mong muốn, chỉ thay đổi phần khác biệt rồi báo changed. Vì sao command/shell không idempotent, check mode, và tour các module hay dùng.
Playbook: Cấu Trúc và Task
Playbook là trái tim của Ansible — file YAML mô tả trạng thái mong muốn. Bài này: cấu trúc play và task, viết và chạy playbook đầu tiên cài một web server, đọc PLAY RECAP, FQCN, và chế độ check (dry-run).
Inventory: Tĩnh, Động, Nhóm và Biến
Inventory là nơi Ansible biết quản lý máy nào. Bài này: viết inventory tĩnh (INI/YAML), gom host thành nhóm và nhóm lồng nhau, gán biến qua group_vars/host_vars, nhắm mục tiêu bằng pattern, và inventory động cho cloud.