This library is intended to be used for populating device types in NetBox. It contains a set of device type definitions expressed in YAML and arranged by manufacturer. Each file represents a discrete physical device type (e.g. make and model). These definitions can be loaded into NetBox instead of creating new device type definitions manually.
If you would like to contribute to this library, please read through our contributing guide before submitting content.
Note: As of March 2023 Netbox-Device-Type-Library-Import has been brought into the NetBox Community Organization. We will work to get this fully supported soon.
If you would like to automate the import of these devicetype template files, there is a NetBox Community community based python script
that will check for duplicates, allow you to selectively import vendors, etc. available here netbox-community/Device-Type-Library-Import. Note: This is not related to NetBox in any official way and you will not get support for it here.
Each definition must include at minimum the following fields:
manufacturer
: The name of the manufacturer which produces this device type.- Type: String
model
: The model number of the device type. This must be unique per manufacturer.- Type: String
slug
: A URL-friendly representation of the model number. Like the model number, this must be unique per manufacturer. All slugs should have the manufacturers name prepended to it with a dash, please see the example below.- Type: String
- Pattern:
"^[-a-zA-Z0-9_]+$"
. Must match the following characters:-
,_
, Uppercase or Lowercasea
toz
, Numbers0
to9
.
🧪 Valid Example:
manufacturer: Dell model: PowerEdge R6515 slug: dell-poweredge-r6515
The following fields may optionally be declared:
part_number
: An alternative representation of the model number (e.g. a SKU). (Default: None)- Type: String
🧪 Example:
part_number: D109-C3
u_height
: The height of the device type in rack units. Increments of 0.5U are supported. (Default: 1)- Type: number (minimum of
0
, multiple of0.5
)
- Type: number (minimum of
🧪 Example:
u_height: 12.5
is_full_depth
: A boolean which indicates whether the device type consumes both the front and rear rack faces. (Default: true)- Type: Boolean
🧪 Example:
is_full_depth: false
airflow
: A decleration of the airflow pattern for the device. (Default: None)- Type: String
- Options:
front-to-rear
rear-to-front
left-to-right
right-to-left
side-to-rear
passive
🧪 Example:
airflow: side-to-rear
front_image
: Indicates that this device has a front elevation image within the elevation-images folder. (Default: None)- NOTE: The elevation images folder requires the same folder name as this device. The file name must also adhere to <VALUE_IN_SLUG>.front.<acceptable_format>
- Type: Boolean
🧪 Example:
front_image: True
rear_image
: Indicates that this device has a rear elevation image within the elevation-images folder. (Default: None)- NOTE: The elevation images folder requires the same folder name as this device. The file name must also adhere to <VALUE_IN_SLUG>.rear.<acceptable_format>
- Type: Boolean
🧪 Example:
rear_image: True
subdevice_role
: Indicates that this is aparent
orchild
device. (Default: None)- Type: String
- Options:
parent
child
🧪 Example:
subdevice_role: parent
comments
: A string field which allows for comments to be added to the device. (Default: None)- Type: String
🧪 Example:
comments: This is a comment that will appear on all NetBox devices of this type
weight
: A number representing the numeric weight value. Must be a multiple of 0.01 (2 decimal places). (Default: None)- Type: Number
- Value: must be a multiple of 0.01
weight_unit
: A string defining the unit of measurement. It must be one of the supported values. (Default: None)- Type: String
- Value: Enumerated Options
- kg
- g
- lb
- oz
🧪 Example:
weight: 12.21 weight_unit: lb
is_powered
: A boolean which indicates whether the device type does not take power. This is mainly used as a workaround for validation testing on non-devices (i.e. rackmount kits for mounting desktop devices) (Default: True)- Type: Boolean
🧪 Example:
is_powered: false
For further detail on these attributes and those listed below, please reference the schema definitions and the Component Definitions below.
Valid component types are listed below. Each type of component must declare a list of the individual component templates to be added.
console-ports
console-server-ports
power-ports
power-outlets
interfaces
front-ports
rear-ports
module-bays
device-bays
inventory-items
The available fields for each type of component are listed below.
name
: Namelabel
: Labeltype
: Port type slug (Array)poe
: Does this port access/provide POE? (Boolean)
name
: Namelabel
: Labeltype
: Port type slug (Array)
name
: Namelabel
: Labeltype
: Port type slug (Array)maximum_draw
: The port's maximum power draw, in watts (optional)allocated_draw
: The port's allocated power draw, in watts (optional)
name
: Namelabel
: Labeltype
: Port type slug (Array)power_port
: The name of the power port on the device which powers this outlet (optional)feed_leg
: The phase (leg) of power to which this outlet is mapped; A, B, or C (optional)
name
: Namelabel
: Labeltype
: Interface type slug (Array)mgmt_only
: A boolean which indicates whether this interface is used for management purposes only (default: false)
name
: Namelabel
: Labeltype
: Port type slug (Array)rear_port
: The name of the rear port on this device to which the front port mapsrear_port_position
: The corresponding position on the mapped rear port (default: 1)
name
: Namelabel
: Labeltype
: Port type slug (Array)positions
: The number of front ports that can map to this rear port (default: 1)poe
: Does this port access/provide POE? (Boolean)
name
: Namelabel
: Labelposition
: The module bay's position within the parent device
name
: Namelabel
: Label
name
: Namelabel
: Labelmanufacturer
: The name of the manufacturer which produces this itempart_id
: The part ID assigned by the manufacturer
There are two ways this repo focuses on keeping quality device-type definitions:
- Pre-Commit Checks - Optional, but highly recommended, for helping to identify simple issues before committing. (trailing-whitespace, end-of-file-fixer, check-yaml, yamlfmt, yamllint)
- Installation
- Virtual Environment Route
- It is recommended to create a virtual env for your repo (
python3 -m venv venv
) - Install the required pip packages (
pip install -r requirements.txt
) - Continue to the "Install
pre-commit
Hooks"
- It is recommended to create a virtual env for your repo (
pre-commit
Only Route- Install pre-commit (
pip install pre-commit
)
- Install pre-commit (
- Install
pre-commit
Hooks- To install the pre-commit script:
pre-commit install
- To install the pre-commit script:
- Virtual Environment Route
- Usage & Useful
pre-commit
Commands- After staging your files with
git
, to run the pre-commit script on changed files:pre-commit run
- To run the pre-commit script on all files:
pre-commit run --all
- To uninstall the pre-commit script:
pre-commit uninstall
- After staging your files with
- Learn more about pre-commit
- Installation
- GitHub Actions - Automatically run before a PR can be merged. Repeats yamllint & validates against NetBox Device-Type Schema.