@extends('layouts.portal') @section('title', 'Lab portal') @section('subtitle', 'Virtual labs on VMware vSphere/ESXi, Workstation, Proxmox, AWS and Azure, opened in the browser through the console gateway. Learners never receive machine credentials.') @section('actions')@can('settings.view') Platform credentials@endcan @endsection @section('content')

Platforms

Console gateway: {{ $gateway ? 'connected' : 'not configured' }}
@foreach($drivers as $key => $d)
{{ $d->label() }}{{ $d->configured() ? 'Connected' : 'Not connected' }}

Provider key {{ $key }}@switch($key) @case('proxmox') · linked clone of a template VM per session @break @case('vsphere') · vCenter clone per session (ESXi hosts managed by vCenter) @break @case('workstation') · vmrest clone on a lab PC @break @case('pool') · assigns pre-built machines (standalone ESXi, racks, EVE-NG) @break @case('aws') · EC2 from a launch template, tagged and auto-terminated @break @case('azure') · one resource group per session, deleted at expiry @break @endswitch

@endforeach

Limits: {{ config('labs.limits.max_active_per_user') }} active lab per learner · one extension of {{ config('labs.limits.extend_minutes') }} minutes · expired sessions are destroyed automatically every 5 minutes · access only for learners enrolled in the lab's course.

Live sessions ({{ $sessions->count() }})

@forelse($sessions as $s) @empty @endforelse
LearnerLabPlatformStartedExpiresStatus
{{ $s->user?->name }}
{{ $s->session_id }}
{{ $s->lab?->title }}{{ $s->access['provider'] ?? $s->lab?->provider }} {{ $s->started_at?->format('d M H:i') }}{{ $s->expires_at?->format('d M H:i') }}{{ $s->status }} @can('labs.manage')
@csrf
@endcan
No lab is running right now.

Labs

@foreach($labs as $l) @endforeach
LabCoursePlatformLive now
{{ $l->title }}
{{ $l->duration_minutes }} min · {{ $l->published ? 'published' : 'hidden' }}
{{ $l->course?->title ?? 'Open to all learners' }} @if(\App\Labs\LabOrchestrator::live($l->provider)){{ \App\Labs\LabOrchestrator::driver($l->provider)->label() }}@elseGuided{{ $l->provider !== 'local' ? ' ('.$l->provider.' not connected)' : '' }}@endif {{ $l->active_count }} @can('labs.manage')@endcan
@can('labs.manage') @foreach($labs as $l) @endforeach @endcan @endsection