Blog
Thoughts on engineering, design, and building great products.
Kiểm Thử Role với Molecule
Trước khi đẩy role lên hàng trăm host, hãy kiểm thử nó. Molecule dựng container tạm, áp role, kiểm tra idempotency và verify kết quả — tự động. Bài này: cấu trúc scenario, vòng test create→converge→idempotence→verify→destroy, và lưu ý phiên bản.
Tối Ưu và Chiến Lược Thực Thi
Chạy Ansible nhanh và an toàn trên hàng trăm host: forks và strategy điều khiển song song, serial cho rolling update không gián đoạn, delegate_to/run_once, async cho task dài, fact caching và pipelining để tăng tốc, tags và check mode để kiểm soát.
Mở Rộng Ansible: Filter, Lookup và Callback Plugins
Module mở rộng việc làm trên host; plugin mở rộng bản thân Ansible chạy ở control node. Bài này: filter plugin (biến đổi dữ liệu trong Jinja2), lookup plugin (lấy dữ liệu ngoài), callback plugin (tùy biến output), và sự khác biệt module vs plugin.
Viết Custom Module Bằng Python
Deep-dive: tự viết một module Ansible bằng Python. Hiểu AnsibleModule, argument_spec, exit_json/fail_json, hỗ trợ check_mode, và pattern đạt idempotency. Đây là lúc cơ chế từ Bài 1 (ship module qua SSH) khép lại trọn vẹn.
Ansible Vault: Quản Lý Bí Mật
Mật khẩu, khóa API không thể để trần trong Git. Ansible Vault mã hóa bí mật bằng AES256, giải mã tự động lúc chạy. Bài này: encrypt/view/edit file bí mật, encrypt_string cho từng giá trị, dùng trong playbook, và best practices.
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.