fix: topology — all servers dual-homed 10G+1G, show mgmt band

All rack servers (and large1 on table) have both a 10G link to USW-Agg
and a 1G management link to Pro 24 PoE. Update topology:
- Move all 6 hosts into single row (including large1)
- Update sublabels to "10G+1G" for all nodes
- large1 dashed-border (off-rack) with "table · 10G+1G"
- Add dashed amber "1G mgmt (PoE)" horizontal band above hosts
  to represent the PoE switch management connections
- 10G primary fan-out lines still drop from Agg switch above
- large1 primary line rendered as dashed green (off-rack run)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-03-14 22:08:48 -04:00
parent e779b21db4
commit f2541eb45c
2 changed files with 59 additions and 38 deletions

View File

@@ -416,6 +416,37 @@ a:hover { text-decoration: underline; text-shadow: var(--glow-amber); }
border-style: dashed; border-style: dashed;
} }
/* Dashed 10G line (for off-rack/table host) */
.topo-line-dashed {
background: none;
border-left: 1px dashed var(--green);
opacity: .4;
}
/* 1G management band — horizontal amber dashed line with label */
.topo-mgmt-band {
display: flex;
align-items: center;
gap: 6px;
padding: 0 8px;
height: 16px;
}
.topo-mgmt-label {
font-size: .52em;
color: var(--amber);
opacity: .65;
white-space: nowrap;
letter-spacing: .04em;
}
.topo-mgmt-line {
flex: 1;
height: 1px;
border-top: 1px dashed var(--amber);
opacity: .4;
}
/* ── Host cards ───────────────────────────────────────────────────── */ /* ── Host cards ───────────────────────────────────────────────────── */
.host-grid { .host-grid {
display: grid; display: grid;

View File

@@ -73,58 +73,48 @@
</div> </div>
</div> </div>
<!-- ── Tier 4: Hosts ──────────────────────────── --> <!-- ── Tier 4: Hosts (all dual-homed 10G + 1G) ── -->
<div class="topo-host-tier"> <div class="topo-host-tier">
<!-- Agg-connected hosts (10G) -->
<div class="topo-host-group"> <div class="topo-host-group">
<div class="topo-connectors" style="gap:32px; justify-content:center">
<div class="topo-line"></div>
<div class="topo-line"></div>
<div class="topo-line"></div>
<div class="topo-line"></div>
<div class="topo-line"></div>
</div>
<div class="topo-row topo-hosts-row">
<!-- 10G primary lines from Agg -->
<div class="topo-connectors" style="gap:20px; justify-content:center">
<div class="topo-line"></div>
<div class="topo-line"></div>
<div class="topo-line"></div>
<div class="topo-line"></div>
<div class="topo-line"></div>
<div class="topo-line topo-line-dashed"></div>
</div>
<!-- 1G management lines from PoE (dashed amber) -->
<div class="topo-mgmt-band">
<span class="topo-mgmt-label">1G mgmt (PoE)</span>
<div class="topo-mgmt-line"></div>
</div>
<div class="topo-row topo-hosts-row">
{%- set topo_h = snapshot.hosts if snapshot.hosts else {} -%} {%- set topo_h = snapshot.hosts if snapshot.hosts else {} -%}
{%- set agg_defs = [ {%- set all_defs = [
('compute-storage-gpu-01', 'csg-01', 'RU412 · 10G'), ('compute-storage-gpu-01', 'csg-01', 'RU412 · 10G+1G', False),
('compute-storage-01', 'cs-01', 'RU1417 · 10G'), ('compute-storage-01', 'cs-01', 'RU1417 · 10G+1G', False),
('storage-01', 'storage-01','10G SFP+'), ('storage-01', 'storage-01','rack · 10G+1G', False),
('monitor-01', 'monitor-01','ZimaBoard · 10G'), ('monitor-01', 'monitor-01','ZimaBoard · 10G+1G', False),
('monitor-02', 'monitor-02','ZimaBoard · 10G'), ('monitor-02', 'monitor-02','ZimaBoard · 10G+1G', False),
('large1', 'large1', 'table · 10G+1G', True),
] -%} ] -%}
{%- for hname, hlabel, hsub in agg_defs -%} {%- for hname, hlabel, hsub, off_rack in all_defs -%}
{%- set st = topo_h[hname].status if hname in topo_h else 'unknown' -%} {%- set st = topo_h[hname].status if hname in topo_h else 'unknown' -%}
<div class="topo-node topo-host topo-status-{{ st }}" data-host="{{ hname }}"> <div class="topo-node topo-host{{ ' topo-host-table' if off_rack else '' }} topo-status-{{ st }}" data-host="{{ hname }}">
<span class="topo-icon"></span> <span class="topo-icon"></span>
<span class="topo-label">{{ hlabel }}</span> <span class="topo-label">{{ hlabel }}</span>
<span class="topo-node-sub">{{ hsub }}</span> <span class="topo-node-sub">{{ hsub }}</span>
<span class="topo-badge topo-badge-{{ st }}">{{ st if st != 'unknown' else '' }}</span> <span class="topo-badge topo-badge-{{ st }}">{{ st if st != 'unknown' else '' }}</span>
</div> </div>
{%- endfor -%} {%- endfor -%}
</div> </div>
</div> </div>
<!-- PoE-connected hosts -->
<div class="topo-host-group topo-poe-hosts">
<div class="topo-connectors single">
<div class="topo-line topo-line-labeled" data-link-label="1G PoE"></div>
</div>
<div class="topo-row">
{%- set topo_h = snapshot.hosts if snapshot.hosts else {} -%}
{%- set lst = topo_h['large1'].status if 'large1' in topo_h else 'unknown' -%}
<div class="topo-node topo-host topo-host-table topo-status-{{ lst }}" data-host="large1">
<span class="topo-icon"></span>
<span class="topo-label">large1</span>
<span class="topo-node-sub">on table · 1G</span>
<span class="topo-badge topo-badge-{{ lst }}">{{ lst if lst != 'unknown' else '' }}</span>
</div>
</div>
</div>
</div><!-- /topo-host-tier --> </div><!-- /topo-host-tier -->
</div> </div>