{"id":51176188,"url":"https://github.com/tak-labo/netbox-bmc","last_synced_at":"2026-06-27T04:01:19.390Z","repository":{"id":367207834,"uuid":"1279726356","full_name":"tak-labo/netbox-bmc","owner":"tak-labo","description":"NetBox plugin for BMC (Redfish,IPMI)","archived":false,"fork":false,"pushed_at":"2026-06-25T03:07:35.000Z","size":106,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-25T03:15:35.112Z","etag":null,"topics":["bmc","ipmi","netbox","redfish"],"latest_commit_sha":null,"homepage":"","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/tak-labo.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":"NOTICE","maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-25T00:59:13.000Z","updated_at":"2026-06-25T03:07:37.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/tak-labo/netbox-bmc","commit_stats":null,"previous_names":["tak-labo/netbox-bmc"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/tak-labo/netbox-bmc","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tak-labo%2Fnetbox-bmc","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tak-labo%2Fnetbox-bmc/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tak-labo%2Fnetbox-bmc/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tak-labo%2Fnetbox-bmc/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/tak-labo","download_url":"https://codeload.github.com/tak-labo/netbox-bmc/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/tak-labo%2Fnetbox-bmc/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34840899,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-27T02:00:06.362Z","response_time":126,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bmc","ipmi","netbox","redfish"],"created_at":"2026-06-27T04:01:18.804Z","updated_at":"2026-06-27T04:01:19.383Z","avatar_url":"https://github.com/tak-labo.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# netbox-bmc\n\n[![NetBox](https://img.shields.io/badge/NetBox-4.5%20|%204.6-blue)](https://github.com/netbox-community/netbox)\n[![Python](https://img.shields.io/badge/Python-3.10%2B-blue)](https://www.python.org/)\n[![License](https://img.shields.io/badge/License-Apache%202.0-green)](LICENSE)\n\n[日本語](README_ja.md)\n\nUnified out-of-band management plugin for NetBox.  \nInventory sync and power control via Redfish \u0026 IPMI.\n\n## Supported Protocols / Vendors\n\n| Protocol | Vendors |\n|---|---|\n| Redfish | Dell iDRAC, HPE iLO, Lenovo XCC, Supermicro, AMI, Generic |\n| WS-MAN | Intel AMT (vPro) |\n| IPMI | Fallback for any IPMI-capable BMC |\n\nProtocol is auto-detected: probes `/redfish/v1` first, then WS-MAN port 16993 (Intel AMT), falls back to IPMI.\n\n## Tested Hardware\n\n| Manufacturer | Model Series | BMC | Protocol | Status |\n|---|---|---|---|---|\n| Dell | PowerEdge | iDRAC 9 | Redfish | Expected to work |\n| HPE | ProLiant | iLO 5 | Redfish | Expected to work |\n| HPE | ProLiant | iLO 6 | Redfish | Expected to work |\n| Lenovo | ThinkSystem | XCC2 / XCC3 | Redfish | Expected to work |\n| Supermicro | X12 / X13 | BMC | Redfish | Expected to work |\n| AMI | ASMB-based servers | AMI Redfish Server | Redfish | Expected to work |\n| Intel | vPro-enabled desktops/workstations | AMT 6.0+ | WS-MAN | Expected to work |\n| Generic | — | Any IPMI-capable BMC | IPMI | Expected to work (fallback) |\n\n## Features\n\n- **Module Builder**: Sync BMC hardware inventory to NetBox Modules\n  - Scan via Redfish → preview detected components with diff badges (new / updated / unchanged / removed)\n  - Select individual components before applying\n  - Auto-create ModuleBays when missing (warned in preview)\n  - Detect serial number changes after FRU replacement and apply diff updates\n  - Only manages `bmc-synced`-tagged Modules; never touches manually created Modules\n- **Collected components**: CPU, Memory, Drive, PSU, Fan, Firmware, PCI devices\n  - PSU and Fan collected via Chassis link; PCIe via PCIeDevices collection\n- **Vendor auto-detection**: Dispatches to Dell / HPE / Lenovo subclass drivers based on ServiceRoot `Vendor` / `Oem` keys\n- **Power control**: on / off / soft / cycle / reset (both protocols)\n\n## Install\n\n### Standard (non-Docker)\n\n```bash\npip install netbox-bmc\npython manage.py migrate\n```\n\nAdd to `configuration.py`:\n\n```python\nPLUGINS = [\"netbox_bmc\"]\nPLUGINS_CONFIG = {\n    \"netbox_bmc\": {\n        \"sync_interval_minutes\": 0,\n        \"default_verify_ssl\": False,\n    },\n}\n```\n\n### Docker (netbox-docker)\n\nFollow the [official plugin installation guide](https://github.com/netbox-community/netbox-docker/wiki/Using-Netbox-Plugins).\n\n**`plugin_requirements.txt`**\n```\nnetbox-bmc\n```\n\n**`Dockerfile-Plugins`**\n```dockerfile\nFROM netboxcommunity/netbox:latest\n\nCOPY ./plugin_requirements.txt /opt/netbox/\nRUN /usr/local/bin/uv pip install -r /opt/netbox/plugin_requirements.txt\n```\n\n**`docker-compose.override.yml`**\n```yaml\nservices:\n  netbox:\n    image: netbox:latest-plugins\n    pull_policy: never\n    build:\n      context: .\n      dockerfile: Dockerfile-Plugins\n  netbox-worker:\n    image: netbox:latest-plugins\n    pull_policy: never\n```\n\n**`configuration/plugins.py`**\n```python\nPLUGINS = [\"netbox_bmc\"]\nPLUGINS_CONFIG = {\n    \"netbox_bmc\": {\n        \"sync_interval_minutes\": 0,\n        \"default_verify_ssl\": False,\n    },\n}\n```\n\nBuild and start:\n```bash\ndocker compose build --no-cache\ndocker compose up -d\n```\n\n## Configure\n\nEdit `PLUGINS_CONFIG[\"netbox_bmc\"]` in `configuration.py`:\n\n| Key | Default | Description |\n|---|---|---|\n| `sync_interval_minutes` | `0` | Scheduled bulk sync interval in minutes. `0` disables. |\n| `default_verify_ssl` | `False` | Default SSL verification for new BMC Endpoints. |\n| `service_account` | — | Service account name for background jobs (netbox-secrets). |\n| `service_private_key_path` | — | Path to private key for service account (netbox-secrets). |\n\n## Use\n\n1. Open a Device in NetBox and click **BMC Endpoints** → **Add**\n2. Enter the BMC address and credentials, then save\n3. On the Endpoint detail page, click **[Build Modules]**\n4. Review the component preview (new / updated / unchanged / removed)\n5. Check the components to sync and click **[Apply Selected]**\n\nModuleBays, ModuleTypes, and Modules are created or updated automatically.\n\n### Module Naming\n\nVendor-specific names are normalized to a consistent format:\n\n| Raw name (Redfish) | Normalized |\n|---|---|\n| `CPU.Socket.1` / `Processor 0` | `CPU 0` |\n| `DIMM.A1` / `Memory 0` | `Memory 0` |\n| `Disk.Bay.0` | `Drive 0` |\n| `NIC.Slot.1` (PCIe) | `PCI 0` |\n\n### Custom Fields\n\nThe following custom fields are set automatically on each Module:\n\n| Field | Content |\n|---|---|\n| `bmc_redfish_path` | Source Redfish URI |\n| `bmc_firmware_version` | Firmware version string |\n\n## Versions\n\n| netbox-bmc | NetBox |\n|---|---|\n| 0.4.x | 4.5, 4.6 |\n\n## Vendor Notes\n\n### Dell iDRAC\n\niDRAC 9 (Redfish 1.x) is the primary target. URI traversal starts from `ServiceRoot` links — no hardcoded paths — so firmware variations should be absorbed automatically.\n\n### HPE iLO\n\niLO 5 and iLO 6 are supported via the HPE subclass driver. iLO 4 (Redfish 1.0 partial compliance) is **not tested** and may not work correctly.\n\n### Lenovo XCC\n\nXCC2 and XCC3 are supported. Some older XCC firmware versions expose non-standard collection URIs; the link-traversal approach handles most variations.\n\n### Supermicro\n\nGeneric Redfish driver is used. Supermicro BMC firmware varies significantly; behaviour may differ across firmware versions.\n\n### AMI (American Megatrends)\n\nAMI Redfish Server (detected via `Vendor: \"AMI\"` in ServiceRoot). PCIe devices are exposed under `Chassis/PCIeDevices` rather than `Systems/PCIeDevices`; the AMI subclass driver handles this automatically. Hardware inventory (CPU, Memory) populates only when the host is powered on.\n\n### Intel AMT (Active Management Technology)\n\nIntel AMT is built into vPro-enabled CPUs (6th gen+). Accessed via WS-MAN (SOAP/XML over HTTPS on port 16993) with HTTP Digest authentication.\n\nAuto-detection: if Redfish is unavailable, `detect_and_build()` probes port 16993 with a WS-MAN `Identify` request. If AMT responds, `IntelAmtDriver` is selected; otherwise falls back to IPMI.\n\nTo force AMT: set `protocol = \"wsman\"` on the `BMCEndpoint`.\n\nCollected: CPU (CIM_Processor), Memory (CIM_PhysicalMemory), AMT firmware version (WS-MAN Identity). Storage and PCIe are not available via AMT WS-MAN.\n\nAMT must be provisioned and the management port must be reachable (not firewalled). AMT 5.x and below are not tested.\n\n## Development\n\n```bash\n# Install dev dependencies\nuv sync --extra dev\n\n# Run tests\nuv run pytest\n```\n\n### Adding a New Vendor\n\n1. Add a subclass in `netbox_bmc/drivers/redfish.py` extending `RedfishDriver`\n2. Register it in `detect_and_build()` in `netbox_bmc/drivers/base.py` by matching `ServiceRoot` vendor keys\n3. Add unit tests in `tests/test_redfish_extensions.py`\n\n### Adding a New Protocol\n\nImplement `BaseDriver` (`netbox_bmc/drivers/base.py`) and return `InventoryResult` from `get_inventory()`.\n\n## Credentials\n\nnetbox-bmc resolves BMC credentials in the following order:\n\n1. **netbox-secrets** (preferred) — `Secret` with role `bmc-credentials` assigned to the Device.  \n   `Secret.name` = BMC username, `Secret.plaintext` = BMC password (RSA-encrypted).\n2. **Plaintext fallback** — `username` / `password` fields on `BMCEndpoint`, used when netbox-secrets is not installed or no matching secret is found.\n\nFor background jobs (scheduled sync), set `service_account` and `service_private_key_path` in `PLUGINS_CONFIG` so the job can decrypt secrets without an HTTP session.\n\n## Known Limitations\n\n- REST API (serializers / viewsets) not yet implemented\n- Multi-node chassis (multiple `Systems`) not supported\n- Scheduled bulk sync (`ScheduledInventorySyncJob`) not yet implemented\n- KVM / SOL console not yet ported from the predecessor plugin\n- Old BMCs with low Redfish compliance (e.g. HPE iLO 4) not validated\n\n## License\n\nApache License 2.0 — see [LICENSE](LICENSE).\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftak-labo%2Fnetbox-bmc","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Ftak-labo%2Fnetbox-bmc","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Ftak-labo%2Fnetbox-bmc/lists"}