feat: Implement VM console access, display VM power state, and add VM statistics retrieval.
This commit is contained in:
+89
-1
@@ -37,8 +37,10 @@ use App\Http\Controllers\admin\UserController;
|
||||
use App\Http\Controllers\admin\vm\VirtualMachineController;
|
||||
use App\Http\Controllers\Api\VpsActionController;
|
||||
use App\Http\Controllers\rest\ModuleController;
|
||||
use App\Http\Services\vCenter;
|
||||
use App\Models\ModuleVmware;
|
||||
use Illuminate\Http\Request;
|
||||
use Illuminate\Support\Facades\Cookie;
|
||||
use Illuminate\Support\Facades\Http;
|
||||
use Illuminate\Support\Facades\Route;
|
||||
|
||||
|
||||
@@ -381,6 +383,92 @@ Route::prefix('')->group(function () {
|
||||
Route::post('task-reinstall', 'Reinstall')->name('task.reinstall');
|
||||
});
|
||||
|
||||
//Console Ticket API for Admin - using vm_id from VirtualMachines
|
||||
Route::get('admin-get-console-ticket', function (Request $request, vCenter $serviceVCenter) {
|
||||
$vm_id = $request->get('vm_id');
|
||||
if (!$vm_id) {
|
||||
return response()->json(['error' => true, 'message' => "Please provide vm_id"]);
|
||||
}
|
||||
$vm = \App\Models\VirtualMachines::with('datacenter.vCenter')->where('vm_id', $vm_id)->first();
|
||||
if (!$vm) {
|
||||
return response()->json(['error' => true, 'message' => "Can't find VM with vm_id: " . $vm_id]);
|
||||
}
|
||||
|
||||
$vcenter = null;
|
||||
if ($vm->datacenter && $vm->datacenter->vCenter) {
|
||||
$vcenter = $vm->datacenter->vCenter;
|
||||
}
|
||||
|
||||
if (!$vcenter) {
|
||||
return response()->json(['error' => true, 'message' => "Can't find vCenter information"]);
|
||||
}
|
||||
|
||||
if (!$serviceVCenter->loginServer($vcenter)) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => 'Không thể đăng nhập vào vCenter'
|
||||
]);
|
||||
}
|
||||
|
||||
$ConsoleTicket = $serviceVCenter->GetConsoleTickets($vm->vm_id);
|
||||
|
||||
if ($ConsoleTicket === 'Login_Again') {
|
||||
if ($serviceVCenter->loginServer($vcenter)) {
|
||||
$ConsoleTicket = $serviceVCenter->GetConsoleTickets($vm->vm_id);
|
||||
} else {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => 'Không thể đăng nhập lại vào vCenter'
|
||||
]);
|
||||
}
|
||||
}
|
||||
|
||||
if (is_string($ConsoleTicket)) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => "Failed to get console ticket: $ConsoleTicket"
|
||||
]);
|
||||
}
|
||||
|
||||
if ($ConsoleTicket['error']) {
|
||||
return response()->json([
|
||||
'error' => true,
|
||||
'message' => $ConsoleTicket['data']
|
||||
]);
|
||||
}
|
||||
|
||||
return response()->json([
|
||||
'error' => false,
|
||||
'data' => $ConsoleTicket['data'],
|
||||
'host' => $vcenter->host,
|
||||
'vmware-api-session-id' => $serviceVCenter->token
|
||||
])->cookie('vmware-api-session-id', $serviceVCenter->token, 60, '/', null, false, false);
|
||||
})->name('admin.getConsoleTicket');
|
||||
|
||||
//Admin VM Console View - using vm_id
|
||||
Route::get('view-admin-console/{vm_id}', function (Request $request, $vm_id, vCenter $serviceVCenter) {
|
||||
$vm = \App\Models\VirtualMachines::with('datacenter.vCenter', 'host')->where('vm_id', $vm_id)->first();
|
||||
if (!$vm) {
|
||||
return back()->withErrors("Can't find VM with vm_id: " . $vm_id);
|
||||
}
|
||||
|
||||
$vmStats = null;
|
||||
if ($vm->datacenter && $vm->datacenter->vCenter) {
|
||||
$vcenter = $vm->datacenter->vCenter;
|
||||
if ($serviceVCenter->loginServer($vcenter)) {
|
||||
$vmStats = $serviceVCenter->GetVMStats($vm->vm_id);
|
||||
if ($vmStats['error']) {
|
||||
$vmStats = null;
|
||||
} else {
|
||||
$vmStats = $vmStats['data'];
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
$title = 'Console - ' . ($vm->name ?? 'VM ' . $vm_id);
|
||||
return view('administrator.pages.vm_console', compact('title', 'vm', 'vmStats'));
|
||||
})->name('admin.vm.console');
|
||||
|
||||
//Invoice
|
||||
Route::controller(InvoiceController::class)->group(function () {
|
||||
Route::get('list-all-invoice', 'index')->name('administrator.pages.invoice.index');
|
||||
|
||||
Reference in New Issue
Block a user