@props([ 'server', 'view', 'status' => null, 'statusPolling' => false, 'statusPollingInterval' => '30s', ]) @php $vmStatus = optional($status)->status; $pollSuffix = $statusPollingInterval ? '.' . $statusPollingInterval : ''; $pollAttribute = $statusPolling ? 'wire:poll' . $pollSuffix . '="loadVmStatus"' : ''; @endphp
@if($server->status === 'active')
@php $advancedOnlyViews = ['boot-order', 'cloud-init', 'display', 'system', 'subdomain', 'statistics', 'help', 'firewall']; $isAdvancedOnlyView = in_array($view, $advancedOnlyViews); @endphp
user_set_icon . "'" : 'null' }}, initialColor: {{ $server->user_set_icon_color ? "'" . $server->user_set_icon_color . "'" : 'null' }} })">

Customize Server Icon

Start
Stop (ACPI)
Reboot (ACPI)
Power Off
@if ($view !== 'statistics') @endif @php $tabs = [ ['label' => 'Overview', 'view' => 'overview', 'route' => route('proxmox.server.overview', ['server' => $server->id])], ['label' => 'Statistics', 'view' => 'statistics', 'route' => route('proxmox.server.statistics', ['server' => $server->id]), 'advanced' => true], [ 'label' => 'Hardware', 'dropdown' => true, 'items' => [ ['label' => 'Boot Settings', 'view' => 'boot-order', 'route' => route('proxmox.server.boot-order', ['server' => $server->id]), 'advanced' => true], ['label' => 'Display', 'view' => 'display', 'route' => route('proxmox.server.display', ['server' => $server->id]), 'advanced' => true], ['label' => 'Storage', 'view' => 'storage', 'route' => route('proxmox.server.storage', ['server' => $server->id]), 'advanced' => true], ['label' => 'System', 'view' => 'system', 'route' => route('proxmox.server.system', ['server' => $server->id]), 'advanced' => true], ] ], [ 'label' => 'Networking', 'dropdown' => true, 'items' => [ ['label' => 'Configuration', 'view' => 'network', 'route' => route('proxmox.server.network', ['server' => $server->id])], ['label' => 'Firewall', 'view' => 'firewall', 'route' => route('proxmox.server.firewall', ['server' => $server->id]), 'advanced' => true], ['label' => 'Subdomain', 'view' => 'subdomain', 'route' => route('proxmox.server.subdomain', ['server' => $server->id]), 'advanced' => true], ] ], ['label' => 'Cloud-init', 'view' => 'cloud-init', 'route' => route('proxmox.server.cloud-init', ['server' => $server->id]), 'advanced' => true], ]; if($server->service->product->settings()->where('key', 'backups')->first()?->value > 0) { $tabs[] = ['label' => 'Backups', 'view' => 'backups', 'route' => route('proxmox.server.backups', ['server' => $server->id])]; } if($server->node->vnc_enabled) { $tabs[] = [ 'label' => 'Console', 'dropdown' => true, 'items' => [ ['label' => 'NoVNC', 'view' => 'vnc', 'route' => route('proxmox.server.vnc', ['server' => $server->id])], ['label' => 'Xterm.js', 'view' => 'xterm', 'route' => route('proxmox.server.xterm', ['server' => $server->id])], ] ]; } $tabs[] = ['label' => 'Help', 'view' => 'help', 'route' => route('proxmox.server.help', ['server' => $server->id]), 'advanced' => true]; @endphp
@php // Find the current tab label, checking both regular tabs and dropdown items $currentLabel = 'Menu'; foreach ($tabs as $tab) { if (isset($tab['view']) && $tab['view'] === $view) { $currentLabel = $tab['label']; break; } if (isset($tab['dropdown']) && $tab['dropdown'] && isset($tab['items'])) { foreach ($tab['items'] as $item) { if ($item['view'] === $view) { $currentLabel = $item['label']; break 2; } } } } @endphp
Std
Adv
@foreach($tabs as $tab) @php $isAdvancedTab = $tab['advanced'] ?? false; $isDropdown = $tab['dropdown'] ?? false; @endphp @if($isDropdown) {{-- Render dropdown items as individual menu items for mobile --}}
{{ $tab['label'] }}
@foreach($tab['items'] as $item) @php $itemAdvanced = $item['advanced'] ?? false; @endphp @endforeach @else @endif @endforeach
{{ $slot }}
@else @php $statuses = [ 'suspended' => [ 'color' => 'text-yellow-500', 'message' => 'This server is suspended. Please contact support for more information.' ], 'installing' => [ 'color' => 'text-blue-500', 'message' => '' ], ]; @endphp
@if($server->status === 'installing')
Virtnet.bond

Creating Server

  • Telling the memory to try harder
  • Begging the network to behave (again)
  • Pretending the storage is organized
  • Asking the CPU to stop being dramatic
  • Informing telemetry it missed everything
  • Encouraging the firewall to chill out
  • Reminding the logs nobody reads them
  • Lecturing the cluster to stop gossiping
  • Asking the API politely to behave today
  • Calming down the swap space (it is stressed)
GLaDOS r4.32-03

GLaDOS - "Still Alive"

Congrats! You found a hidden Easter egg! Enjoy the tune and the same love Virtnet.bond has for the Portal series and all video games! We might be serious about work, but we're still gamers at heart.

Portal - "Still Alive" by Ellen McLain (voice of GLaDOS)
Virtnet.bond claims no rights to the "GLaDOS" name or the "Still Alive" audio content. This content is used under the doctrine of fair use (17 U.S. Code § 107 – Limitations on exclusive rights: Fair use). It is provided for entertainment and cultural reference purposes only. All rights to the aforementioned content are retained by their respective copyright holders.
@else

Oops!

@php $message = $statuses[$server->status]['message'] ?? "This server is currently inactive. Please view the Services tab in the Dashboard to see more information about the current state of this server. If more information is required, please contact support via the support portal under Tickets. This message can be displayed after a service is suspended, cancelled, revoked, or potentially in error. If you believe this message has been displayed in error, please contact us via a ticket and be sure to include the following information: VM{$server->vm_id}-ID{$server->id}-{$server->status}."; @endphp

{!! $message !!}

@endif
@endif