Hostdetailseite: die Adresse steht neben den IPs und ist ein Klick zur Proxmox-Oberflaeche

feat/neue-pakete
nexxo 2026-08-01 14:12:03 +02:00
parent c815aee0b5
commit 11ba7ee34f
5 changed files with 40 additions and 0 deletions

View File

@ -7,6 +7,7 @@ use App\Models\ProvisioningRun;
use App\Provisioning\Jobs\AdvanceRunJob;
use App\Provisioning\Jobs\CollectHostLoad;
use App\Services\Proxmox\HostLoadSeries;
use App\Support\HostName;
use App\Support\PveVersion;
use Illuminate\Support\Collection;
use Livewire\Attributes\Layout;
@ -159,6 +160,7 @@ class HostDetail extends Component
'netout' => $this->latest($load['netout']),
],
'version' => PveVersion::parse($this->host->pve_version),
'fqdn' => HostName::fqdn($this->host->name),
]);
}
}

View File

@ -91,6 +91,8 @@ return [
'build' => 'Bau',
'onboarding_done' => 'Übernahme abgeschlossen',
'node' => 'Node',
'fqdn' => 'Adresse',
'fqdn_hint' => 'Proxmox-Oberfläche — antwortet nur aus dem WireGuard-Tunnel.',
'instances' => 'Instanzen',
'hosted' => 'Gehostete Instanzen',
'no_instances' => 'Auf diesem Host laufen noch keine Instanzen.',

View File

@ -91,6 +91,8 @@ return [
'storage' => 'Storage',
'compute' => 'Compute',
'node' => 'Node',
'fqdn' => 'Address',
'fqdn_hint' => 'Proxmox web UI — answers from inside the WireGuard tunnel only.',
'instances' => 'Instances',
'hosted' => 'Hosted instances',
'no_instances' => 'No instances running on this host yet.',

View File

@ -161,6 +161,24 @@
<dd class="mt-0.5 truncate font-mono text-sm font-semibold text-ink">{{ __('hosts.unknown') }}</dd>
@endif
</div>
{{-- Die Adresse, nicht bloß der Name: ein Klick landet auf der
Proxmox-Oberfläche des Hosts. Sie antwortet nur aus dem Tunnel
SecureHostFirewall lässt 8006 ausschließlich aus dem
Management-Subnetz zu, und der Name löst nur dort auf.
col-span-full statt eines sechsten schmalen Feldes: die Tafel
hatte sechs Einträge in sechs Spalten, keine Lücke für einen
siebten. Eine siebte schmale Spalte hätte die Adresse mitten im
Domainnamen abgeschnitten genau die Zeichenkette, die hier
lesbar sein muss. Eine eigene, volle Zeile lässt sie stehen. --}}
<div class="col-span-full min-w-0">
<dt class="text-xs text-muted">{{ __('hosts.detail.fqdn') }}</dt>
<dd class="mt-0.5 truncate font-mono text-sm font-semibold">
<a href="https://{{ $fqdn }}:8006" target="_blank" rel="noopener"
class="text-accent-text underline-offset-2 hover:underline"
title="{{ __('hosts.detail.fqdn_hint') }}">{{ $fqdn }}</a>
</dd>
</div>
</dl>
{{-- Die Reserve gehört hierher und nicht auf eine Kachel: die Kacheln

View File

@ -2,6 +2,7 @@
use App\Actions\StartHostOnboarding;
use App\Livewire\Admin\HostCreate;
use App\Livewire\Admin\HostDetail;
use App\Models\Datacenter;
use App\Models\Host;
use App\Support\HostName;
@ -140,3 +141,18 @@ it('nennt den Host im DNS so, wie die Konsole ihn nennt', function () {
->and(HostTakeoverCommand::fqdnFor($host))
->toBe(HostName::fqdn($host->name));
});
it('zeigt auf der Detailseite die IP und die Domain', function () {
$host = onboard();
$host->update(['status' => 'active', 'wg_ip' => '10.66.0.100', 'public_ip' => '203.0.113.200']);
Livewire::actingAs(admin(), 'operator')
->test(HostDetail::class, ['host' => $host])
->assertSee('203.0.113.200')
->assertSee('10.66.0.100')
// Der Name allein hilft nicht, wenn niemand die Adresse dazu kennt.
// 8006 ist die Proxmox-Oberfläche; SecureHostFirewall lässt sie nur aus
// dem Tunnel zu, und der hostsdir-Eintrag löst nur dort auf.
->assertSee('fsn-01.node.clupilot.com')
->assertSee('https://fsn-01.node.clupilot.com:8006', false);
});