Add VLAN table + per-connector VLAN tags (structure only -- no VLANs in NetBox yet)
Inspired by a reference diagram the user liked (VLAN legend/mapping table, per-port VLAN info) but explicitly without the literal switch CLI config dumps that diagram also had. - export_topology.py: pulls ipam.VLAN (with prefixes) plus, for every edge whose endpoint is a real Interface, that port's mode/untagged/ tagged VLANs. NetBox has zero VLANs defined right now, so this comes back empty/null throughout -- the plumbing is real, the data just isn't there yet. - generate_drawio.py: renders a VLAN table (VLAN/Name/Description/ Subnet/Site) at the top of the diagram. With no VLANs it shows an explicit dashed 'not configured yet' placeholder row instead of either fabricating VLAN numbers or silently omitting the table. Connector labels get a 'V<id>' / 'V<id>,<id>T' suffix per side whenever that port actually has VLAN config -- currently a no-op, activates automatically the moment VLANs exist in NetBox. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01NM3nivbufxEWiKKmatEtEe
This commit is contained in:
@@ -10,8 +10,8 @@ artifact, regenerated from NetBox and committed so history shows what the
|
||||
|
||||
| file | what it is |
|
||||
| --- | --- |
|
||||
| `export_topology.py` | Run inside the NetBox Django shell. Walks every field/distribution switch's cable path (through patch panels and splice modules), then pulls every real `Cable` among the devices it found so each edge carries the exact port name on both ends. Read-only. |
|
||||
| `topo_full.json` | Latest exported snapshot: devices (id, name, role, site, status) + edges (`{a, a_port, b, b_port}`, one per cable). |
|
||||
| `export_topology.py` | Run inside the NetBox Django shell. Walks every field/distribution switch's cable path (through patch panels and splice modules), then pulls every real `Cable` among the devices it found so each edge carries the exact port name on both ends, plus that port's 802.1Q mode/untagged/tagged VLANs where the port is a real interface. Also exports every `ipam.VLAN`. Read-only. |
|
||||
| `topo_full.json` | Latest exported snapshot: devices (id, name, role, site, status), edges (`{a, a_port, a_vlan, b, b_port, b_vlan}`, one per cable), and `vlans` (every VLAN in NetBox). |
|
||||
| `generate_drawio.py` | Pure-Python renderer: `topo_full.json` → `Field-Switch-Topology.drawio`. No NetBox access needed. |
|
||||
| `Field-Switch-Topology.drawio` | The diagram. Open at [app.diagrams.net](https://app.diagrams.net) (or the desktop app, or the VS Code draw.io extension) -- free, no license needed. |
|
||||
| `render_png.js` + `render_host.html` | Renders the `.drawio` through a real draw.io instance (embed.diagrams.net, driven headlessly with Puppeteer) to produce `Field-Switch-Topology.png` -- an actual render, not an approximation. Needs `npm install puppeteer` and network access. |
|
||||
@@ -29,6 +29,17 @@ switches/patch panels look the part: switches get draw.io's built-in network
|
||||
switch icon, patch panels get a small rack-unit look (header strip + port
|
||||
ticks) rather than a plain box.
|
||||
|
||||
A **VLAN table** sits at the top of the diagram (VLAN / Name / Description /
|
||||
Subnet / Site). As of this writing NetBox has no VLANs defined here, so it
|
||||
renders as an explicit "not configured yet" placeholder rather than being
|
||||
silently omitted or -- worse -- filled in with invented VLAN numbers. Add
|
||||
VLANs and interface tagged/untagged assignments in NetBox and regenerate
|
||||
(no code changes needed): the table populates for real, and every connector
|
||||
whose port has VLAN config picks up a short suffix like `9·V10 ↔ 1·V10`.
|
||||
Deliberately left out: literal switch CLI config dumps -- those belong in
|
||||
the switches' NetBox config-context/notes, not pasted into a topology
|
||||
diagram where they'd immediately go stale.
|
||||
|
||||
Connectors in the `.drawio` file are glued by shape id (draw.io's native
|
||||
`source`/`target` reference on each edge) -- drag a switch or panel in the
|
||||
app and its links follow, port-tick decorations included since they're
|
||||
|
||||
Reference in New Issue
Block a user