diff --git a/app/Livewire/Admin/HostDetail.php b/app/Livewire/Admin/HostDetail.php
index c642418..9d5ba73 100644
--- a/app/Livewire/Admin/HostDetail.php
+++ b/app/Livewire/Admin/HostDetail.php
@@ -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),
]);
}
}
diff --git a/lang/de/hosts.php b/lang/de/hosts.php
index bc621ae..e0658ed 100644
--- a/lang/de/hosts.php
+++ b/lang/de/hosts.php
@@ -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.',
diff --git a/lang/en/hosts.php b/lang/en/hosts.php
index c54d004..138bdbf 100644
--- a/lang/en/hosts.php
+++ b/lang/en/hosts.php
@@ -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.',
diff --git a/resources/views/livewire/admin/host-detail.blade.php b/resources/views/livewire/admin/host-detail.blade.php
index 6ae4320..b39d4d1 100644
--- a/resources/views/livewire/admin/host-detail.blade.php
+++ b/resources/views/livewire/admin/host-detail.blade.php
@@ -161,6 +161,24 @@
{{ __('hosts.unknown') }}
@endif
+ {{-- 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. --}}
+
{{-- Die Reserve gehört hierher und nicht auf eine Kachel: die Kacheln
diff --git a/tests/Feature/Admin/HostNamingTest.php b/tests/Feature/Admin/HostNamingTest.php
index 9dbe384..d9578a0 100644
--- a/tests/Feature/Admin/HostNamingTest.php
+++ b/tests/Feature/Admin/HostNamingTest.php
@@ -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);
+});