Tự động hóa VMware Workstation bằng REST API: Từ Click chuột sang Code

VMware tutorial - IT technology blog
VMware tutorial - IT technology blog

Tại sao bạn nên ngừng dùng GUI và chuyển sang API?

Việc mở giao diện VMware Workstation rồi click chuột từng máy ảo sẽ không vấn đề gì nếu bạn chỉ chạy 1-2 lab đơn giản. Tuy nhiên, hãy thử tưởng tượng bạn đang xây dựng một pipeline CI/CD. Mỗi khi push code, hệ thống cần một máy ảo sạch (clean state) để chạy test trong 5 phút rồi tự hủy để giải phóng 8GB RAM cho tác vụ khác. Lúc này, thao tác tay là không thể.

Nhiều người sẽ nghĩ đến PowerCLI. Công cụ này rất mạnh nhưng lại bị bó buộc vào PowerShell và Windows. Trong khi đó, VMware Workstation REST API linh hoạt hơn hẳn. Bạn có thể điều khiển máy ảo từ một script Bash trên Linux, một ứng dụng Python, hay thậm chí là Postman.

Thực tế tại các dự án lớn, việc dùng API giúp giảm 90% thời gian thiết lập môi trường. Thay vì tốn 15 phút chuẩn bị lab, bạn chỉ cần một câu lệnh duy nhất.

Quick Start: Kích hoạt API Server trong 2 phút

Mặc định, VMware Workstation không bật sẵn API server. Bạn cần khởi động nó thủ công thông qua file thực thi vmrest.exe nằm trong thư mục cài đặt.

Bước 1: Thiết lập thông tin xác thực

Đầu tiên, hãy mở Terminal (cmd hoặc PowerShell) với quyền Admin. Di chuyển vào thư mục C:\Program Files (x86)\VMware\VMware Workstation và chạy lệnh tạo user/pass:

vmrest.exe -u admin -p MySecretPassword

Lưu ý: Mật khẩu này sẽ được dùng để xác thực các yêu cầu HTTP sau này.

Bước 2: Chạy Server

Sau khi cấu hình xong, bạn chỉ cần gõ lệnh:

vmrest.exe

Nếu thấy dòng Served to http://127.0.0.1:8697, nghĩa là server đã sẵn sàng nhận lệnh.

Cách thức vận hành của VMware REST API

API này hoạt động như một web server nội bộ lắng nghe ở cổng 8697. Mọi thao tác quản lý máy ảo đều được thực hiện qua các HTTP Request tiêu chuẩn như GET, PUT, POST.

Xác thực (Authentication)

Hệ thống sử dụng cơ chế Basic Auth. Bạn cần gửi kèm User/Pass đã mã hóa Base64 trong Header. Nếu dùng Postman, bạn chỉ cần chọn tab Authorization, chọn Basic Auth và điền thông tin là xong.

Truy vấn danh sách máy ảo

Để lấy ID của các máy ảo đang có, hãy gửi request GET tới endpoint /api/vms.

Ví dụ sử dụng cURL:

curl -u "admin:MySecretPassword" -X GET http://127.0.0.1:8697/api/vms

Kết quả trả về là một mảng JSON. Hãy lưu lại giá trị id vì bạn sẽ cần nó để điều khiển máy ảo ở các bước sau.

Thực chiến: Điều khiển máy ảo bằng dòng lệnh

Dưới đây là 3 lệnh phổ biến nhất mà bạn sẽ dùng thường xuyên.

1. Kiểm tra trạng thái máy

Giả sử ID máy ảo là ABC123XYZ, câu lệnh kiểm tra sẽ như sau:

curl -u "admin:MySecretPassword" -X GET http://127.0.0.1:8697/api/vms/ABC123XYZ/power

2. Bật máy ảo (Power On)

Sử dụng phương thức PUT và truyền body là on:

curl -u "admin:MySecretPassword" -X PUT http://127.0.0.1:8697/api/vms/ABC123XYZ/power -H "Content-Type: application/vnd.vmware.vmw.rest-v1+json" -d "on"

3. Tắt máy ảo an toàn

Thay vì rút điện đột ngột, hãy dùng shutdown để hệ điều hành khách tắt đúng quy trình:

curl -u "admin:MySecretPassword" -X PUT http://127.0.0.1:8697/api/vms/ABC123XYZ/power -H "Content-Type: application/vnd.vmware.vmw.rest-v1+json" -d "shutdown"

Tối ưu quản lý hàng loạt với Python

Khi số lượng máy ảo lên tới hàng chục, việc gõ cURL từng câu sẽ rất mất thời gian. Python là giải pháp thay thế hoàn hảo để xử lý hàng loạt.

import requests
from requests.auth import HTTPBasicAuth

BASE_URL = "http://127.0.0.1:8697/api"
AUTH = HTTPBasicAuth('admin', 'MySecretPassword')

def power_on_lab_vms():
    # Lấy toàn bộ danh sách máy ảo
    vms = requests.get(f"{BASE_URL}/vms", auth=AUTH).json()
    
    for vm in vms:
        # Chỉ bật những máy ảo nằm trong thư mục Lab
        if "Lab" in vm['path']:
            url = f"{BASE_URL}/vms/{vm['id']}/power"
            headers = {'Content-Type': 'application/vnd.vmware.vmw.rest-v1+json'}
            requests.put(url, auth=AUTH, headers=headers, data="on")
            print(f"Đã gửi lệnh bật máy: {vm['path']}")

power_on_lab_vms()

Kinh nghiệm thực tế khi triển khai

  • An toàn dữ liệu: Tránh mở port 8697 ra internet. Nếu cần điều khiển từ xa qua LAN, hãy cấu hình tường lửa chỉ cho phép các IP cố định truy cập.
  • Xử lý xung đột port: Nếu cổng 8697 đã bị ứng dụng khác chiếm dụng, hãy đổi sang cổng khác bằng lệnh vmrest.exe -p 9000.
  • Yêu cầu bắt buộc: Các tính năng như shutdown hoặc lấy IP máy ảo chỉ hoạt động nếu bạn đã cài VMware Tools bên trong máy ảo đó.
  • Tài liệu nội bộ: VMware tích hợp sẵn giao diện Swagger. Bạn chỉ cần truy cập http://127.0.0.1:8697 trên trình duyệt để xem toàn bộ tài liệu API và test trực tiếp.

Làm chủ REST API giúp bạn chuyển dịch dần sang tư duy Infrastructure as Code (IaC). Thay vì thao tác thủ công, hãy để code tự vận hành hệ thống lab của mình.

Share: