8.2 KiB
8.2 KiB
Tóm tắt thay đổi - Xử lý Addon sau khi Clone VM
Tổng quan
Tài liệu này mô tả các thay đổi đã thực hiện để cải thiện hệ thống quản lý vCenter virtual machines trong Laravel application.
Các thay đổi chính
1. Cải thiện vCenter Service (app/Http/Services/vCenter.php)
1.1 Thêm các method cập nhật phần cứng VM
- updateVMHardware(): Method chính để cập nhật cấu hình phần cứng VM
- updateVMCPU(): Cập nhật số lượng CPU cores
- updateVMMemory(): Cập nhật RAM (convert GB sang MiB)
- updateVMDisk(): Cập nhật dung lượng disk (mở rộng disk)
1.2 Cải thiện CreateVirtualMachine()
- Thêm logic để áp dụng addon sau khi clone VM thành công
- Convert RAM từ GB sang MiB trước khi gọi API
- Thêm logging chi tiết cho quá trình tạo VM và cập nhật addon
- Gửi thông báo Discord khi tạo VM thành công
1.3 Thêm method test
- testAddonUpdate(): Method để test việc cập nhật addon
2. Cập nhật CreateVirtualMachineJob (app/Jobs/VirtualMachine/Create/CreateVirtualMachineJob.php)
2.1 Cải thiện xử lý addon
- Parse đúng số lượng addon từ order items
- Truyền thông tin addon vào vCenter service
- Thêm logging chi tiết cho quá trình xử lý
2.2 Lưu vm_id vào invoice
- Lưu VM ID vào bảng
invoicesau khi tạo thành công - Cập nhật trạng thái order và gửi email thông báo
3. Tạo ServiceController (app/Http/Controllers/frontend/ServiceController.php)
3.1 Chức năng chính
- show(): Hiển thị chi tiết service dựa trên invoice_id
- toggleVM(): Điều khiển VM (start/stop/restart) - placeholder
- getVMInfo(): Lấy thông tin VM từ vCenter - placeholder
3.2 Tích hợp vCenter API
- getVMInfoFromVCenter(): Lấy thông tin VM thực từ vCenter API
- getDefaultVMInfo(): Thông tin mặc định khi không thể kết nối vCenter
- Tự động login vào vCenter và lấy thông tin chi tiết VM
3.3 Thông tin VM được lấy
- Trạng thái power (POWERED_ON, POWERED_OFF, SUSPENDED)
- IP address từ guest info
- Thông tin phần cứng (CPU, RAM, Disk)
- Thông tin chi tiết (folder, resource pool, datastore, network, etc.)
4. Tạo Service Detail View (resources/views/frontend/service/show.blade.php)
4.1 Giao diện hiển thị
- Thông tin cơ bản của service (invoice, customer, billing)
- Thông tin chi tiết VM từ vCenter API
- Danh sách addon đã mua
- Nút điều khiển VM (placeholder)
4.2 Thông tin VM hiển thị
- VM ID, tên VM, trạng thái
- IP address, hostname, MAC address
- CPU, RAM, Disk, OS
- Thông tin chi tiết: folder, resource pool, datastore, network, version
5. Cập nhật Routes (routes/web.php)
5.1 Thêm routes cho service
Route::get('/service/{invoice_id}', [ServiceController::class, 'show'])->name('service.show');
Route::post('/service/{invoice_id}/toggle-vm', [ServiceController::class, 'toggleVM'])->name('service.toggle-vm');
Route::get('/service/{invoice_id}/vm-info', [ServiceController::class, 'getVMInfo'])->name('service.vm-info');
6. Cập nhật My Service View (resources/views/frontend/my-service.blade.php)
6.1 Thêm link chi tiết
- Cập nhật link "Xem chi tiết" để trỏ đến route mới
- Hiển thị VM ID nếu có
7. Cập nhật Admin Invoice Views
7.1 Hiển thị VM ID
- resources/views/admin/invoice/show.blade.php: Thêm cột VM ID
- resources/views/admin/invoice/index.blade.php: Thêm cột VM ID
8. Tạo Test Commands
8.1 TestVMInfo Command (app/Console/Commands/TestVMInfo.php)
- Test việc lấy thông tin VM từ vCenter API
- Kiểm tra login, VM details, power status, IP info
- Hiển thị thông tin chi tiết để debug
8.2 TestSaveVMId Command (app/Console/Commands/TestSaveVMId.php)
- Test việc lưu VM ID vào invoice
- Simulate quá trình tạo VM và lưu thông tin
8.3 TestCreateVMWithAddon Command (app/Console/Commands/TestCreateVMWithAddon.php)
- Test toàn bộ quá trình tạo VM với addon
- Từ order đến tạo VM và cập nhật addon
Các vấn đề đã giải quyết
1. Vấn đề addon không áp dụng
- Nguyên nhân: Logic cũ không cập nhật phần cứng sau khi clone VM
- Giải pháp: Thêm logic cập nhật phần cứng sau khi clone thành công
2. Vấn đề convert RAM
- Nguyên nhân: RAM được truyền dưới dạng GB nhưng API yêu cầu MiB
- Giải pháp: Convert GB sang MiB (1 GB = 1024 MiB) trước khi gọi API
3. Vấn đề hiển thị thông tin VM
- Nguyên nhân: Không có cách để xem thông tin VM thực từ vCenter
- Giải pháp: Tạo service detail page tích hợp với vCenter API
4. Vấn đề lưu VM ID
- Nguyên nhân: VM ID không được lưu vào database
- Giải pháp: Lưu VM ID vào bảng
invoicesau khi tạo thành công
Cách sử dụng
1. Test lấy thông tin VM
php artisan test:vm-info {invoice_id}
2. Test lưu VM ID
php artisan test:save-vm-id {invoice_id}
3. Test tạo VM với addon
php artisan test:create-vm-with-addon {order_id}
4. Truy cập service detail
- URL:
/service/{invoice_id} - Yêu cầu đăng nhập và quyền sở hữu invoice
Lưu ý quan trọng
1. Bảo mật
- Kiểm tra quyền truy cập: chỉ customer sở hữu mới được xem service detail
- Validate input và handle exception cẩn thận
2. Performance
- Cache thông tin VM nếu cần thiết
- Timeout cho vCenter API calls
- Fallback khi không thể kết nối vCenter
3. Monitoring
- Log chi tiết tất cả operations
- Gửi thông báo Discord cho các events quan trọng
- Track performance của vCenter API calls
Các bước tiếp theo
1. Implement VM Control Actions
- Start/Stop/Restart VM thực sự
- Console access
- Snapshot management
2. Cải thiện UI/UX
- Real-time status updates
- Progress indicators
- Better error handling
3. Monitoring & Alerting
- VM health monitoring
- Resource usage tracking
- Automated alerts
4. Backup & Recovery
- Automated backup scheduling
- Disaster recovery procedures
- Backup verification
Database Changes
1. Invoice Table
- Thêm cột
vm_idđể lưu VM ID từ vCenter - Cột này được populate sau khi tạo VM thành công
2. Không có migration cần thiết
- Cột
vm_idđã tồn tại trong database
API Endpoints
1. vCenter API Integration
GET /rest/vcenter/vm/{vm_id}- Lấy thông tin VMGET /rest/vcenter/vm/{vm_id}/guest/power- Lấy trạng thái powerGET /rest/vcenter/vm/{vm_id}/guest/identity- Lấy thông tin guestPATCH /rest/vcenter/vm/{vm_id}/hardware/cpu- Cập nhật CPUPATCH /rest/vcenter/vm/{vm_id}/hardware/memory- Cập nhật RAM
2. Application API
GET /service/{invoice_id}- Service detail pagePOST /service/{invoice_id}/toggle-vm- Điều khiển VMGET /service/{invoice_id}/vm-info- Lấy thông tin VM
Testing
1. Unit Tests
- Test vCenter service methods
- Test VM creation workflow
- Test addon application logic
2. Integration Tests
- Test vCenter API integration
- Test complete VM creation flow
- Test service detail page
3. Manual Testing
- Test với VM thực trên vCenter
- Test các trường hợp lỗi
- Test performance với nhiều VM
Troubleshooting
1. VM Creation Issues
- Kiểm tra vCenter connectivity
- Verify template availability
- Check resource availability
2. Addon Application Issues
- Verify addon quantities
- Check API responses
- Review logs for errors
3. Service Detail Page Issues
- Check vCenter login
- Verify VM ID exists
- Review API responses
Conclusion
Các thay đổi này đã cải thiện đáng kể hệ thống quản lý VM:
- Tự động áp dụng addon sau khi tạo VM
- Hiển thị thông tin VM thực từ vCenter
- Giao diện quản lý service chi tiết
- Monitoring và logging tốt hơn
Hệ thống hiện tại đã sẵn sàng cho production với các tính năng cơ bản hoạt động ổn định.