Danh sách bài viết trong series Sử dụng Ansible tự động hệ thống
- Bài 1: Ansible Là Gì Mà Dân DevOps Mê Thế?
- Bài 2: Ansible Inventory – Danh Bạ Server Của Bạn
- Bài 3: Ansbile Ad-Hoc – Lệnh Nhanh Như Chớp
- Bài 4: Ansbile Playbook Đầu Tiên – Đừng Sợ YAML
- Bài 5: Ansible Variables – Bí Kíp Linh Hoạt Hóa Mọi Thứ
- Bài 6: Ansible Module Nâng Cao – Mở Rộng Khả Năng
- Bài 7: Ansible Roles – Sạch Sẽ Như Nhà Mới Dọn
- Bài 8: Ansible Template Jinja2 – Config Động Như Phim Marvel
- Bài 9: Ansible Conditionals Và Loops – Đỉnh Cao Điều Khiển
- Bài 10: Ansible Error Handling – Không Panic Khi Fail
- Bài 11: Ansible Quản Lý Cloud – Chơi Lớn Với AWS
- Bài 12: Ansible Dynamic Inventory – Danh Sách Server Tự Động
- Bài 13: Ansible Vault – Khóa Két Sắt Cho Bí Mật
- Bài 14: Ansible Tower/AWX – Trung Tâm Điều Khiển DevOps
- Bài 15: Ansible Best Practices – Viết Ansible Sạch, Chạy Đỉnh Cao
Ở bài trước, tụi mình đã thấy Ansible Variables DevOps “thần thánh” thế nào khi làm playbook linh hoạt hơn – không còn hardcode lung tung nữa. Nhưng mà hồi đó, mình mới chỉ dùng vài module cơ bản như copy
, apt
, hay service
. Rồi một ngày, mình cần tạo user trên server, chạy Bash script cũ, và làm mấy việc “khó nhằn” khác – lúc đó mới nhận ra Ansible Module DevOps là cả một kho báu! Hôm nay, mình sẽ kể bạn nghe Ansible Module DevOps nâng cao là gì, cách dùng các module mạnh mẽ như user
, shell
, và một vài module khác mà mình hay xài trong DevOps. Cùng làm thử vài ví dụ để bạn thấy Ansible “biến hóa” ra sao nhé!
Ansible Module DevOps Là Gì? – “Hộp Đồ Nghề” Của DevOps
Nói đơn giản, Ansible Module DevOps là các công cụ nhỏ mà Ansible dùng để thực thi task trên server. Bạn có thể tưởng tượng module như “hộp đồ nghề” – mỗi module làm một việc cụ thể: copy
để copy file, apt
để cài package, service
để quản lý service. Từ bài 1 đến bài 5, tụi mình đã dùng vài module cơ bản, nhưng Ansible có hàng trăm module, từ quản lý user, file, đến chạy script hay thậm chí điều khiển cloud.
Hồi mới làm DevOps, mình nghĩ: “Ủa, chắc cũng giống Bash script thôi, cần gì module?”. Nhưng rồi có lần mình cần tạo 10 user trên 5 server, nếu dùng Bash thì phải SSH từng máy, viết script dài dòng – mệt muốn xỉu. Rồi mình mò ra module user
của Ansible, chỉ vài dòng YAML là xong, nhanh hơn cả Flash chạy đua! Từ đó, mình mê Ansible Module DevOps luôn – nó giúp mình làm được những việc mà Bash phải viết cả trang script mới xong.
Khám Phá Một Vài Module Nâng Cao
Ansible có hàng trăm module, nhưng mình sẽ giới thiệu vài module nâng cao mà mình hay dùng trong DevOps. Cùng xem từng cái nhé!
-
Module
user
– Tạo Và Quản Lý User: Mình hay dùng module này để tạo user trên server, thêm SSH key cho user, hoặc xóa user khi cần. Ví dụ, tạo userdeploy
trênwebservers
. Tạo filecreate_user.yml
:- name: Create deploy user on webservers hosts: webservers become: yes tasks: - name: Create user deploy user: name: deploy state: present shell: /bin/bash create_home: yes groups: sudo append: yes
state: present
: Đảm bảo user tồn tại (nếu không có thì tạo).create_home: yes
: Tạo thư mục home cho user.groups: sudo
: Thêm user vào nhóm sudo.
Chạy playbook:
ansible-playbook -i hosts create_user.yml
Kết quả:
changed: [web1] changed: [web2]
SSH vào server kiểm tra:
ssh ubuntu@192.168.1.10 "id deploy"
Nếu thấy user
deploy
với nhómsudo
, là thành công! Mình từng quênbecome: yes
, làm playbook lỗi “permission denied” – suýt khóc vì tưởng khó. -
Module
shell
– Tích Hợp Bash Script: Có lần mình cần chạy một Bash script cũ trên server, mà script đó phức tạp, không muốn viết lại bằng Ansible. Moduleshell
cứu mình! Ví dụ, chạy script kiểm tra CPU. Tạo filerun_script.yml
:- name: Run Bash script on webservers hosts: webservers tasks: - name: Copy CPU check script copy: src: cpu_check.sh dest: /tmp/cpu_check.sh mode: '0755' - name: Run CPU check script shell: /tmp/cpu_check.sh register: cpu_output - name: Debug CPU output debug: msg: "{{ cpu_output.stdout }}"
Tạo file
cpu_check.sh
trên máy local:echo '#!/bin/bash' > cpu_check.sh echo 'top -bn1 | head -n3' >> cpu_check.sh chmod +x cpu_check.sh
Chạy playbook:
ansible-playbook -i hosts run_script.yml
Kết quả sẽ in thông tin CPU, kiểu:
ok: [web1] => { "msg": "%CPU(s): 1.2 us, 0.5 sy, 0.0 ni, 98.3 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st" }
Module
shell
mạnh ở chỗ nó chạy được mọi lệnh Bash, nhưng cẩn thận – dùng nhiều quá sẽ làm playbook “bừa bộn”. Mình từng lạm dụngshell
, đến lúc debug mới thấy khó tìm lỗi. -
Module
file
– Quản Lý File/Thư Mục: Module này giúp tạo/xóa file, thư mục, hoặc đổi quyền. Ví dụ, tạo thư mục/var/app
:- name: Create app directory hosts: webservers become: yes tasks: - name: Create /var/app directory file: path: /var/app state: directory mode: '0755' owner: deploy group: deploy
state: directory
: Đảm bảo/var/app
là thư mục.mode: '0755'
: Quyền thư mục.
Chạy:
ansible-playbook -i hosts create_dir.yml
Kết quả:
changed: [web1] changed: [web2]
Module
file
rất tiện để chuẩn bị môi trường trước khi deploy app. Mình từng quên set quyền, làm app không chạy – từ đó luôn nhớ thêmmode
.
Thực Hành Nhẹ: Tạo User Và Chạy Script
Giờ bạn thử kết hợp các module: tạo user deploy
, tạo thư mục, và chạy script kiểm tra CPU. Tạo file combined.yml
:
- name: Create user and run script
hosts: webservers
become: yes
tasks:
- name: Create user deploy
user:
name: deploy
state: present
shell: /bin/bash
create_home: yes
- name: Create app directory
file:
path: /var/app
state: directory
mode: '0755'
owner: deploy
group: deploy
- name: Copy CPU check script
copy:
src: cpu_check.sh
dest: /var/app/cpu_check.sh
mode: '0755'
owner: deploy
- name: Run CPU check script as deploy user
shell: /var/app/cpu_check.sh
become_user: deploy
register: cpu_output
- name: Debug CPU output
debug:
msg: "{{ cpu_output.stdout }}"
Chạy:
ansible-playbook -i hosts combined.yml
Kết quả sẽ tạo user, thư mục, chạy script, và in CPU usage. Mình từng quên become_user
, làm script chạy với user sai – lỗi “permission denied” ngay lập tức.
Mẹo Nhỏ Từ Kinh Nghiệm Thật
- Dùng
command
thayshell
nếu đơn giản: Moduleshell
mạnh nhưng chậm, nếu chỉ chạy lệnh đơn giản (VD:echo
), dùngcommand
nhanh hơn. - Kiểm tra module trước: Dùng
ansible-doc
để đọc tài liệu module:ansible-doc user
Mình hay dùng cái này để tìm option mới.
- Cẩn thận với
shell
: Nó chạy được mọi lệnh, nhưng dễ gây lỗi nếu lệnh phức tạp. Mình từng chạy nhầmrm -rf
quashell
, may mà có backup.
Có lần mình dùng shell
để chạy lệnh reboot
trên 10 server, quên kiểm tra, làm cả cụm production reboot cùng lúc – khách hàng gọi tới tấp, sếp hỏi “Mày làm gì vậy?”. Từ đó, mình luôn chạy --check
trước khi dùng shell
cho lệnh “nguy hiểm”.
Tiếp Theo Là Gì?
Bài này tụi mình đã làm quen với Ansible Module DevOps nâng cao, từ tạo user đến chạy script. Lần sau, mình sẽ kể bạn nghe về role – cách tổ chức playbook gọn gàng hơn, không còn “dài như truyện Conan” nữa. Chịu không?
Thử Nghiệm Nhẹ: Thử thêm module yum
(nếu server dùng CentOS) để cài package, hoặc dùng shell
chạy lệnh uptime
. Có gì thắc mắc cứ nhắn mình nhé – module là “đồ chơi” mạnh, làm quen tốt là bạn đã sẵn sàng cho những task lớn!