feat(portal/it): show same_name_duplicate_ip_guests and clarify hard duplicates
Some checks failed
CD Pipeline / Deploy to Staging (push) Failing after 4s
CI Pipeline / Lint and Type Check (push) Failing after 3s
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Test Backend (push) Failing after 5s
CI Pipeline / Test Frontend (push) Failing after 4s
CI Pipeline / Security Scan (push) Failing after 32s
Deploy to Staging / Deploy to Staging (push) Failing after 8s
Portal CI / Portal Lint (push) Failing after 4s
Portal CI / Portal Type Check (push) Failing after 3s
Portal CI / Portal Test (push) Failing after 4s
Portal CI / Portal Build (push) Failing after 3s
Test Suite / frontend-tests (push) Failing after 9s
Test Suite / api-tests (push) Failing after 7s
Test Suite / blockchain-tests (push) Failing after 7s
Type Check / type-check (map[directory:. name:root]) (push) Failing after 3s
Type Check / type-check (map[directory:api name:api]) (push) Failing after 3s
Type Check / type-check (map[directory:portal name:portal]) (push) Failing after 3s
CD Pipeline / Deploy to Production (push) Has been skipped
Some checks failed
CD Pipeline / Deploy to Staging (push) Failing after 4s
CI Pipeline / Lint and Type Check (push) Failing after 3s
CI Pipeline / Build (push) Has been skipped
CI Pipeline / Test Backend (push) Failing after 5s
CI Pipeline / Test Frontend (push) Failing after 4s
CI Pipeline / Security Scan (push) Failing after 32s
Deploy to Staging / Deploy to Staging (push) Failing after 8s
Portal CI / Portal Lint (push) Failing after 4s
Portal CI / Portal Type Check (push) Failing after 3s
Portal CI / Portal Test (push) Failing after 4s
Portal CI / Portal Build (push) Failing after 3s
Test Suite / frontend-tests (push) Failing after 9s
Test Suite / api-tests (push) Failing after 7s
Test Suite / blockchain-tests (push) Failing after 7s
Type Check / type-check (map[directory:. name:root]) (push) Failing after 3s
Type Check / type-check (map[directory:api name:api]) (push) Failing after 3s
Type Check / type-check (map[directory:portal name:portal]) (push) Failing after 3s
CD Pipeline / Deploy to Production (push) Has been skipped
Made-with: Cursor
This commit is contained in:
@@ -10,6 +10,7 @@ type DriftShape = {
|
||||
collected_at?: string;
|
||||
guest_count?: number;
|
||||
duplicate_ips?: Record<string, string[]>;
|
||||
same_name_duplicate_ip_guests?: Record<string, string[]>;
|
||||
guest_lan_ips_not_in_declared_sources?: string[];
|
||||
declared_lan11_ips_not_on_live_guests?: string[];
|
||||
vmid_ip_mismatch_live_vs_all_vmids_doc?: Array<{ vmid: string; live_ip: string; all_vmids_doc_ip: string }>;
|
||||
@@ -76,6 +77,9 @@ export default function ItOpsPage() {
|
||||
};
|
||||
|
||||
const dupCount = drift?.duplicate_ips ? Object.keys(drift.duplicate_ips).length : 0;
|
||||
const sameNameDupCount = drift?.same_name_duplicate_ip_guests
|
||||
? Object.keys(drift.same_name_duplicate_ip_guests).length
|
||||
: 0;
|
||||
|
||||
return (
|
||||
<RoleGate
|
||||
@@ -140,7 +144,8 @@ export default function ItOpsPage() {
|
||||
</CardHeader>
|
||||
<CardContent className="space-y-2 text-sm text-gray-300">
|
||||
<p>Guests (live): {drift.guest_count ?? '—'}</p>
|
||||
<p>Duplicate guest IPs: {dupCount}</p>
|
||||
<p>Duplicate guest IPs (different names): {dupCount}</p>
|
||||
<p>Same-name IP clones (informational): {sameNameDupCount}</p>
|
||||
<p>
|
||||
LAN guests not in declared sources:{' '}
|
||||
{drift.guest_lan_ips_not_in_declared_sources?.length ?? 0}
|
||||
@@ -159,7 +164,7 @@ export default function ItOpsPage() {
|
||||
{dupCount > 0 && (
|
||||
<Card className="bg-gray-800 border-red-900 md:col-span-2">
|
||||
<CardHeader>
|
||||
<CardTitle className="text-red-400">Duplicate IPs (fix on cluster)</CardTitle>
|
||||
<CardTitle className="text-red-400">Duplicate IPs — different guest names</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent>
|
||||
<pre className="text-xs text-gray-300 overflow-x-auto">
|
||||
@@ -169,6 +174,23 @@ export default function ItOpsPage() {
|
||||
</Card>
|
||||
)}
|
||||
|
||||
{sameNameDupCount > 0 && (
|
||||
<Card className="bg-gray-800 border-amber-900/60 md:col-span-2">
|
||||
<CardHeader>
|
||||
<CardTitle className="text-amber-200">Same-name guests sharing an IP</CardTitle>
|
||||
</CardHeader>
|
||||
<CardContent className="space-y-2 text-sm text-gray-300">
|
||||
<p>
|
||||
Multiple VMIDs use the same IP and identical hostname (e.g. clones). Resolve in Proxmox;
|
||||
export no longer fails CI on this alone.
|
||||
</p>
|
||||
<pre className="text-xs text-gray-300 overflow-x-auto">
|
||||
{JSON.stringify(drift.same_name_duplicate_ip_guests, null, 2)}
|
||||
</pre>
|
||||
</CardContent>
|
||||
</Card>
|
||||
)}
|
||||
|
||||
{(drift.notes?.length ?? 0) > 0 && (
|
||||
<Card className="bg-gray-800 border-gray-700 md:col-span-2">
|
||||
<CardHeader>
|
||||
|
||||
Reference in New Issue
Block a user