Skip to main content

NetBox plugin for Rack Design.

Project description

NetBox Rack Design

NetBox Rack Design

Plan rack changes as versioned designs — on top of your real NetBox data, without touching it until you're ready.

NetBox Rack Design adds a lightweight design layer to NetBox for planning device adds, moves, and removals in your racks. A Design is a named, versioned proposal that overlays your live DCIM data: planned devices stay real dcim.Device records (status=planned), and each change is captured as a structured placement instead of a spreadsheet cell. This brings the intended rack layout into NetBox — the prerequisite for projected rack elevations, conflict detection, and power projection arriving in later stages.

The plugin is fully generic and public — nothing organization-specific is hardcoded. Status names and behavior are driven entirely by PLUGINS_CONFIG, and only native NetBox mechanisms are used (change logging, tags, custom fields, permissions, REST + GraphQL APIs, global search).

Features

This is the Stage 1 release: the data model and the standard NetBox object surface for it. The interactive visual editor and the apply/conflict/power features are planned (see Roadmap).

  • Three models for capturing rack plans:
    • Design — a proposed set of rack changes for a site. Versioned (clone-and-tweak, with one approved version per plan), ordered for execution per site via an auto-assigned sequence, may declare explicit depends_on relationships, and may optionally belong to a group. Carries title, status, summary, generic external link, plus description/comments/tags/custom fields.
    • DesignGroup — an optional, hierarchical container that links related designs into a larger effort (multi-stage work or cross-site coordination). Purely organizational; never affects execution order.
    • DesignPlacement — a single proposed change within a design: add a new device from the device-type catalog, move an existing device, or remove (planned) one. Target slots are validated against NetBox's own Rack.get_available_units() collision logic. Real devices are never mutated.
  • Config-driven statuses — which device statuses count as "planned" and which mark a planned removal are read from PLUGINS_CONFIG, never hardcoded.
  • Full CRUD UI with list/detail/edit/bulk views and a navigation menu.
  • REST API at /api/plugins/rack-design/.
  • GraphQL API integration.
  • Global search integration.
  • Change logging, tags, and custom fields on the models.
  • Integration with NetBox's native permission system.

Screenshots

Screenshots coming with the Stage 2 visual editor.

Compatibility

Plugin Version Minimum NetBox Version Maximum NetBox Version Python
0.1.0 4.4.0 4.4.99 3.12+

The supported NetBox range is enforced at load time via the plugin's min_version / max_version. See COMPATIBILITY.md for the maintained matrix.

Dependencies

  • NetBox 4.4.0 – 4.4.99
  • Python 3.12 or later

No additional Python packages are required beyond NetBox's own dependencies.

Installation

Install from PyPI into the same environment as your NetBox installation:

pip install netbox-rack-design

For NetBox Docker, add netbox-rack-design to your plugin_requirements.txt. See the netbox-docker plugin instructions.

Enable the plugin in your NetBox configuration (configuration.py, or plugins.py for netbox-docker):

PLUGINS = [
    "netbox_rack_design",
]

# Optional — defaults shown. Only include keys you want to override.
PLUGINS_CONFIG = {
    "netbox_rack_design": {
        "planned_statuses": ["planned"],
        "removal_statuses": ["decommissioning"],
        "default_status": "draft",
        "enable_rack_panel": True,
    },
}

Note on removal_statuses. The default decommissioning is the only native removal-oriented device status on a vanilla install. If decommissioning is destructive in your environment (e.g. it auto-deletes devices or triggers an external dismantle workflow), do not use it for planned removals. Instead add a safe custom status via NetBox's FIELD_CHOICES (for dcim.Device.status, e.g. to_decommission) and point removal_statuses at it.

Apply migrations and restart NetBox:

python manage.py migrate
# then restart your NetBox services (e.g. systemctl restart netbox netbox-rq)

Configuration

All settings are optional and configured under the netbox_rack_design key in PLUGINS_CONFIG.

Key Default Description
planned_statuses ["planned"] Device statuses the plugin treats as "planned".
removal_statuses ["decommissioning"] Device statuses that mark a planned removal. Override with a safe custom status where decommissioning is destructive (see note above).
default_status "draft" Default lifecycle status for a new Design.
enable_rack_panel True Show the rack-page panel listing designs that touch a rack.

Roadmap

Planned for upcoming stages:

  • Interactive visual rack editor — drag-and-drop adds/moves/removes across multi-rack, front/rear, and non-racked views (GridStack-based), writing placements without mutating live devices.
  • Apply ("Make in NetBox") — an explicit step that materializes an approved design into real planned devices and applies removal statuses.
  • Conflict detection — block approval of designs that conflict with an approved baseline, including dependency conflicts between designs.
  • Power projection — config-driven capacity vs. projected consumption per design.
  • Template-driven export — generate work documents from a design via NetBox's native Export Templates.

Support

When reporting a bug, please include your NetBox version, plugin version, Python version, steps to reproduce, and expected vs. actual behavior.

Contributing

Contributions are welcome. Please see CONTRIBUTING.md for guidelines.

License

Licensed under the Apache License 2.0.


This package was created with Cookiecutter and the netbox-community/cookiecutter-netbox-plugin template.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

netbox_rack_design-0.6.0.tar.gz (131.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

netbox_rack_design-0.6.0-py3-none-any.whl (123.7 kB view details)

Uploaded Python 3

File details

Details for the file netbox_rack_design-0.6.0.tar.gz.

File metadata

  • Download URL: netbox_rack_design-0.6.0.tar.gz
  • Upload date:
  • Size: 131.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for netbox_rack_design-0.6.0.tar.gz
Algorithm Hash digest
SHA256 2f3de817aee17e1b5e3097f5ea7c52e25c84b66108d0a7ff6c4789b105aa1870
MD5 6691ea3ce0d73021b90352a818516eb2
BLAKE2b-256 bafaf6612debff51b250b3a1b2477481235ca5b60ad04265d8c77519738e8b88

See more details on using hashes here.

Provenance

The following attestation bundles were made for netbox_rack_design-0.6.0.tar.gz:

Publisher: publish-pypi.yaml on ravenrs/netbox-rack-design

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file netbox_rack_design-0.6.0-py3-none-any.whl.

File metadata

File hashes

Hashes for netbox_rack_design-0.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 18fddc798c91f973c7e5e4c6b4e5c820b374ec84888812bdb909f80207ff9605
MD5 a7a4ca5d40f35686fd4295a1b3c23ccc
BLAKE2b-256 b7d9011f38d50c1175cf1d8f94e44c26fe21142de14fa64735cef257e8416637

See more details on using hashes here.

Provenance

The following attestation bundles were made for netbox_rack_design-0.6.0-py3-none-any.whl:

Publisher: publish-pypi.yaml on ravenrs/netbox-rack-design

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page