[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"project-105428":3},{"id":4,"name":5,"fullName":6,"owner":7,"repo":5,"description":8,"homepage":9,"htmlUrl":10,"language":11,"languages":10,"totalLinesOfCode":10,"stars":12,"forks":13,"watchers":14,"openIssues":13,"contributorsCount":13,"subscribersCount":13,"size":13,"stars1d":15,"stars7d":15,"stars30d":15,"stars90d":13,"forks30d":13,"starsTrendScore":16,"compositeScore":17,"rankGlobal":10,"rankLanguage":10,"license":18,"archived":19,"fork":19,"defaultBranch":20,"hasWiki":19,"hasPages":19,"topics":21,"createdAt":10,"pushedAt":10,"updatedAt":31,"readmeContent":32,"aiSummary":10,"trendingCount":13,"starSnapshotCount":13,"syncStatus":33,"lastSyncTime":34,"discoverSource":35},105428,"turnup-check","turnup-dev\u002Fturnup-check","turnup-dev","Diff your NetBox\u002FNautobot intent against LLDP, Redfish and DCGM. Apache-2.0.","https:\u002F\u002Fturnup.legent.xyz",null,"Python",61,0,60,1,3,38.6,"Apache License 2.0",false,"main",[22,23,24,25,26,27,28,29,30],"acceptance-testing","datacenter","dcgm","gpu","infrastructure","lldp","nautobot","netbox","redfish","2026-11-01 00:16:33","# turnup-check\n\nAcceptance check for GPU halls: reads the intended build from NetBox or Nautobot, polls the hall over\nLLDP, Redfish and DCGM, and prints the diff. One command, seconds per rack, any vendor, Apache-2.0.\n\n```\n$ turnup-check --site hall-b --intent netbox\nreading intent      288 links · 18 nodes · 2 leaves\npolling             lldp · redfish · dcgm\n✓ 286 \u002F 288 links match intent\n✓ 17 \u002F 18 nodes reachable, firmware off baseline\n✗ mismatch   node7 mlx5_3 → leaf4\u002F22\n             expected leaf4\u002F21\nfix          move cable one port up\n✗ degraded   node11 mlx5_5 → leaf4\u002F83 200G\n             expected leaf4\u002F83 up 400G\nfix          check transceivers and cable CBL-12-11-05 at leaf4\u002F83 (200G negotiated, intent 400G)\n✗ firmware   node4 bmc 1.09.2\n             expected 1.12.0\nfix          update bmc on node4 to 1.12.0\n✗ gpu        node14 gpu2 XID 79\n             expected healthy\nfix          drain node14 and open an RMA packet for GPU 2\n✗ offline    node17 redfish unreachable: timeout after 3 s\nfix          check BMC reachability and credentials for node17\nelapsed      4.1 s\n\nreport       hall-b-\u003CYYYY-MM-DD>.json\nshare stats  --telemetry opt-in (racks, links)\n```\n\nEvery finding comes with the fix a technician can act on. Exit code `0` means the hall matches intent,\n`1` means findings, `2` means the intent could not be read or no telemetry source answered. It writes one\nJSON report. Nothing else: no agent, no database, no account.\n\n## Install\n\n```bash\npip install turnup-check            # Python 3.12+\npip install \"turnup-check[snmp]\"    # adds pysnmp for switches without eAPI\u002FNVUE\n```\n\n## Five minutes on a NetBox site\n\n```bash\nexport NETBOX_URL=https:\u002F\u002Fnetbox.example NETBOX_TOKEN=...\nexport TURNUP_SWITCH_USER=admin TURNUP_SWITCH_PASS=...     # LLDP from the leaves\nexport TURNUP_BMC_USER=admin TURNUP_BMC_PASS=...           # Redfish from the nodes\nturnup-check --site \u003Cslug> --intent netbox\n```\n\n`--only lldp` is the fastest first run: cabling only, switch credentials only. A device that refuses or does\nnot answer is reported as unreachable, never fatal. Nautobot works the same way with `--intent nautobot`;\nso does a `turnup.intent\u002Fv1` YAML file. What is read from NetBox, the device roles it expects, the\nmanagement-endpoint custom fields and the firmware baseline are in [docs\u002Fintent.md](https:\u002F\u002Fgithub.com\u002Fturnup-dev\u002Fturnup-check\u002Fblob\u002Fmain\u002Fdocs\u002Fintent.md).\n\n## Try it without hardware\n\n[simhall](https:\u002F\u002Fgithub.com\u002Fturnup-dev\u002Fsimhall) is a virtual hall that serves the same NetBox, Redfish,\neAPI\u002FNVUE and DCGM protocols with fault injection. Its golden scenario `hall-b` is a hall handed over with\nevery light green and five faults of four kinds underneath; it reproduces the output above:\n\n```bash\npip install simhall\nsimhall serve --golden hall-b &                                      # 127.0.0.1:8900, any token\nturnup-check --site hall-b --intent http:\u002F\u002F127.0.0.1:8900\u002Fnetbox    # exits 1: five findings\nsimhall act '{\"kind\":\"seat_cable\",\"label\":\"CBL-12-07-03\",\"b_interface\":\"swp21\"}'      # the cable moved\nsimhall act '{\"kind\":\"seat_cable\",\"label\":\"CBL-12-11-05\"}'                             # degraded cable reseated\nsimhall act '{\"kind\":\"update_firmware\",\"device\":\"node4\",\"component\":\"bmc\",\"version\":\"1.12.0\"}'\nturnup-check --site hall-b --intent http:\u002F\u002F127.0.0.1:8900\u002Fnetbox    # exits 1: 288 \u002F 288, the GPU and node17 still open\nsimhall act '{\"kind\":\"replace_node\",\"device\":\"node14\",\"new_serial\":\"SN-R1\"}'          # the RMA swap ...\nsimhall act '{\"kind\":\"replace_node\",\"device\":\"node17\",\"new_serial\":\"SN-R2\"}'          # ... and the dead BMC's tray\nturnup-check --site hall-b --intent http:\u002F\u002F127.0.0.1:8900\u002Fnetbox    # exits 0\n```\n\nSimulated runs are marked `simulated: true` in the report and never count anywhere.\n\n## What it finds\n\n| Finding | Fix it prints |\n|---|---|\n| `wrong_port`: the NIC shows up on another switch port | `move cable one port up` (or `k ports down`, or `from leaf4\u002F30 to leaf4\u002F21`) |\n| `missing_link`: intended port empty, NIC seen nowhere | `seat cable CBL-12-07-03 at leaf4\u002F21`; `check NIC` when the BMC says the NIC port is down |\n| `link_degraded`: right neighbor, port down or below intended speed | check cable \u002F transceivers |\n| `unexpected_link`: a neighbor where intent has no cable | trace and update intent |\n| `unreachable_node`: Redfish down or HTTP error | check reachability and credentials |\n| `firmware_off_baseline`: a component differs from the baseline | `update bmc on node7 to 1.12.0` |\n| `gpu_count_mismatch`, `gpu_unhealthy`, `nvlink_degraded`, `node_health_warning` | reseat, RMA packet, check NVLink, read the BMC log |\n\nA `wrong_port` is one finding, correlated across the NIC and both switch ports, never two. The exact rules,\nincluding what is a note rather than a finding, are in [docs\u002Ffindings.md](https:\u002F\u002Fgithub.com\u002Fturnup-dev\u002Fturnup-check\u002Fblob\u002Fmain\u002Fdocs\u002Ffindings.md).\n\n## How it works\n\nSwitches are read over Arista eAPI, NVIDIA NVUE or SNMP (LLDP-MIB); nodes over DMTF Redfish and the DCGM\nexporter. All devices are polled concurrently with a per-request deadline (`--timeout`, default 3 s), so a\ndead device never stalls the run; a clean hall costs about ten Redfish requests per node.\n[docs\u002Fpolling.md](https:\u002F\u002Fgithub.com\u002Fturnup-dev\u002Fturnup-check\u002Fblob\u002Fmain\u002Fdocs\u002Fpolling.md) has the protocols, concurrency limits and the credentials file.\n\nThe report is `turnup.report\u002Fv1` JSON with the summary, every finding with its evidence, and the sources\nthat answered: [docs\u002Freport.md](https:\u002F\u002Fgithub.com\u002Fturnup-dev\u002Fturnup-check\u002Fblob\u002Fmain\u002Fdocs\u002Freport.md). Telemetry is off unless you pass `--telemetry`; the payload\nis counts only, never names: [docs\u002Ftelemetry.md](https:\u002F\u002Fgithub.com\u002Fturnup-dev\u002Fturnup-check\u002Fblob\u002Fmain\u002Fdocs\u002Ftelemetry.md).\n\n`netbox_plugin\u002F` holds `netbox-turnup-check`, a NetBox plugin that lists report files in a menu\n(`netbox_plugin\u002FREADME.md`).\n\n## Status\n\nv0.1.0. The NetBox and Nautobot adapters have run against the public demos (NetBox 4.7, Nautobot 3.2),\nnot yet against a production GPU hall. The NVUE and SNMP paths follow the public docs and canned tables and\nhave not been verified on a real switch. The full list is in\n[docs\u002Fdevelopment.md](https:\u002F\u002Fgithub.com\u002Fturnup-dev\u002Fturnup-check\u002Fblob\u002Fmain\u002Fdocs\u002Fdevelopment.md#status-and-known-gaps-v010), with how to develop, test and\nrelease.\n\nWritten from public specifications only: DMTF Redfish, IEEE 802.1AB LLDP and LLDP-MIB, NVIDIA\nDCGM-exporter metric names, NetBox and Nautobot REST API docs, Arista eAPI and NVIDIA NVUE public docs,\nthe Prometheus exposition format. Example halls are synthetic.\n\n## License\n\nApache-2.0. See `LICENSE`.\n",2,"2026-10-31 04:26:46","CREATED_QUERY"]