Bối cảnh: Khi Excel và click chuột trở thành cơn ác mộng
Hãy tưởng tượng kịch bản này: 2 giờ sáng, sếp nhắn tin yêu cầu danh sách cấu hình của hơn 300 máy ảo để kịp buổi kiểm toán lúc 8 giờ sáng. Nếu ngồi click từng con VM trên vSphere Client để copy-paste, bạn sẽ mất ít nhất 3 tiếng làm việc vô nghĩa. Với một hệ thống lớn gồm 8 host ESXi và hàng trăm máy ảo, làm thủ công không chỉ chậm mà còn cực kỳ dễ sai sót.
Nhiều anh em thường dùng PowerCLI trên Windows. Tuy nhiên, nếu bạn đang dùng Linux hoặc muốn tích hợp báo cáo vào Dashboard tự động, pyVmomi (Python SDK cho VMware) là lựa chọn tối ưu hơn hẳn. Công cụ này giúp biến các thao tác quản trị phức tạp thành các dòng code có thể tái sử dụng.
Tự động hóa Inventory giúp bạn loại bỏ hoàn toàn lỗi nhập liệu. Thay vì thức trắng đêm, bạn chỉ mất khoảng 5 giây để chạy một script Python và nhận về file báo cáo chi tiết đến từng địa chỉ MAC.
Cài đặt: Chuẩn bị công cụ
Để bắt đầu, bạn cần Python 3.8 trở lên. Đừng cài thư viện trực tiếp vào môi trường hệ thống. Hãy sử dụng virtualenv để giữ môi trường sạch sẽ và tránh xung đột phiên bản.
# Khởi tạo môi trường ảo
python3 -m venv venv-vmware
source venv-vmware/bin/activate
# Cài đặt thư viện pyVmomi
pip install pyvmomi
Thư viện pyvmomi là bộ công cụ chính thức từ VMware để giao tiếp với vCenter API. Nếu muốn xuất báo cáo CSV chuyên nghiệp, bạn có thể cài thêm pandas, nhưng thư viện csv mặc định của Python là đã đủ dùng cho nhu cầu cơ bản.
Triển khai: Viết script quét tài nguyên
Một rào cản phổ biến khi mới dùng pyVmomi là lỗi chứng chỉ SSL (Certificate Verify Failed). Nguyên nhân do vCenter thường dùng cert tự ký. Chúng ta sẽ xử lý vấn đề này ngay trong phần kết nối.
1. Thiết lập kết nối vCenter
Đầu tiên, chúng ta khởi tạo kết nối thông qua ServiceInstance. Đây là điểm vào duy nhất để truy cập toàn bộ dữ liệu hạ tầng.
import ssl
from pyVim.connect import SmartConnect, Disconnect
from pyVmomi import vim
# Bỏ qua kiểm tra SSL cho các cert nội bộ
s = ssl._create_unverified_context()
def connect_vcenter(host, user, password):
try:
si = SmartConnect(host=host, user=user, pwd=password, sslContext=s)
return si
except Exception as e:
print(f"Lỗi kết nối: {e}")
return None
2. Trích xuất dữ liệu máy ảo
vCenter quản lý đối tượng theo cấu trúc cây (Inventory Tree). Chúng ta sẽ dùng CreateContainerView để lấy nhanh danh sách toàn bộ máy ảo mà không cần duyệt qua từng Folder thủ công.
def get_all_vms(si):
content = si.RetrieveContent()
container = content.viewManager.CreateContainerView(
content.rootFolder, [vim.VirtualMachine], True
)
vm_data = []
for vm in container.view:
summary = vm.summary
config = vm.config
info = {
"Name": summary.config.name,
"Status": summary.runtime.powerState,
"CPU": config.hardware.numCPU,
"RAM_GB": config.hardware.memoryMB / 1024,
"IP": summary.guest.ipAddress if summary.guest else "N/A",
"OS": config.guestFullName
}
vm_data.append(info)
container.Destroy()
return vm_data
Đoạn code trên tập trung vào các thông số quan trọng: Tên, trạng thái, CPU, RAM và IP. Lưu ý: Nếu máy ảo chưa cài VMware Tools, trường ipAddress sẽ trả về giá trị rỗng.
3. Xuất báo cáo CSV
Để sếp có thể mở bằng Excel ngay lập tức, hãy chuyển đổi list dữ liệu sang định dạng CSV.
import csv
def export_to_csv(data, filename="vcenter_inventory.csv"):
if not data: return
keys = data[0].keys()
with open(filename, 'w', newline='', encoding='utf-8') as f:
writer = csv.DictWriter(f, fieldnames=keys)
writer.writeheader()
writer.writerows(data)
print(f"Báo cáo đã sẵn sàng: {filename}")
Kinh nghiệm thực chiến: Tối ưu cho hệ thống lớn
Khi chạy script trên cụm Cluster lớn (trên 500 VM), cách lặp từng object như trên bắt đầu bộc lộ nhược điểm về tốc độ. Để tối ưu, bạn nên sử dụng PropertyCollector. Cơ chế này cho phép fetch dữ liệu hàng loạt, giúp giảm thời gian quét từ vài phút xuống còn vài giây.
Vấn đề bảo mật cũng cực kỳ quan trọng. Tuyệt đối không để mật khẩu vCenter trực tiếp trong code (hardcode). Hãy sử dụng biến môi trường để bảo vệ thông tin đăng nhập:
export VC_PASSWORD="YourSecretPassword"
python inventory_script.py
Thay vì lãng phí thời gian vào những việc lặp đi lặp lại, hãy để Python làm thay bạn. Với script này, bạn chỉ cần nhấn Enter, pha một ly cafe và quay lại khi bản báo cáo đã nằm gọn trên bàn làm việc của sếp.
Nếu gặp lỗi Connection Timed Out, hãy kiểm tra Firewall cổng 443 giữa máy chạy script và vCenter. Chúc các bạn tự động hóa thành công và có những đêm trực yên bình!

