mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Merge branch 'develop' into 738-detect-new-releases
This commit is contained in:
10
README.md
10
README.md
@ -1,5 +1,7 @@
|
|||||||

|

|
||||||
|
|
||||||
|
**The [2020 NetBox user survey](https://docs.google.com/forms/d/1OVZuC4kQ-6kJbVf0bDB6vgkL9H96xF6phvYzby23elk/edit) is open!** Your feedback helps guide the project's long-term development.
|
||||||
|
|
||||||
NetBox is an IP address management (IPAM) and data center infrastructure
|
NetBox is an IP address management (IPAM) and data center infrastructure
|
||||||
management (DCIM) tool. Initially conceived by the network engineering team at
|
management (DCIM) tool. Initially conceived by the network engineering team at
|
||||||
[DigitalOcean](https://www.digitalocean.com/), NetBox was developed specifically
|
[DigitalOcean](https://www.digitalocean.com/), NetBox was developed specifically
|
||||||
@ -22,7 +24,7 @@ or join us in the #netbox Slack channel on [NetworkToCode](https://networktocode
|
|||||||
| **master** | [](https://travis-ci.com/netbox-community/netbox/) |
|
| **master** | [](https://travis-ci.com/netbox-community/netbox/) |
|
||||||
| **develop** | [](https://travis-ci.com/netbox-community/netbox/) |
|
| **develop** | [](https://travis-ci.com/netbox-community/netbox/) |
|
||||||
|
|
||||||
## Screenshots
|
### Screenshots
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
@ -34,13 +36,13 @@ or join us in the #netbox Slack channel on [NetworkToCode](https://networktocode
|
|||||||
|
|
||||||

|

|
||||||
|
|
||||||
# Installation
|
## Installation
|
||||||
|
|
||||||
Please see [the documentation](http://netbox.readthedocs.io/en/stable/) for
|
Please see [the documentation](http://netbox.readthedocs.io/en/stable/) for
|
||||||
instructions on installing NetBox. To upgrade NetBox, please download the [latest release](https://github.com/netbox-community/netbox/releases)
|
instructions on installing NetBox. To upgrade NetBox, please download the [latest release](https://github.com/netbox-community/netbox/releases)
|
||||||
and run `upgrade.sh`.
|
and run `upgrade.sh`.
|
||||||
|
|
||||||
# Providing Feedback
|
## Providing Feedback
|
||||||
|
|
||||||
Feature requests and bug reports must be submitted as GiHub issues. (Please be
|
Feature requests and bug reports must be submitted as GiHub issues. (Please be
|
||||||
sure to use the [appropriate template](https://github.com/netbox-community/netbox/issues/new/choose).)
|
sure to use the [appropriate template](https://github.com/netbox-community/netbox/issues/new/choose).)
|
||||||
@ -49,6 +51,6 @@ For general discussion, please consider joining our [mailing list](https://group
|
|||||||
If you are interested in contributing to the development of NetBox, please read
|
If you are interested in contributing to the development of NetBox, please read
|
||||||
our [contributing guide](CONTRIBUTING.md) prior to beginning any work.
|
our [contributing guide](CONTRIBUTING.md) prior to beginning any work.
|
||||||
|
|
||||||
# Related projects
|
## Related projects
|
||||||
|
|
||||||
Please see [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for a list of relevant community projects.
|
Please see [our wiki](https://github.com/netbox-community/netbox/wiki/Community-Contributions) for a list of relevant community projects.
|
||||||
|
@ -83,10 +83,6 @@ Pillow
|
|||||||
# https://github.com/psycopg/psycopg2
|
# https://github.com/psycopg/psycopg2
|
||||||
psycopg2-binary
|
psycopg2-binary
|
||||||
|
|
||||||
# GitHub-flavored Markdown extensions
|
|
||||||
# https://github.com/zopieux/py-gfm
|
|
||||||
py-gfm
|
|
||||||
|
|
||||||
# Extensive cryptographic library (fork of pycrypto)
|
# Extensive cryptographic library (fork of pycrypto)
|
||||||
# https://github.com/Legrandin/pycryptodome
|
# https://github.com/Legrandin/pycryptodome
|
||||||
pycryptodome
|
pycryptodome
|
||||||
@ -102,7 +98,3 @@ redis
|
|||||||
# SVG image rendering (used for rack elevations)
|
# SVG image rendering (used for rack elevations)
|
||||||
# https://github.com/mozman/svgwrite
|
# https://github.com/mozman/svgwrite
|
||||||
svgwrite
|
svgwrite
|
||||||
|
|
||||||
# Python package management tool
|
|
||||||
# https://pythonwheels.com/
|
|
||||||
wheel
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
# Contextual Configuration Data
|
# Context Data
|
||||||
|
|
||||||
Sometimes it is desirable to associate arbitrary data with a group of devices to aid in their configuration. For example, you might want to associate a set of syslog servers for all devices at a particular site. Context data enables the association of arbitrary data to devices and virtual machines grouped by region, site, role, platform, and/or tenant. Context data is arranged hierarchically, so that data with a higher weight can be entered to override more general lower-weight data. Multiple instances of data are automatically merged by NetBox to present a single dictionary for each object.
|
{!docs/models/extras/configcontext.md!}
|
||||||
|
|
||||||
Devices and Virtual Machines may also have a local config context defined. This local context will always overwrite the rendered config context objects for the Device/VM. This is useful in situations were the device requires a one-off value different from the rest of the environment.
|
|
||||||
|
@ -1,24 +1,3 @@
|
|||||||
# Tags
|
# Tagging
|
||||||
|
|
||||||
Tags are free-form text labels which can be applied to a variety of objects within NetBox. Tags are created on-demand as they are assigned to objects. Use commas to separate tags when adding multiple tags to an object (for example: `Inventoried, Monitored`). Use double quotes around a multi-word tag when adding only one tag, e.g. `"Core Switch"`.
|
{!docs/models/extras/tag.md!}
|
||||||
|
|
||||||
Each tag has a label and a URL-friendly slug. For example, the slug for a tag named "Dunder Mifflin, Inc." would be `dunder-mifflin-inc`. The slug is generated automatically and makes tags easier to work with as URL parameters.
|
|
||||||
|
|
||||||
Objects can be filtered by the tags they have applied. For example, the following API request will retrieve all devices tagged as "monitored":
|
|
||||||
|
|
||||||
```
|
|
||||||
GET /api/dcim/devices/?tag=monitored
|
|
||||||
```
|
|
||||||
|
|
||||||
Tags are included in the API representation of an object as a list of plain strings:
|
|
||||||
|
|
||||||
```
|
|
||||||
{
|
|
||||||
...
|
|
||||||
"tags": [
|
|
||||||
"Core Switch",
|
|
||||||
"Monitored"
|
|
||||||
],
|
|
||||||
...
|
|
||||||
}
|
|
||||||
```
|
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
# The NetBox Python Shell
|
||||||
|
|
||||||
NetBox includes a Python shell within which objects can be directly queried, created, modified, and deleted. To enter the shell, run the following command:
|
NetBox includes a Python shell within which objects can be directly queried, created, modified, and deleted. To enter the shell, run the following command:
|
||||||
|
|
||||||
```
|
```
|
||||||
|
@ -1,11 +1,13 @@
|
|||||||
# Replicating the Database
|
# Replicating NetBox
|
||||||
|
|
||||||
|
## Replicating the Database
|
||||||
|
|
||||||
NetBox uses [PostgreSQL](https://www.postgresql.org/) for its database, so general PostgreSQL best practices will apply to NetBox. You can dump and restore the database using the `pg_dump` and `psql` utilities, respectively.
|
NetBox uses [PostgreSQL](https://www.postgresql.org/) for its database, so general PostgreSQL best practices will apply to NetBox. You can dump and restore the database using the `pg_dump` and `psql` utilities, respectively.
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
The examples below assume that your database is named `netbox`.
|
The examples below assume that your database is named `netbox`.
|
||||||
|
|
||||||
## Export the Database
|
### Export the Database
|
||||||
|
|
||||||
Use the `pg_dump` utility to export the entire database to a file:
|
Use the `pg_dump` utility to export the entire database to a file:
|
||||||
|
|
||||||
@ -19,7 +21,7 @@ When replicating a production database for development purposes, you may find it
|
|||||||
pg_dump --exclude-table-data=extras_objectchange netbox > netbox.sql
|
pg_dump --exclude-table-data=extras_objectchange netbox > netbox.sql
|
||||||
```
|
```
|
||||||
|
|
||||||
## Load an Exported Database
|
### Load an Exported Database
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
This will destroy and replace any existing instance of the database.
|
This will destroy and replace any existing instance of the database.
|
||||||
@ -32,7 +34,7 @@ psql netbox < netbox.sql
|
|||||||
|
|
||||||
Keep in mind that PostgreSQL user accounts and permissions are not included with the dump: You will need to create those manually if you want to fully replicate the original database (see the [installation docs](../installation/1-postgresql.md)). When setting up a development instance of NetBox, it's strongly recommended to use different credentials anyway.
|
Keep in mind that PostgreSQL user accounts and permissions are not included with the dump: You will need to create those manually if you want to fully replicate the original database (see the [installation docs](../installation/1-postgresql.md)). When setting up a development instance of NetBox, it's strongly recommended to use different credentials anyway.
|
||||||
|
|
||||||
## Export the Database Schema
|
### Export the Database Schema
|
||||||
|
|
||||||
If you want to export only the database schema, and not the data itself (e.g. for development reference), do the following:
|
If you want to export only the database schema, and not the data itself (e.g. for development reference), do the following:
|
||||||
|
|
||||||
@ -47,11 +49,11 @@ python3 manage.py invalidate all
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Replicating Media
|
## Replicating Media
|
||||||
|
|
||||||
NetBox stored uploaded files (such as image attachments) in its media directory. To fully replicate an instance of NetBox, you'll need to copy both the database and the media files.
|
NetBox stored uploaded files (such as image attachments) in its media directory. To fully replicate an instance of NetBox, you'll need to copy both the database and the media files.
|
||||||
|
|
||||||
## Archive the Media Directory
|
### Archive the Media Directory
|
||||||
|
|
||||||
Execute the following command from the root of the NetBox installation path (typically `/opt/netbox`):
|
Execute the following command from the root of the NetBox installation path (typically `/opt/netbox`):
|
||||||
|
|
||||||
@ -59,7 +61,7 @@ Execute the following command from the root of the NetBox installation path (typ
|
|||||||
tar -czf netbox_media.tar.gz netbox/media/
|
tar -czf netbox_media.tar.gz netbox/media/
|
||||||
```
|
```
|
||||||
|
|
||||||
## Restore the Media Directory
|
### Restore the Media Directory
|
||||||
|
|
||||||
To extract the saved archive into a new installation, run the following from the installation root:
|
To extract the saved archive into a new installation, run the following from the installation root:
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
# REST API Authentication
|
||||||
|
|
||||||
The NetBox API employs token-based authentication. For convenience, cookie authentication can also be used when navigating the browsable API.
|
The NetBox API employs token-based authentication. For convenience, cookie authentication can also be used when navigating the browsable API.
|
||||||
|
|
||||||
# Tokens
|
## Tokens
|
||||||
|
|
||||||
A token is a unique identifier that identifies a user to the API. Each user in NetBox may have one or more tokens which he or she can use to authenticate to the API. To create a token, navigate to the API tokens page at `/user/api-tokens/`.
|
A token is a unique identifier that identifies a user to the API. Each user in NetBox may have one or more tokens which he or she can use to authenticate to the API. To create a token, navigate to the API tokens page at `/user/api-tokens/`.
|
||||||
|
|
||||||
@ -13,7 +15,7 @@ By default, a token can be used for all operations available via the API. Desele
|
|||||||
|
|
||||||
Additionally, a token can be set to expire at a specific time. This can be useful if an external client needs to be granted temporary access to NetBox.
|
Additionally, a token can be set to expire at a specific time. This can be useful if an external client needs to be granted temporary access to NetBox.
|
||||||
|
|
||||||
# Authenticating to the API
|
## Authenticating to the API
|
||||||
|
|
||||||
By default, read operations will be available without authentication. In this case, a token may be included in the request, but is not necessary.
|
By default, read operations will be available without authentication. In this case, a token may be included in the request, but is not necessary.
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@ To authenticate a request, attach your token in an `Authorization` header:
|
|||||||
curl -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0"
|
curl -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0"
|
||||||
```
|
```
|
||||||
|
|
||||||
### Retrieving a list of sites
|
## Retrieving a list of sites
|
||||||
|
|
||||||
Send a `GET` request to the object list endpoint. The response contains a paginated list of JSON objects.
|
Send a `GET` request to the object list endpoint. The response contains a paginated list of JSON objects.
|
||||||
|
|
||||||
@ -51,7 +51,7 @@ $ curl -H "Accept: application/json; indent=4" http://localhost/api/dcim/sites/
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Retrieving a single site by ID
|
## Retrieving a single site by ID
|
||||||
|
|
||||||
Send a `GET` request to the object detail endpoint. The response contains a single JSON object.
|
Send a `GET` request to the object detail endpoint. The response contains a single JSON object.
|
||||||
|
|
||||||
@ -80,7 +80,7 @@ $ curl -H "Accept: application/json; indent=4" http://localhost/api/dcim/sites/6
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
### Creating a new site
|
## Creating a new site
|
||||||
|
|
||||||
Send a `POST` request to the site list endpoint with token authentication and JSON-formatted data. Only mandatory fields are required. This example includes one non required field, "region."
|
Send a `POST` request to the site list endpoint with token authentication and JSON-formatted data. Only mandatory fields are required. This example includes one non required field, "region."
|
||||||
|
|
||||||
@ -104,7 +104,7 @@ $ curl -X POST -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0
|
|||||||
```
|
```
|
||||||
Note that in this example we are creating a site bound to a region with the ID of 5. For write API actions (`POST`, `PUT`, and `PATCH`) the integer ID value is used for `ForeignKey` (related model) relationships, instead of the nested representation that is used in the `GET` (list) action.
|
Note that in this example we are creating a site bound to a region with the ID of 5. For write API actions (`POST`, `PUT`, and `PATCH`) the integer ID value is used for `ForeignKey` (related model) relationships, instead of the nested representation that is used in the `GET` (list) action.
|
||||||
|
|
||||||
### Modify an existing site
|
## Modify an existing site
|
||||||
|
|
||||||
Make an authenticated `PUT` request to the site detail endpoint. As with a create (`POST`) request, all mandatory fields must be included.
|
Make an authenticated `PUT` request to the site detail endpoint. As with a create (`POST`) request, all mandatory fields must be included.
|
||||||
|
|
||||||
@ -112,14 +112,14 @@ Make an authenticated `PUT` request to the site detail endpoint. As with a creat
|
|||||||
$ curl -X PUT -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/dcim/sites/16/ --data '{"name": "Renamed Site", "slug": "renamed-site"}'
|
$ curl -X PUT -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/dcim/sites/16/ --data '{"name": "Renamed Site", "slug": "renamed-site"}'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Modify an object by changing a field
|
## Modify an object by changing a field
|
||||||
|
|
||||||
Make an authenticated `PATCH` request to the device endpoint. With `PATCH`, unlike `POST` and `PUT`, we only specify the field that is being changed. In this example, we add a serial number to a device.
|
Make an authenticated `PATCH` request to the device endpoint. With `PATCH`, unlike `POST` and `PUT`, we only specify the field that is being changed. In this example, we add a serial number to a device.
|
||||||
```
|
```
|
||||||
$ curl -X PATCH -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/dcim/devices/2549/ --data '{"serial": "FTX1123A090"}'
|
$ curl -X PATCH -H "Authorization: Token d2f763479f703d80de0ec15254237bc651f9cdc0" -H "Content-Type: application/json" -H "Accept: application/json; indent=4" http://localhost:8000/api/dcim/devices/2549/ --data '{"serial": "FTX1123A090"}'
|
||||||
```
|
```
|
||||||
|
|
||||||
### Delete an existing site
|
## Delete an existing site
|
||||||
|
|
||||||
Send an authenticated `DELETE` request to the site detail endpoint.
|
Send an authenticated `DELETE` request to the site detail endpoint.
|
||||||
|
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
# What is a REST API?
|
# The NetBox REST API
|
||||||
|
|
||||||
|
## What is a REST API?
|
||||||
|
|
||||||
REST stands for [representational state transfer](https://en.wikipedia.org/wiki/Representational_state_transfer). It's a particular type of API which employs HTTP to create, retrieve, update, and delete objects from a database. (This set of operations is commonly referred to as CRUD.) Each type of operation is associated with a particular HTTP verb:
|
REST stands for [representational state transfer](https://en.wikipedia.org/wiki/Representational_state_transfer). It's a particular type of API which employs HTTP to create, retrieve, update, and delete objects from a database. (This set of operations is commonly referred to as CRUD.) Each type of operation is associated with a particular HTTP verb:
|
||||||
|
|
||||||
@ -32,11 +34,11 @@ $ curl -s http://localhost:8000/api/ipam/ip-addresses/2954/ | jq '.'
|
|||||||
|
|
||||||
Each attribute of the NetBox object is expressed as a field in the dictionary. Fields may include their own nested objects, as in the case of the `status` field above. Every object includes a primary key named `id` which uniquely identifies it in the database.
|
Each attribute of the NetBox object is expressed as a field in the dictionary. Fields may include their own nested objects, as in the case of the `status` field above. Every object includes a primary key named `id` which uniquely identifies it in the database.
|
||||||
|
|
||||||
# Interactive Documentation
|
## Interactive Documentation
|
||||||
|
|
||||||
Comprehensive, interactive documentation of all API endpoints is available on a running NetBox instance at `/api/docs/`. This interface provides a convenient sandbox for researching and experimenting with NetBox's various API endpoints and different request types.
|
Comprehensive, interactive documentation of all API endpoints is available on a running NetBox instance at `/api/docs/`. This interface provides a convenient sandbox for researching and experimenting with NetBox's various API endpoints and different request types.
|
||||||
|
|
||||||
# URL Hierarchy
|
## URL Hierarchy
|
||||||
|
|
||||||
NetBox's entire API is housed under the API root at `https://<hostname>/api/`. The URL structure is divided at the root level by application: circuits, DCIM, extras, IPAM, secrets, and tenancy. Within each application, each model has its own path. For example, the provider and circuit objects are located under the "circuits" application:
|
NetBox's entire API is housed under the API root at `https://<hostname>/api/`. The URL structure is divided at the root level by application: circuits, DCIM, extras, IPAM, secrets, and tenancy. Within each application, each model has its own path. For example, the provider and circuit objects are located under the "circuits" application:
|
||||||
|
|
||||||
@ -64,7 +66,7 @@ GET /api/dcim/interfaces/?device_id=123
|
|||||||
|
|
||||||
See [filtering](filtering.md) for more details.
|
See [filtering](filtering.md) for more details.
|
||||||
|
|
||||||
# Serialization
|
## Serialization
|
||||||
|
|
||||||
The NetBox API employs three types of serializers to represent model data:
|
The NetBox API employs three types of serializers to represent model data:
|
||||||
|
|
||||||
@ -108,7 +110,7 @@ The base serializer is used to represent the default view of a model. This inclu
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## Related Objects
|
### Related Objects
|
||||||
|
|
||||||
Related objects (e.g. `ForeignKey` fields) are represented using a nested serializer. A nested serializer provides a minimal representation of an object, including only its URL and enough information to display the object to a user. When performing write API actions (`POST`, `PUT`, and `PATCH`), related objects may be specified by either numeric ID (primary key), or by a set of attributes sufficiently unique to return the desired object.
|
Related objects (e.g. `ForeignKey` fields) are represented using a nested serializer. A nested serializer provides a minimal representation of an object, including only its URL and enough information to display the object to a user. When performing write API actions (`POST`, `PUT`, and `PATCH`), related objects may be specified by either numeric ID (primary key), or by a set of attributes sufficiently unique to return the desired object.
|
||||||
|
|
||||||
@ -139,7 +141,7 @@ Or by a set of nested attributes used to identify the rack:
|
|||||||
|
|
||||||
Note that if the provided parameters do not return exactly one object, a validation error is raised.
|
Note that if the provided parameters do not return exactly one object, a validation error is raised.
|
||||||
|
|
||||||
## Brief Format
|
### Brief Format
|
||||||
|
|
||||||
Most API endpoints support an optional "brief" format, which returns only a minimal representation of each object in the response. This is useful when you need only a list of the objects themselves without any related data, such as when populating a drop-down list in a form.
|
Most API endpoints support an optional "brief" format, which returns only a minimal representation of each object in the response. This is useful when you need only a list of the objects themselves without any related data, such as when populating a drop-down list in a form.
|
||||||
|
|
||||||
@ -185,7 +187,7 @@ GET /api/ipam/prefixes/13980/?brief=1
|
|||||||
|
|
||||||
The brief format is supported for both lists and individual objects.
|
The brief format is supported for both lists and individual objects.
|
||||||
|
|
||||||
## Static Choice Fields
|
### Static Choice Fields
|
||||||
|
|
||||||
Some model fields, such as the `status` field in the above example, utilize static integers corresponding to static choices. The available choices can be retrieved from the read-only `_choices` endpoint within each app. A specific `model:field` tuple may optionally be specified in the URL.
|
Some model fields, such as the `status` field in the above example, utilize static integers corresponding to static choices. The available choices can be retrieved from the read-only `_choices` endpoint within each app. A specific `model:field` tuple may optionally be specified in the URL.
|
||||||
|
|
||||||
@ -216,7 +218,7 @@ Thus, to set a prefix's status to "Reserved," it would be assigned the integer `
|
|||||||
|
|
||||||
A request for `GET /api/ipam/_choices/` will return choices for _all_ fields belonging to models within the IPAM app.
|
A request for `GET /api/ipam/_choices/` will return choices for _all_ fields belonging to models within the IPAM app.
|
||||||
|
|
||||||
# Pagination
|
## Pagination
|
||||||
|
|
||||||
API responses which contain a list of objects (for example, a request to `/api/dcim/devices/`) will be paginated to avoid unnecessary overhead. The root JSON object will contain the following attributes:
|
API responses which contain a list of objects (for example, a request to `/api/dcim/devices/`) will be paginated to avoid unnecessary overhead. The root JSON object will contain the following attributes:
|
||||||
|
|
||||||
@ -270,7 +272,7 @@ The maximum number of objects that can be returned is limited by the [`MAX_PAGE_
|
|||||||
!!! warning
|
!!! warning
|
||||||
Disabling the page size limit introduces a potential for very resource-intensive requests, since one API request can effectively retrieve an entire table from the database.
|
Disabling the page size limit introduces a potential for very resource-intensive requests, since one API request can effectively retrieve an entire table from the database.
|
||||||
|
|
||||||
# Filtering
|
## Filtering
|
||||||
|
|
||||||
A list of objects retrieved via the API can be filtered by passing one or more query parameters. The same parameters used by the web UI work for the API as well. For example, to return only prefixes with a status of "Active" (`1`):
|
A list of objects retrieved via the API can be filtered by passing one or more query parameters. The same parameters used by the web UI work for the API as well. For example, to return only prefixes with a status of "Active" (`1`):
|
||||||
|
|
||||||
@ -303,7 +305,7 @@ The choices available for fixed choice fields such as `status` are exposed in th
|
|||||||
|
|
||||||
For most fields, when a filter is passed multiple times, objects matching _any_ of the provided values will be returned. For example, `GET /api/dcim/sites/?name=Foo&name=Bar` will return all sites named "Foo" _or_ "Bar". The exception to this rule is ManyToManyFields which may have multiple values assigned. Tags are the most common example of a ManyToManyField. For example, `GET /api/dcim/sites/?tag=foo&tag=bar` will return only sites tagged with both "foo" _and_ "bar".
|
For most fields, when a filter is passed multiple times, objects matching _any_ of the provided values will be returned. For example, `GET /api/dcim/sites/?name=Foo&name=Bar` will return all sites named "Foo" _or_ "Bar". The exception to this rule is ManyToManyFields which may have multiple values assigned. Tags are the most common example of a ManyToManyField. For example, `GET /api/dcim/sites/?tag=foo&tag=bar` will return only sites tagged with both "foo" _and_ "bar".
|
||||||
|
|
||||||
## Custom Fields
|
### Custom Fields
|
||||||
|
|
||||||
To filter on a custom field, prepend `cf_` to the field name. For example, the following query will return only sites where a custom field named `foo` is equal to 123:
|
To filter on a custom field, prepend `cf_` to the field name. For example, the following query will return only sites where a custom field named `foo` is equal to 123:
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
|
# Working with Secrets
|
||||||
|
|
||||||
As with most other objects, the NetBox API can be used to create, modify, and delete secrets. However, additional steps are needed to encrypt or decrypt secret data.
|
As with most other objects, the NetBox API can be used to create, modify, and delete secrets. However, additional steps are needed to encrypt or decrypt secret data.
|
||||||
|
|
||||||
# Generating a Session Key
|
## Generating a Session Key
|
||||||
|
|
||||||
In order to encrypt or decrypt secret data, a session key must be attached to the API request. To generate a session key, send an authenticated request to the `/api/secrets/get-session-key/` endpoint with the private RSA key which matches your [UserKey](../../core-functionality/secrets/#user-keys). The private key must be POSTed with the name `private_key`.
|
In order to encrypt or decrypt secret data, a session key must be attached to the API request. To generate a session key, send an authenticated request to the `/api/secrets/get-session-key/` endpoint with the private RSA key which matches your [UserKey](../../core-functionality/secrets/#user-keys). The private key must be POSTed with the name `private_key`.
|
||||||
|
|
||||||
@ -19,7 +21,7 @@ $ curl -X POST http://localhost:8000/api/secrets/get-session-key/ \
|
|||||||
|
|
||||||
The request uses your private key to unlock your stored copy of the master key and generate a session key which can be attached in the `X-Session-Key` header of future API requests.
|
The request uses your private key to unlock your stored copy of the master key and generate a session key which can be attached in the `X-Session-Key` header of future API requests.
|
||||||
|
|
||||||
# Retrieving Secrets
|
## Retrieving Secrets
|
||||||
|
|
||||||
A session key is not needed to retrieve unencrypted secrets: The secret is returned like any normal object with its `plaintext` field set to null.
|
A session key is not needed to retrieve unencrypted secrets: The secret is returned like any normal object with its `plaintext` field set to null.
|
||||||
|
|
||||||
@ -112,7 +114,7 @@ $ curl http://localhost:8000/api/secrets/secrets/?limit=3 \
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
# Creating Secrets
|
## Creating Secrets
|
||||||
|
|
||||||
Session keys are also used to decrypt new or modified secrets. This is done by setting the `plaintext` field of the submitted object:
|
Session keys are also used to decrypt new or modified secrets. This is done by setting the `plaintext` field of the submitted object:
|
||||||
|
|
||||||
|
@ -4,6 +4,8 @@ NetBox's local configuration is stored in `netbox/netbox/configuration.py`. An e
|
|||||||
|
|
||||||
While NetBox has many configuration settings, only a few of them must be defined at the time of installation.
|
While NetBox has many configuration settings, only a few of them must be defined at the time of installation.
|
||||||
|
|
||||||
|
## Configuration Parameters
|
||||||
|
|
||||||
* [Required settings](required-settings.md)
|
* [Required settings](required-settings.md)
|
||||||
* [Optional settings](optional-settings.md)
|
* [Optional settings](optional-settings.md)
|
||||||
|
|
||||||
|
@ -98,6 +98,14 @@ This parameter serves as a safeguard to prevent some potentially dangerous behav
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
## DOCS_ROOT
|
||||||
|
|
||||||
|
Default: `$INSTALL_DIR/docs/`
|
||||||
|
|
||||||
|
The file path to NetBox's documentation. This is used when presenting context-sensitive documentation in the web UI. by default, this will be the `docs/` directory within the root NetBox installation path. (Set this to `None` to disable the embedded documentation.)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## EMAIL
|
## EMAIL
|
||||||
|
|
||||||
In order to send email, NetBox needs an email server configured. The following items can be defined within the `EMAIL` setting:
|
In order to send email, NetBox needs an email server configured. The following items can be defined within the `EMAIL` setting:
|
||||||
|
@ -1,34 +1,9 @@
|
|||||||
# Providers
|
# Circuits
|
||||||
|
|
||||||
A provider is any entity which provides some form of connectivity. While this obviously includes carriers which offer Internet and private transit service, it might also include Internet exchange (IX) points and even organizations with whom you peer directly.
|
{!docs/models/circuits/provider.md!}
|
||||||
|
|
||||||
Each provider may be assigned an autonomous system number (ASN), an account number, and relevant contact information.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Circuits
|
{!docs/models/circuits/circuit.md!}
|
||||||
|
{!docs/models/circuits/circuittype.md!}
|
||||||
A circuit represents a single _physical_ link connecting exactly two endpoints. (A circuit with more than two endpoints is a virtual circuit, which is not currently supported by NetBox.) Each circuit belongs to a provider and must be assigned a circuit ID which is unique to that provider.
|
{!docs/models/circuits/circuittermination.md!}
|
||||||
|
|
||||||
## Circuit Types
|
|
||||||
|
|
||||||
Circuits are classified by type. For example, you might define circuit types for:
|
|
||||||
|
|
||||||
* Internet transit
|
|
||||||
* Out-of-band connectivity
|
|
||||||
* Peering
|
|
||||||
* Private backhaul
|
|
||||||
|
|
||||||
Circuit types are fully customizable.
|
|
||||||
|
|
||||||
## Circuit Terminations
|
|
||||||
|
|
||||||
A circuit may have one or two terminations, annotated as the "A" and "Z" sides of the circuit. A single-termination circuit can be used when you don't know (or care) about the far end of a circuit (for example, an Internet access circuit which connects to a transit provider). A dual-termination circuit is useful for tracking circuits which connect two sites.
|
|
||||||
|
|
||||||
Each circuit termination is tied to a site, and may optionally be connected via a cable to a specific device interface or pass-through port. Each termination can be assigned a separate downstream and upstream speed independent from one another. Fields are also available to track cross-connect and patch panel details.
|
|
||||||
|
|
||||||
!!! note
|
|
||||||
A circuit represents a physical link, and cannot have more than two endpoints. When modeling a multi-point topology, each leg of the topology must be defined as a discrete circuit.
|
|
||||||
|
|
||||||
!!! note
|
|
||||||
A circuit may terminate only to a physical interface. Circuits may not terminate to LAG interfaces, which are virtual interfaces: You must define each physical circuit within a service bundle separately and terminate it to its actual physical interface.
|
|
||||||
|
40
docs/core-functionality/device-types.md
Normal file
40
docs/core-functionality/device-types.md
Normal file
@ -0,0 +1,40 @@
|
|||||||
|
# Device Types
|
||||||
|
|
||||||
|
{!docs/models/dcim/devicetype.md!}
|
||||||
|
{!docs/models/dcim/manufacturer.md!}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Device Component Templates
|
||||||
|
|
||||||
|
Each device type is assigned a number of component templates which define the physical components within a device. These are:
|
||||||
|
|
||||||
|
* Console ports
|
||||||
|
* Console server ports
|
||||||
|
* Power ports
|
||||||
|
* Power outlets
|
||||||
|
* Network interfaces
|
||||||
|
* Front ports
|
||||||
|
* Rear ports
|
||||||
|
* Device bays (which house child devices)
|
||||||
|
|
||||||
|
Whenever a new device is created, its components are automatically created per the templates assigned to its device type. For example, a Juniper EX4300-48T device type might have the following component templates defined:
|
||||||
|
|
||||||
|
* One template for a console port ("Console")
|
||||||
|
* Two templates for power ports ("PSU0" and "PSU1")
|
||||||
|
* 48 templates for 1GE interfaces ("ge-0/0/0" through "ge-0/0/47")
|
||||||
|
* Four templates for 10GE interfaces ("xe-0/2/0" through "xe-0/2/3")
|
||||||
|
|
||||||
|
Once component templates have been created, every new device that you create as an instance of this type will automatically be assigned each of the components listed above.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
Assignment of components from templates occurs only at the time of device creation. If you modify the templates of a device type, it will not affect devices which have already been created. However, you always have the option of adding, modifying, or deleting components on existing devices.
|
||||||
|
|
||||||
|
{!docs/models/dcim/consoleporttemplate.md!}
|
||||||
|
{!docs/models/dcim/consoleserverporttemplate.md!}
|
||||||
|
{!docs/models/dcim/powerporttemplate.md!}
|
||||||
|
{!docs/models/dcim/poweroutlettemplate.md!}
|
||||||
|
{!docs/models/dcim/interfacetemplate.md!}
|
||||||
|
{!docs/models/dcim/frontporttemplate.md!}
|
||||||
|
{!docs/models/dcim/rearporttemplate.md!}
|
||||||
|
{!docs/models/dcim/devicebaytemplate.md!}
|
@ -1,152 +1,27 @@
|
|||||||
# Device Types
|
# Devices and Cabling
|
||||||
|
|
||||||
A device type represents a particular make and model of hardware that exists in the real world. Device types define the physical attributes of a device (rack height and depth) and its individual components (console, power, and network interfaces).
|
{!docs/models/dcim/device.md!}
|
||||||
|
{!docs/models/dcim/devicerole.md!}
|
||||||
Device types are instantiated as devices installed within racks. For example, you might define a device type to represent a Juniper EX4300-48T network switch with 48 Ethernet interfaces. You can then create multiple devices of this type named "switch1," "switch2," and so on. Each device will inherit the components (such as interfaces) of its device type at the time of creation. (However, changes made to a device type will **not** apply to instances of that device type retroactively.)
|
{!docs/models/dcim/platform.md!}
|
||||||
|
|
||||||
Some devices house child devices which share physical resources, like space and power, but which functional independently from one another. A common example of this is blade server chassis. Each device type is designated as one of the following:
|
|
||||||
|
|
||||||
* A parent device (which has device bays)
|
|
||||||
* A child device (which must be installed in a device bay)
|
|
||||||
* Neither
|
|
||||||
|
|
||||||
!!! note
|
|
||||||
This parent/child relationship is **not** suitable for modeling chassis-based devices, wherein child members share a common control plane.
|
|
||||||
|
|
||||||
For that application you should create a single Device for the chassis, and add Interfaces directly to it. Interfaces can be created in bulk using range patterns, e.g. "Gi1/[1-24]".
|
|
||||||
|
|
||||||
Add Inventory Items if you want to record the line cards themselves as separate entities. There is no explicit relationship between each interface and its line card, but it may be implied by the naming (e.g. interfaces "Gi1/x" are on line card 1)
|
|
||||||
|
|
||||||
## Manufacturers
|
|
||||||
|
|
||||||
Each device type must be assigned to a manufacturer. The model number of a device type must be unique to its manufacturer.
|
|
||||||
|
|
||||||
## Component Templates
|
|
||||||
|
|
||||||
Each device type is assigned a number of component templates which define the physical components within a device. These are:
|
|
||||||
|
|
||||||
* Console ports
|
|
||||||
* Console server ports
|
|
||||||
* Power ports
|
|
||||||
* Power outlets
|
|
||||||
* Network interfaces
|
|
||||||
* Front ports
|
|
||||||
* Rear ports
|
|
||||||
* Device bays (which house child devices)
|
|
||||||
|
|
||||||
Whenever a new device is created, its components are automatically created per the templates assigned to its device type. For example, a Juniper EX4300-48T device type might have the following component templates defined:
|
|
||||||
|
|
||||||
* One template for a console port ("Console")
|
|
||||||
* Two templates for power ports ("PSU0" and "PSU1")
|
|
||||||
* 48 templates for 1GE interfaces ("ge-0/0/0" through "ge-0/0/47")
|
|
||||||
* Four templates for 10GE interfaces ("xe-0/2/0" through "xe-0/2/3")
|
|
||||||
|
|
||||||
Once component templates have been created, every new device that you create as an instance of this type will automatically be assigned each of the components listed above.
|
|
||||||
|
|
||||||
!!! note
|
|
||||||
Assignment of components from templates occurs only at the time of device creation. If you modify the templates of a device type, it will not affect devices which have already been created. However, you always have the option of adding, modifying, or deleting components on existing devices.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Devices
|
|
||||||
|
|
||||||
Every piece of hardware which is installed within a rack exists in NetBox as a device. Devices are measured in rack units (U) and can be half depth or full depth. A device may have a height of 0U: These devices do not consume vertical rack space and cannot be assigned to a particular rack unit. A common example of a 0U device is a vertically-mounted PDU.
|
|
||||||
|
|
||||||
When assigning a multi-U device to a rack, it is considered to be mounted in the lowest-numbered rack unit which it occupies. For example, a 3U device which occupies U8 through U10 is said to be mounted in U8. This logic applies to racks with both ascending and descending unit numbering.
|
|
||||||
|
|
||||||
A device is said to be full depth if its installation on one rack face prevents the installation of any other device on the opposite face within the same rack unit(s). This could be either because the device is physically too deep to allow a device behind it, or because the installation of an opposing device would impede airflow.
|
|
||||||
|
|
||||||
## Device Components
|
## Device Components
|
||||||
|
|
||||||
There are eight types of device components which comprise all of the interconnection logic with NetBox:
|
{!docs/models/dcim/consoleport.md!}
|
||||||
|
{!docs/models/dcim/consoleserverport.md!}
|
||||||
* Console ports
|
{!docs/models/dcim/powerport.md!}
|
||||||
* Console server ports
|
{!docs/models/dcim/poweroutlet.md!}
|
||||||
* Power ports
|
{!docs/models/dcim/interface.md!}
|
||||||
* Power outlets
|
{!docs/models/dcim/frontport.md!}
|
||||||
* Network interfaces
|
{!docs/models/dcim/rearport.md!}
|
||||||
* Front ports
|
{!docs/models/dcim/devicebay.md!}
|
||||||
* Rear ports
|
{!docs/models/dcim/inventoryitem.md!}
|
||||||
* Device bays
|
|
||||||
|
|
||||||
### Console
|
|
||||||
|
|
||||||
Console ports connect only to console server ports. Console connections can be marked as either *planned* or *connected*.
|
|
||||||
|
|
||||||
### Power
|
|
||||||
|
|
||||||
Power ports connect only to power outlets. Power connections can be marked as either *planned* or *connected*.
|
|
||||||
|
|
||||||
### Interfaces
|
|
||||||
|
|
||||||
Interfaces connect to one another in a symmetric manner: If interface A connects to interface B, interface B therefore connects to interface A. Each type of connection can be classified as either *planned* or *connected*.
|
|
||||||
|
|
||||||
Each interface is a assigned a type denoting its physical properties. Two special types exist: the "virtual" type can be used to designate logical interfaces (such as SVIs), and the "LAG" type can be used to desinate link aggregation groups to which physical interfaces can be assigned.
|
|
||||||
|
|
||||||
Each interface can also be enabled or disabled, and optionally designated as management-only (for out-of-band management). Fields are also provided to store an interface's MTU and MAC address.
|
|
||||||
|
|
||||||
VLANs can be assigned to each interface as either tagged or untagged. (An interface may have only one untagged VLAN.)
|
|
||||||
|
|
||||||
### Pass-through Ports
|
|
||||||
|
|
||||||
Pass-through ports are used to model physical terminations which comprise part of a longer path, such as a cable terminated to a patch panel. Each front port maps to a position on a rear port. A 24-port UTP patch panel, for instance, would have 24 front ports and 24 rear ports. Although this relationship is typically one-to-one, a rear port may have multiple front ports mapped to it. This can be useful for modeling instances where multiple paths share a common cable (for example, six different fiber connections sharing a 12-strand MPO cable).
|
|
||||||
|
|
||||||
Pass-through ports can also be used to model "bump in the wire" devices, such as a media convertor or passive tap.
|
|
||||||
|
|
||||||
### Device Bays
|
|
||||||
|
|
||||||
Device bays represent the ability of a device to house child devices. For example, you might install four blade servers into a 2U chassis. The chassis would appear in the rack elevation as a 2U device with four device bays. Each server within it would be defined as a 0U device installed in one of the device bays. Child devices do not appear within rack elevations or the "Non-Racked Devices" list within the rack view.
|
|
||||||
|
|
||||||
Child devices are first-class Devices in their own right: that is, fully independent managed entities which don't share any control plane with the parent. Just like normal devices, child devices have their own platform (OS), role, tags, and interfaces. You cannot create a LAG between interfaces in different child devices.
|
|
||||||
|
|
||||||
Therefore, Device bays are **not** suitable for modeling chassis-based switches and routers. These should instead be modeled as a single Device, with the line cards as Inventory Items.
|
|
||||||
|
|
||||||
## Device Roles
|
|
||||||
|
|
||||||
Devices can be organized by functional roles. These roles are fully customizable. For example, you might create roles for core switches, distribution switches, and access switches.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Platforms
|
{!docs/models/dcim/virtualchassis.md!}
|
||||||
|
|
||||||
A platform defines the type of software running on a device or virtual machine. This can be helpful when it is necessary to distinguish between, for instance, different feature sets. Note that two devices of the same type may be assigned different platforms: for example, one Juniper MX240 running Junos 14 and another running Junos 15.
|
|
||||||
|
|
||||||
The platform model is also used to indicate which [NAPALM](https://napalm-automation.net/) driver NetBox should use when connecting to a remote device. The name of the driver along with optional parameters are stored with the platform.
|
|
||||||
|
|
||||||
The assignment of platforms to devices is an optional feature, and may be disregarded if not desired.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Inventory Items
|
{!docs/models/dcim/cable.md!}
|
||||||
|
|
||||||
Inventory items represent hardware components installed within a device, such as a power supply or CPU or line card. Currently, these are used merely for inventory tracking, although future development might see their functionality expand. Like device types, each item can optionally be assigned a manufacturer.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Virtual Chassis
|
|
||||||
|
|
||||||
A virtual chassis represents a set of devices which share a single control plane: a stack of switches which are managed as a single device, for example. Each device in the virtual chassis is assigned a position and (optionally) a priority. Exactly one device is designated the virtual chassis master: This device will typically be assigned a name, secrets, services, and other attributes related to its management.
|
|
||||||
|
|
||||||
It's important to recognize the distinction between a virtual chassis and a chassis-based device. For instance, a virtual chassis is not used to model a chassis switch with removable line cards such as the Juniper EX9208, as its line cards are _not_ physically separate devices capable of operating independently.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Cables
|
|
||||||
|
|
||||||
A cable represents a physical connection between two termination points, such as between a console port and a patch panel port, or between two network interfaces. Cables can be traced through pass-through ports to form a complete path between two endpoints. In the example below, three individual cables comprise a path between the two connected endpoints.
|
|
||||||
|
|
||||||
```
|
|
||||||
|<------------------------------------------ Cable Path ------------------------------------------->|
|
|
||||||
|
|
||||||
Device A Patch Panel A Patch Panel B Device B
|
|
||||||
+-----------+ +-------------+ +-------------+ +-----------+
|
|
||||||
| Interface | --- Cable --- | Front Port | | Front Port | --- Cable --- | Interface |
|
|
||||||
+-----------+ +-------------+ +-------------+ +-----------+
|
|
||||||
+-------------+ +-------------+
|
|
||||||
| Rear Port | --- Cable --- | Rear Port |
|
|
||||||
+-------------+ +-------------+
|
|
||||||
```
|
|
||||||
|
|
||||||
All connections between device components in NetBox are represented using cables. However, defining the actual cable plant is optional: Components can be be directly connected using cables with no type or other attributes assigned.
|
|
||||||
|
|
||||||
Cables are also used to associated ports and interfaces with circuit terminations. To do this, first create the circuit termination, then navigate the desired component and connect a cable between the two.
|
|
||||||
|
@ -1,93 +1,16 @@
|
|||||||
# Aggregates
|
# IP Address Management
|
||||||
|
|
||||||
The first step to documenting your IP space is to define its scope by creating aggregates. Aggregates establish the root of your IP address hierarchy by defining the top-level allocations that you're interested in managing. Most organizations will want to track some commonly-used private IP spaces, such as:
|
{!docs/models/ipam/aggregate.md!}
|
||||||
|
{!docs/models/ipam/rir.md!}
|
||||||
* 10.0.0.0/8 (RFC 1918)
|
|
||||||
* 100.64.0.0/10 (RFC 6598)
|
|
||||||
* 172.16.0.0/12 (RFC 1918)
|
|
||||||
* 192.168.0.0/16 (RFC 1918)
|
|
||||||
* One or more /48s within fd00::/8 (IPv6 unique local addressing)
|
|
||||||
|
|
||||||
In addition to one or more of these, you'll want to create an aggregate for each globally-routable space your organization has been allocated. These aggregates should match the allocations recorded in public WHOIS databases.
|
|
||||||
|
|
||||||
Each IP prefix will be automatically arranged under its parent aggregate if one exists. Note that it's advised to create aggregates only for IP ranges actually allocated to your organization (or marked for private use): There is no need to define aggregates for provider-assigned space which is only used on Internet circuits, for example.
|
|
||||||
|
|
||||||
Aggregates cannot overlap with one another: They can only exist side-by-side. For instance, you cannot define both 10.0.0.0/8 and 10.16.0.0/16 as aggregates, because they overlap. 10.16.0.0/16 in this example would be created as a prefix and automatically grouped under 10.0.0.0/8. Remember, the purpose of aggregates is to establish the root of your IP addressing hierarchy.
|
|
||||||
|
|
||||||
## Regional Internet Registries (RIRs)
|
|
||||||
|
|
||||||
[Regional Internet registries](https://en.wikipedia.org/wiki/Regional_Internet_registry) are responsible for the allocation of globally-routable address space. The five RIRs are ARIN, RIPE, APNIC, LACNIC, and AFRINIC. However, some address space has been set aside for internal use, such as defined in RFCs 1918 and 6598. NetBox considers these RFCs as a sort of RIR as well; that is, an authority which "owns" certain address space. There also exist lower-tier registries which serve a particular geographic area.
|
|
||||||
|
|
||||||
Each aggregate must be assigned to one RIR. You are free to define whichever RIRs you choose (or create your own). The RIR model includes a boolean flag which indicates whether the RIR allocates only private IP space.
|
|
||||||
|
|
||||||
For example, suppose your organization has been allocated 104.131.0.0/16 by ARIN. It also makes use of RFC 1918 addressing internally. You would first create RIRs named ARIN and RFC 1918, then create an aggregate for each of these top-level prefixes, assigning it to its respective RIR.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Prefixes
|
{!docs/models/ipam/prefix.md!}
|
||||||
|
|
||||||
A prefix is an IPv4 or IPv6 network and mask expressed in CIDR notation (e.g. 192.0.2.0/24). A prefix entails only the "network portion" of an IP address: All bits in the address not covered by the mask must be zero. (In other words, a prefix cannot be a specific IP address.)
|
|
||||||
|
|
||||||
Prefixes are automatically arranged by their parent aggregates. Additionally, each prefix can be assigned to a particular site and VRF (routing table). All prefixes not assigned to a VRF will appear in the "global" table.
|
|
||||||
|
|
||||||
Each prefix can be assigned a status and a role. These terms are often used interchangeably so it's important to recognize the difference between them. The **status** defines a prefix's operational state. Statuses are hard-coded in NetBox and can be one of the following:
|
|
||||||
|
|
||||||
* Container - A summary of child prefixes
|
|
||||||
* Active - Provisioned and in use
|
|
||||||
* Reserved - Designated for future use
|
|
||||||
* Deprecated - No longer in use
|
|
||||||
|
|
||||||
On the other hand, a prefix's **role** defines its function. Role assignment is optional and roles are fully customizable. For example, you might create roles to differentiate between production and development infrastructure.
|
|
||||||
|
|
||||||
A prefix may also be assigned to a VLAN. This association is helpful for identifying which prefixes are included when reviewing a list of VLANs.
|
|
||||||
|
|
||||||
The prefix model include a "pool" flag. If enabled, NetBox will treat this prefix as a range (such as a NAT pool) wherein every IP address is valid and assignable. This logic is used for identifying available IP addresses within a prefix. If this flag is disabled, NetBox will assume that the first and last (broadcast) address within the prefix are unusable.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# IP Addresses
|
{!docs/models/ipam/ipaddress.md!}
|
||||||
|
|
||||||
An IP address comprises a single host address (either IPv4 or IPv6) and its subnet mask. Its mask should match exactly how the IP address is configured on an interface in the real world.
|
|
||||||
|
|
||||||
Like prefixes, an IP address can optionally be assigned to a VRF (otherwise, it will appear in the "global" table). IP addresses are automatically organized under parent prefixes within their respective VRFs.
|
|
||||||
|
|
||||||
Also like prefixes, each IP address can be assigned a status and a role. Statuses are hard-coded in NetBox and include the following:
|
|
||||||
|
|
||||||
* Active
|
|
||||||
* Reserved
|
|
||||||
* Deprecated
|
|
||||||
* DHCP
|
|
||||||
|
|
||||||
Each IP address can optionally be assigned a special role. Roles are used to indicate some special attribute of an IP address: for example, it is used as a loopback, or is a virtual IP maintained using VRRP. (Note that this differs in purpose from a _functional_ role, and thus cannot be customized.) Available roles include:
|
|
||||||
|
|
||||||
* Loopback
|
|
||||||
* Secondary
|
|
||||||
* Anycast
|
|
||||||
* VIP
|
|
||||||
* VRRP
|
|
||||||
* HSRP
|
|
||||||
* GLBP
|
|
||||||
|
|
||||||
An IP address can be assigned to a device or virtual machine interface, and an interface may have multiple IP addresses assigned to it. Further, each device and virtual machine may have one of its interface IPs designated as its primary IP address (one for IPv4 and one for IPv6).
|
|
||||||
|
|
||||||
## Network Address Translation (NAT)
|
|
||||||
|
|
||||||
An IP address can be designated as the network address translation (NAT) inside IP address for exactly one other IP address. This is useful primarily to denote a translation between public and private IP addresses. This relationship is followed in both directions: For example, if 10.0.0.1 is assigned as the inside IP for 192.0.2.1, 192.0.2.1 will be displayed as the outside IP for 10.0.0.1.
|
|
||||||
|
|
||||||
!!! note
|
|
||||||
NetBox does not support tracking one-to-many NAT relationships (also called port address translation). This type of policy requires additional logic to model and cannot be fully represented by IP address alone.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Virtual Routing and Forwarding (VRF)
|
{!docs/models/ipam/vrf.md!}
|
||||||
|
|
||||||
A VRF object in NetBox represents a virtual routing and forwarding (VRF) domain. Each VRF is essentially a separate routing table. VRFs are commonly used to isolate customers or organizations from one another within a network, or to route overlapping address space (e.g. multiple instances of the 10.0.0.0/8 space).
|
|
||||||
|
|
||||||
Each VRF is assigned a unique name and an optional route distinguisher (RD). The RD is expected to take one of the forms prescribed in [RFC 4364](https://tools.ietf.org/html/rfc4364#section-4.2), however its formatting is not strictly enforced.
|
|
||||||
|
|
||||||
Each prefix and IP address may be assigned to one (and only one) VRF. If you have a prefix or IP address which exists in multiple VRFs, you will need to create a separate instance of it in NetBox for each VRF. Any IP prefix or address not assigned to a VRF is said to belong to the "global" table.
|
|
||||||
|
|
||||||
By default, NetBox will allow duplicate prefixes to be assigned to a VRF. This behavior can be disabled by setting the "enforce unique" flag on the VRF model.
|
|
||||||
|
|
||||||
!!! note
|
|
||||||
Enforcement of unique IP space can be toggled for global table (non-VRF prefixes) using the `ENFORCE_GLOBAL_UNIQUE` configuration setting.
|
|
||||||
|
@ -1,31 +1,11 @@
|
|||||||
# Power Panel
|
# Power Tracking
|
||||||
|
|
||||||
A power panel represents the distribution board where power circuits – and their circuit breakers – terminate on. If you have multiple power panels in your data center, you should model them as such in NetBox to assist you in determining the redundancy of your power allocation.
|
{!docs/models/dcim/powerpanel.md!}
|
||||||
|
{!docs/models/dcim/powerfeed.md!}
|
||||||
|
|
||||||
# Power Feed
|
# Example Power Topology
|
||||||
|
|
||||||
A power feed identifies the power outlet/drop that goes to a rack and is terminated to a power panel. Power feeds have a supply type (AC/DC), voltage, amperage, and phase type (single/three).
|
Below is a simple diagram demonstrating how power is modeled in NetBox.
|
||||||
|
|
||||||
Power feeds are optionally assigned to a rack. In addition, a power port – and only one – can connect to a power feed; in the context of a PDU, the power feed is analogous to the power outlet that a PDU's power port/inlet connects to.
|
|
||||||
|
|
||||||
!!! info
|
|
||||||
The power usage of a rack is calculated when a power feed (or multiple) is assigned to that rack and connected to a power port.
|
|
||||||
|
|
||||||
# Power Outlet
|
|
||||||
|
|
||||||
Power outlets represent the ports on a PDU that supply power to other devices. Power outlets are downstream-facing towards power ports. A power outlet can be associated with a power port on the same device and a feed leg (i.e. in a case of a three-phase supply). This indicates which power port supplies power to a power outlet.
|
|
||||||
|
|
||||||
# Power Port
|
|
||||||
|
|
||||||
A power port is the inlet of a device where it draws its power. Power ports are upstream-facing towards power outlets. Alternatively, a power port can connect to a power feed – as mentioned in the power feed section – to indicate the power source of a PDU's inlet.
|
|
||||||
|
|
||||||
!!! info
|
|
||||||
If the draw of a power port is left empty, it will be dynamically calculated based on the power outlets associated with that power port. This is usually the case on the power ports of devices that supply power, like a PDU.
|
|
||||||
|
|
||||||
|
|
||||||
# Example
|
|
||||||
|
|
||||||
Below is a simple diagram demonstrating how power is modelled in NetBox.
|
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
The power feeds are connected to the same power panel for illustrative purposes; usually, you would have such feeds diversely connected to panels to avoid the single point of failure.
|
The power feeds are connected to the same power panel for illustrative purposes; usually, you would have such feeds diversely connected to panels to avoid the single point of failure.
|
||||||
|
@ -1,55 +1,8 @@
|
|||||||
# Secrets
|
# Secrets
|
||||||
|
|
||||||
A secret represents a single credential or other sensitive string of characters which must be stored securely. Each secret is assigned to a device within NetBox. The plaintext value of a secret is encrypted to a ciphertext immediately prior to storage within the database using a 256-bit AES master key. A SHA256 hash of the plaintext is also stored along with each ciphertext to validate the decrypted plaintext.
|
{!docs/models/secrets/secret.md!}
|
||||||
|
{!docs/models/secrets/secretrole.md!}
|
||||||
Each secret can also store an optional name parameter, which is not encrypted. This may be useful for storing user names.
|
|
||||||
|
|
||||||
## Roles
|
|
||||||
|
|
||||||
Each secret is assigned a functional role which indicates what it is used for. Secret roles are customizable. Typical roles might include:
|
|
||||||
|
|
||||||
* Login credentials
|
|
||||||
* SNMP community strings
|
|
||||||
* RADIUS/TACACS+ keys
|
|
||||||
* IKE key strings
|
|
||||||
* Routing protocol shared secrets
|
|
||||||
|
|
||||||
Roles are also used to control access to secrets. Each role is assigned an arbitrary number of groups and/or users. Only the users associated with a role have permission to decrypt the secrets assigned to that role. (A superuser has permission to decrypt all secrets, provided they have an active user key.)
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# User Keys
|
{!docs/models/secrets/userkey.md!}
|
||||||
|
|
||||||
Each user within NetBox can associate his or her account with an RSA public key. If activated by an administrator, this user key will contain a unique, encrypted copy of the AES master key needed to retrieve secret data.
|
|
||||||
|
|
||||||
User keys may be created by users individually, however they are of no use until they have been activated by a user who already possesses an active user key.
|
|
||||||
|
|
||||||
## Supported Key Format
|
|
||||||
|
|
||||||
Public key formats supported
|
|
||||||
|
|
||||||
- PKCS#1 RSAPublicKey* (PEM header: BEGIN RSA PUBLIC KEY)
|
|
||||||
- X.509 SubjectPublicKeyInfo** (PEM header: BEGIN PUBLIC KEY)
|
|
||||||
- **OpenSSH line format is not supported.**
|
|
||||||
|
|
||||||
Private key formats supported (unencrypted)
|
|
||||||
|
|
||||||
- PKCS#1 RSAPrivateKey** (PEM header: BEGIN RSA PRIVATE KEY)
|
|
||||||
- PKCS#8 PrivateKeyInfo* (PEM header: BEGIN PRIVATE KEY)
|
|
||||||
|
|
||||||
|
|
||||||
## Creating the First User Key
|
|
||||||
|
|
||||||
When NetBox is first installed, it contains no encryption keys. Before it can store secrets, a user (typically the superuser) must create a user key. This can be done by navigating to Profile > User Key.
|
|
||||||
|
|
||||||
To create a user key, you can either generate a new RSA key pair, or upload the public key belonging to a pair you already have. If generating a new key pair, **you must save the private key** locally before saving your new user key. Once your user key has been created, its public key will be displayed under your profile.
|
|
||||||
|
|
||||||
When the first user key is created in NetBox, a random master encryption key is generated automatically. This key is then encrypted using the public key provided and stored as part of your user key. **The master key cannot be recovered** without your private key.
|
|
||||||
|
|
||||||
Once a user key has been assigned an encrypted copy of the master key, it is considered activated and can now be used to encrypt and decrypt secrets.
|
|
||||||
|
|
||||||
## Creating Additional User Keys
|
|
||||||
|
|
||||||
Any user can create his or her user key by generating or uploading a public RSA key. However, a user key cannot be used to encrypt or decrypt secrets until it has been activated with an encrypted copy of the master key.
|
|
||||||
|
|
||||||
Only an administrator with an active user key can activate other user keys. To do so, access the NetBox admin UI and navigate to Secrets > User Keys. Select the user key(s) to be activated, and select "activate selected user keys" from the actions dropdown. You will need to provide your private key in order to decrypt the master key. A copy of the master key is then encrypted using the public key associated with the user key being activated.
|
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
# Services
|
# Service Mapping
|
||||||
|
|
||||||
A service represents a layer four TCP or UDP service available on a device or virtual machine. For example, you might want to document that an HTTP service is running on a device. Each service includes a name, protocol, and port number; for example, "SSH (TCP/22)" or "DNS (UDP/53)."
|
{!docs/models/ipam/service.md!}
|
||||||
|
|
||||||
A service may optionally be bound to one or more specific IP addresses belonging to its parent device or VM. (If no IP addresses are bound, the service is assumed to be reachable via any assigned IP address.)
|
|
||||||
|
@ -1,51 +1,11 @@
|
|||||||
# Sites
|
# Sites and Racks
|
||||||
|
|
||||||
How you choose to use sites will depend on the nature of your organization, but typically a site will equate to a building or campus. For example, a chain of banks might create a site to represent each of its branches, a site for its corporate headquarters, and two additional sites for its presence in two colocation facilities.
|
{!docs/models/dcim/site.md!}
|
||||||
|
{!docs/models/dcim/region.md!}
|
||||||
Each site must be assigned one of the following operational statuses:
|
|
||||||
|
|
||||||
* Active
|
|
||||||
* Planned
|
|
||||||
* Retired
|
|
||||||
|
|
||||||
The site model provides a facility ID field which can be used to annotate a facility ID (such as a datacenter name) associated with the site. Each site may also have an autonomous system (AS) number and time zone associated with it. (Time zones are provided by the [pytz](https://pypi.org/project/pytz/) package.)
|
|
||||||
|
|
||||||
The site model also includes several fields for storing contact and address information.
|
|
||||||
|
|
||||||
## Regions
|
|
||||||
|
|
||||||
Sites can be arranged geographically using regions. A region might represent a continent, country, city, campus, or other area depending on your use case. Regions can be nested recursively to construct a hierarchy. For example, you might define several country regions, and within each of those several state or city regions to which sites are assigned.
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# Racks
|
{!docs/models/dcim/rack.md!}
|
||||||
|
{!docs/models/dcim/rackgroup.md!}
|
||||||
The rack model represents a physical two- or four-post equipment rack in which equipment is mounted. Each rack must be assigned to a site. Rack height is measured in *rack units* (U); racks are commonly between 42U and 48U tall, but NetBox allows you to define racks of arbitrary height. A toggle is provided to indicate whether rack units are in ascending or descending order.
|
{!docs/models/dcim/rackrole.md!}
|
||||||
|
{!docs/models/dcim/rackreservation.md!}
|
||||||
Each rack is assigned a name and (optionally) a separate facility ID. This is helpful when leasing space in a data center your organization does not own: The facility will often assign a seemingly arbitrary ID to a rack (for example, "M204.313") whereas internally you refer to is simply as "R113." A unique serial number may also be associated with each rack.
|
|
||||||
|
|
||||||
A rack must be designated as one of the following types:
|
|
||||||
|
|
||||||
* 2-post frame
|
|
||||||
* 4-post frame
|
|
||||||
* 4-post cabinet
|
|
||||||
* Wall-mounted frame
|
|
||||||
* Wall-mounted cabinet
|
|
||||||
|
|
||||||
Each rack has two faces (front and rear) on which devices can be mounted. Rail-to-rail width may be 19 or 23 inches.
|
|
||||||
|
|
||||||
## Rack Groups
|
|
||||||
|
|
||||||
Racks can be arranged into groups. As with sites, how you choose to designate rack groups will depend on the nature of your organization. For example, if each site represents a campus, each group might represent a building within a campus. If each site represents a building, each rack group might equate to a floor or room.
|
|
||||||
|
|
||||||
Each rack group must be assigned to a parent site. Hierarchical recursion of rack groups is not currently supported.
|
|
||||||
|
|
||||||
The name and facility ID of each rack within a group must be unique. (Racks not assigned to the same rack group may have identical names and/or facility IDs.)
|
|
||||||
|
|
||||||
## Rack Roles
|
|
||||||
|
|
||||||
Each rack can optionally be assigned a functional role. For example, you might designate a rack for compute or storage resources, or to house colocated customer devices. Rack roles are fully customizable.
|
|
||||||
|
|
||||||
## Rack Space Reservations
|
|
||||||
|
|
||||||
Users can reserve units within a rack for future use. Multiple non-contiguous rack units can be associated with a single reservation (but reservations cannot span multiple racks). A rack reservation may optionally designate a specific tenant.
|
|
||||||
|
@ -1,20 +1,4 @@
|
|||||||
# Tenants
|
# Tenancy Assignment
|
||||||
|
|
||||||
A tenant represents a discrete entity for administrative purposes. Typically, tenants are used to represent individual customers or internal departments within an organization. The following objects can be assigned to tenants:
|
{!docs/models/tenancy/tenant.md!}
|
||||||
|
{!docs/models/tenancy/tenantgroup.md!}
|
||||||
* Sites
|
|
||||||
* Racks
|
|
||||||
* Rack reservations
|
|
||||||
* Devices
|
|
||||||
* VRFs
|
|
||||||
* Prefixes
|
|
||||||
* IP addresses
|
|
||||||
* VLANs
|
|
||||||
* Circuits
|
|
||||||
* Virtual machines
|
|
||||||
|
|
||||||
Tenant assignment is used to signify ownership of an object in NetBox. As such, each object may only be owned by a single tenant. For example, if you have a firewall dedicated to a particular customer, you would assign it to the tenant which represents that customer. However, if the firewall serves multiple customers, it doesn't *belong* to any particular customer, so tenant assignment would not be appropriate.
|
|
||||||
|
|
||||||
### Tenant Groups
|
|
||||||
|
|
||||||
Tenants can be organized by custom groups. For instance, you might create one group called "Customers" and one called "Acquisitions." The assignment of tenants to groups is optional.
|
|
||||||
|
@ -1,27 +0,0 @@
|
|||||||
# Clusters
|
|
||||||
|
|
||||||
A cluster is a logical grouping of physical resources within which virtual machines run. A cluster must be assigned a type, and may optionally be assigned to a group and/or site.
|
|
||||||
|
|
||||||
Physical devices may be associated with clusters as hosts. This allows users to track on which host(s) a particular VM may reside. However, NetBox does not support pinning a specific VM within a cluster to a particular host device.
|
|
||||||
|
|
||||||
## Cluster Types
|
|
||||||
|
|
||||||
A cluster type represents a technology or mechanism by which a cluster is formed. For example, you might create a cluster type named "VMware vSphere" for a locally hosted cluster or "DigitalOcean NYC3" for one hosted by a cloud provider.
|
|
||||||
|
|
||||||
## Cluster Groups
|
|
||||||
|
|
||||||
Cluster groups may be created for the purpose of organizing clusters. The assignment of clusters to groups is optional.
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# Virtual Machines
|
|
||||||
|
|
||||||
A virtual machine represents a virtual compute instance hosted within a cluster. Each VM must be associated with exactly one cluster.
|
|
||||||
|
|
||||||
Like devices, each VM can be assigned a platform and have interfaces created on it. VM interfaces behave similarly to device interfaces, and can be assigned IP addresses, VLANs, and services. However, given their virtual nature, they cannot be connected to other interfaces. Unlike physical devices, VMs cannot be assigned console or power ports, device bays, or inventory items.
|
|
||||||
|
|
||||||
The following resources can be defined for each VM:
|
|
||||||
|
|
||||||
* vCPU count
|
|
||||||
* Memory (MB)
|
|
||||||
* Disk space (GB)
|
|
9
docs/core-functionality/virtualization.md
Normal file
9
docs/core-functionality/virtualization.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# Virtual Machines and Clusters
|
||||||
|
|
||||||
|
{!docs/models/virtualization/cluster.md!}
|
||||||
|
{!docs/models/virtualization/clustertype.md!}
|
||||||
|
{!docs/models/virtualization/clustergroup.md!}
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
{!docs/models/virtualization/virtualmachine.md!}
|
@ -1,15 +1,4 @@
|
|||||||
# VLANs
|
# VLAN Management
|
||||||
|
|
||||||
A VLAN represents an isolated layer two domain, identified by a name and a numeric ID (1-4094) as defined in [IEEE 802.1Q](https://en.wikipedia.org/wiki/IEEE_802.1Q). Each VLAN may be assigned to a site and/or VLAN group.
|
{!docs/models/ipam/vlan.md!}
|
||||||
|
{!docs/models/ipam/vlangroup.md!}
|
||||||
Each VLAN must be assigned one of the following operational statuses:
|
|
||||||
|
|
||||||
* Active
|
|
||||||
* Reserved
|
|
||||||
* Deprecated
|
|
||||||
|
|
||||||
Each VLAN may also be assigned a functional role. Prefixes and VLANs share the same set of customizable roles.
|
|
||||||
|
|
||||||
## VLAN Groups
|
|
||||||
|
|
||||||
VLAN groups can be used to organize VLANs within NetBox. Groups can also be used to enforce uniqueness: Each VLAN within a group must have a unique ID and name. VLANs which are not assigned to a group may have overlapping names and IDs (including VLANs which belong to a common site). For example, you can create two VLANs with ID 123, but they cannot both be assigned to the same group.
|
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
Below is a list of items to consider when adding a new field to a model:
|
Below is a list of items to consider when adding a new field to a model:
|
||||||
|
|
||||||
### 1. Generate and run database migration
|
## 1. Generate and run database migration
|
||||||
|
|
||||||
Django migrations are used to express changes to the database schema. In most cases, Django can generate these automatically, however very complex changes may require manual intervention. Always remember to specify a short but descriptive name when generating a new migration.
|
Django migrations are used to express changes to the database schema. In most cases, Django can generate these automatically, however very complex changes may require manual intervention. Always remember to specify a short but descriptive name when generating a new migration.
|
||||||
|
|
||||||
@ -16,7 +16,7 @@ Where possible, try to merge related changes into a single migration. For exampl
|
|||||||
!!! note
|
!!! note
|
||||||
Migrations can only be merged within a release. Once a new release has been published, its migrations cannot be altered.
|
Migrations can only be merged within a release. Once a new release has been published, its migrations cannot be altered.
|
||||||
|
|
||||||
### 2. Add validation logic to `clean()`
|
## 2. Add validation logic to `clean()`
|
||||||
|
|
||||||
If the new field introduces additional validation requirements (beyond what's included with the field itself), implement them in the model's `clean()` method. Remember to call the model's original method using `super()` before or agter your custom validation as appropriate:
|
If the new field introduces additional validation requirements (beyond what's included with the field itself), implement them in the model's `clean()` method. Remember to call the model's original method using `super()` before or agter your custom validation as appropriate:
|
||||||
|
|
||||||
@ -32,23 +32,23 @@ class Foo(models.Model):
|
|||||||
raise ValidationError()
|
raise ValidationError()
|
||||||
```
|
```
|
||||||
|
|
||||||
### 3. Add CSV helpers
|
## 3. Add CSV helpers
|
||||||
|
|
||||||
Add the name of the new field to `csv_headers` and included a CSV-friendly representation of its data in the model's `to_csv()` method. These will be used when exporting objects in CSV format.
|
Add the name of the new field to `csv_headers` and included a CSV-friendly representation of its data in the model's `to_csv()` method. These will be used when exporting objects in CSV format.
|
||||||
|
|
||||||
### 4. Update relevant querysets
|
## 4. Update relevant querysets
|
||||||
|
|
||||||
If you're adding a relational field (e.g. `ForeignKey`) and intend to include the data when retreiving a list of objects, be sure to include the field using `prefetch_related()` as appropriate. This will optimize the view and avoid excessive database lookups.
|
If you're adding a relational field (e.g. `ForeignKey`) and intend to include the data when retreiving a list of objects, be sure to include the field using `prefetch_related()` as appropriate. This will optimize the view and avoid excessive database lookups.
|
||||||
|
|
||||||
### 5. Update API serializer
|
## 5. Update API serializer
|
||||||
|
|
||||||
Extend the model's API serializer in `<app>.api.serializers` to include the new field. In most cases, it will not be necessary to also extend the nested serializer, which produces a minimal represenation of the model.
|
Extend the model's API serializer in `<app>.api.serializers` to include the new field. In most cases, it will not be necessary to also extend the nested serializer, which produces a minimal represenation of the model.
|
||||||
|
|
||||||
### 6. Add choices to API view
|
## 6. Add choices to API view
|
||||||
|
|
||||||
If the new field has static choices, add it to the `FieldChoicesViewSet` for the app.
|
If the new field has static choices, add it to the `FieldChoicesViewSet` for the app.
|
||||||
|
|
||||||
### 7. Add field to forms
|
## 7. Add field to forms
|
||||||
|
|
||||||
Extend any forms to include the new field as appropriate. Common forms include:
|
Extend any forms to include the new field as appropriate. Common forms include:
|
||||||
|
|
||||||
@ -57,19 +57,19 @@ Extend any forms to include the new field as appropriate. Common forms include:
|
|||||||
* **CSV import** - The form used when bulk importing objects in CSV format
|
* **CSV import** - The form used when bulk importing objects in CSV format
|
||||||
* **Filter** - Displays the options available for filtering a list of objects (both UI and API)
|
* **Filter** - Displays the options available for filtering a list of objects (both UI and API)
|
||||||
|
|
||||||
### 8. Extend object filter set
|
## 8. Extend object filter set
|
||||||
|
|
||||||
If the new field should be filterable, add it to the `FilterSet` for the model. If the field should be searchable, remember to reference it in the FilterSet's `search()` method.
|
If the new field should be filterable, add it to the `FilterSet` for the model. If the field should be searchable, remember to reference it in the FilterSet's `search()` method.
|
||||||
|
|
||||||
### 9. Add column to object table
|
## 9. Add column to object table
|
||||||
|
|
||||||
If the new field will be included in the object list view, add a column to the model's table. For simple fields, adding the field name to `Meta.fields` will be sufficient. More complex fields may require explicitly declaring a new column.
|
If the new field will be included in the object list view, add a column to the model's table. For simple fields, adding the field name to `Meta.fields` will be sufficient. More complex fields may require explicitly declaring a new column.
|
||||||
|
|
||||||
### 10. Update the UI templates
|
## 10. Update the UI templates
|
||||||
|
|
||||||
Edit the object's view template to display the new field. There may also be a custom add/edit form template that needs to be updated.
|
Edit the object's view template to display the new field. There may also be a custom add/edit form template that needs to be updated.
|
||||||
|
|
||||||
### 11. Create/extend test cases
|
## 11. Create/extend test cases
|
||||||
|
|
||||||
Create or extend the relevant test cases to verify that the new field and any accompanying validation logic perform as expected. This is especially important for relational fields. NetBox incorporates various test suites, including:
|
Create or extend the relevant test cases to verify that the new field and any accompanying validation logic perform as expected. This is especially important for relational fields. NetBox incorporates various test suites, including:
|
||||||
|
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
# Minor Version Bumps
|
# Release Checklist
|
||||||
|
|
||||||
## Update Requirements
|
## Minor Version Bumps
|
||||||
|
|
||||||
|
### Update Requirements
|
||||||
|
|
||||||
Required Python packages are maintained in two files. `base_requirements.txt` contains a list of all the packages required by NetBox. Some of them may be pinned to a specific version of the package due to a known issue. For example:
|
Required Python packages are maintained in two files. `base_requirements.txt` contains a list of all the packages required by NetBox. Some of them may be pinned to a specific version of the package due to a known issue. For example:
|
||||||
|
|
||||||
@ -23,7 +25,7 @@ pip install -U -r base_requirements.txt
|
|||||||
3. Run all tests and check that the UI and API function as expected.
|
3. Run all tests and check that the UI and API function as expected.
|
||||||
4. Update the package versions in `requirements.txt` as appropriate.
|
4. Update the package versions in `requirements.txt` as appropriate.
|
||||||
|
|
||||||
## Update Static Libraries
|
### Update Static Libraries
|
||||||
|
|
||||||
Update the following static libraries to their most recent stable release:
|
Update the following static libraries to their most recent stable release:
|
||||||
|
|
||||||
@ -33,41 +35,41 @@ Update the following static libraries to their most recent stable release:
|
|||||||
* jQuery
|
* jQuery
|
||||||
* jQuery UI
|
* jQuery UI
|
||||||
|
|
||||||
## Squash Schema Migrations
|
### Squash Schema Migrations
|
||||||
|
|
||||||
Database schema migrations should be squashed for each new minor release. See the [squashing guide](squashing-migrations.md) for the detailed process.
|
Database schema migrations should be squashed for each new minor release. See the [squashing guide](squashing-migrations.md) for the detailed process.
|
||||||
|
|
||||||
## Create a new Release Notes Page
|
### Create a new Release Notes Page
|
||||||
|
|
||||||
Create a file at `/docs/release-notes/X.Y.md` to establish the release notes for the new release. Add the file to the table of contents within `mkdocs.yml`.
|
Create a file at `/docs/release-notes/X.Y.md` to establish the release notes for the new release. Add the file to the table of contents within `mkdocs.yml`.
|
||||||
|
|
||||||
## Manually Perform a New Install
|
### Manually Perform a New Install
|
||||||
|
|
||||||
Create a new installation of NetBox by following [the current documentation](http://netbox.readthedocs.io/en/latest/). This should be a manual process, so that issues with the documentation can be identified and corrected.
|
Create a new installation of NetBox by following [the current documentation](http://netbox.readthedocs.io/en/latest/). This should be a manual process, so that issues with the documentation can be identified and corrected.
|
||||||
|
|
||||||
## Close the Release Milestone
|
### Close the Release Milestone
|
||||||
|
|
||||||
Close the release milestone on GitHub. Ensure that there are no remaining open issues associated with it.
|
Close the release milestone on GitHub. Ensure that there are no remaining open issues associated with it.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
# All Releases
|
## All Releases
|
||||||
|
|
||||||
## Verify CI Build Status
|
### Verify CI Build Status
|
||||||
|
|
||||||
Ensure that continuous integration testing on the `develop` branch is completing successfully.
|
Ensure that continuous integration testing on the `develop` branch is completing successfully.
|
||||||
|
|
||||||
## Update Version and Changelog
|
### Update Version and Changelog
|
||||||
|
|
||||||
Update the `VERSION` constant in `settings.py` to the new release version and annotate the current data in the release notes for the new version.
|
Update the `VERSION` constant in `settings.py` to the new release version and annotate the current data in the release notes for the new version.
|
||||||
|
|
||||||
## Submit a Pull Request
|
### Submit a Pull Request
|
||||||
|
|
||||||
Submit a pull request title **"Release vX.Y.X"** to merge the `develop` branch into `master`. Include a brief change log listing the features, improvements, and/or bugs addressed in the release.
|
Submit a pull request title **"Release vX.Y.Z"** to merge the `develop` branch into `master`. Include a brief change log listing the features, improvements, and/or bugs addressed in the release.
|
||||||
|
|
||||||
Once CI has completed on the PR, merge it.
|
Once CI has completed on the PR, merge it.
|
||||||
|
|
||||||
## Create a New Release
|
### Create a New Release
|
||||||
|
|
||||||
Draft a [new release](https://github.com/netbox-community/netbox/releases/new) with the following parameters.
|
Draft a [new release](https://github.com/netbox-community/netbox/releases/new) with the following parameters.
|
||||||
|
|
||||||
@ -77,7 +79,7 @@ Draft a [new release](https://github.com/netbox-community/netbox/releases/new) w
|
|||||||
|
|
||||||
Copy the description from the pull request into the release notes.
|
Copy the description from the pull request into the release notes.
|
||||||
|
|
||||||
## Update the Development Version
|
### Update the Development Version
|
||||||
|
|
||||||
On the `develop` branch, update `VERSION` in `settings.py` to point to the next release. For example, if you just released v2.3.4, set:
|
On the `develop` branch, update `VERSION` in `settings.py` to point to the next release. For example, if you just released v2.3.4, set:
|
||||||
|
|
||||||
@ -85,6 +87,6 @@ On the `develop` branch, update `VERSION` in `settings.py` to point to the next
|
|||||||
VERSION = 'v2.3.5-dev'
|
VERSION = 'v2.3.5-dev'
|
||||||
```
|
```
|
||||||
|
|
||||||
## Announce the Release
|
### Announce the Release
|
||||||
|
|
||||||
Announce the release on the [mailing list](https://groups.google.com/forum/#!forum/netbox-discuss). Include a link to the release and the (HTML-formatted) release notes.
|
Announce the release on the [mailing list](https://groups.google.com/forum/#!forum/netbox-discuss). Include a link to the release and the (HTML-formatted) release notes.
|
||||||
|
@ -12,7 +12,7 @@ NetBox is an open source web application designed to help manage and document co
|
|||||||
* **Data circuits** - Long-haul communications circuits and providers
|
* **Data circuits** - Long-haul communications circuits and providers
|
||||||
* **Secrets** - Encrypted storage of sensitive credentials
|
* **Secrets** - Encrypted storage of sensitive credentials
|
||||||
|
|
||||||
# What NetBox Is Not
|
## What NetBox Is Not
|
||||||
|
|
||||||
While NetBox strives to cover many areas of network management, the scope of its feature set is necessarily limited. This ensures that development focuses on core functionality and that scope creep is reasonably contained. To that end, it might help to provide some examples of functionality that NetBox **does not** provide:
|
While NetBox strives to cover many areas of network management, the scope of its feature set is necessarily limited. This ensures that development focuses on core functionality and that scope creep is reasonably contained. To that end, it might help to provide some examples of functionality that NetBox **does not** provide:
|
||||||
|
|
||||||
@ -24,23 +24,23 @@ While NetBox strives to cover many areas of network management, the scope of its
|
|||||||
|
|
||||||
That said, NetBox _can_ be used to great effect in populating external tools with the data they need to perform these functions.
|
That said, NetBox _can_ be used to great effect in populating external tools with the data they need to perform these functions.
|
||||||
|
|
||||||
# Design Philosophy
|
## Design Philosophy
|
||||||
|
|
||||||
NetBox was designed with the following tenets foremost in mind.
|
NetBox was designed with the following tenets foremost in mind.
|
||||||
|
|
||||||
## Replicate the Real World
|
### Replicate the Real World
|
||||||
|
|
||||||
Careful consideration has been given to the data model to ensure that it can accurately reflect a real-world network. For instance, IP addresses are assigned not to devices, but to specific interfaces attached to a device, and an interface may have multiple IP addresses assigned to it.
|
Careful consideration has been given to the data model to ensure that it can accurately reflect a real-world network. For instance, IP addresses are assigned not to devices, but to specific interfaces attached to a device, and an interface may have multiple IP addresses assigned to it.
|
||||||
|
|
||||||
## Serve as a "Source of Truth"
|
### Serve as a "Source of Truth"
|
||||||
|
|
||||||
NetBox intends to represent the _desired_ state of a network versus its _operational_ state. As such, automated import of live network state is strongly discouraged. All data created in NetBox should first be vetted by a human to ensure its integrity. NetBox can then be used to populate monitoring and provisioning systems with a high degree of confidence.
|
NetBox intends to represent the _desired_ state of a network versus its _operational_ state. As such, automated import of live network state is strongly discouraged. All data created in NetBox should first be vetted by a human to ensure its integrity. NetBox can then be used to populate monitoring and provisioning systems with a high degree of confidence.
|
||||||
|
|
||||||
## Keep it Simple
|
### Keep it Simple
|
||||||
|
|
||||||
When given a choice between a relatively simple [80% solution](https://en.wikipedia.org/wiki/Pareto_principle) and a much more complex complete solution, the former will typically be favored. This ensures a lean codebase with a low learning curve.
|
When given a choice between a relatively simple [80% solution](https://en.wikipedia.org/wiki/Pareto_principle) and a much more complex complete solution, the former will typically be favored. This ensures a lean codebase with a low learning curve.
|
||||||
|
|
||||||
# Application Stack
|
## Application Stack
|
||||||
|
|
||||||
NetBox is built on the [Django](https://djangoproject.com/) Python framework and utilizes a [PostgreSQL](https://www.postgresql.org/) database. It runs as a WSGI service behind your choice of HTTP server.
|
NetBox is built on the [Django](https://djangoproject.com/) Python framework and utilizes a [PostgreSQL](https://www.postgresql.org/) database. It runs as a WSGI service behind your choice of HTTP server.
|
||||||
|
|
||||||
@ -53,10 +53,10 @@ NetBox is built on the [Django](https://djangoproject.com/) Python framework and
|
|||||||
| Task queuing | Redis/django-rq |
|
| Task queuing | Redis/django-rq |
|
||||||
| Live device access | NAPALM |
|
| Live device access | NAPALM |
|
||||||
|
|
||||||
## Supported Python Version
|
## Supported Python Versions
|
||||||
|
|
||||||
NetBox supports Python 3.5, 3.6, and 3.7 environments currently. Python 3.5 is scheduled to be unsupported in NetBox v2.8.
|
NetBox supports Python 3.5, 3.6, and 3.7 environments currently. Python 3.5 is scheduled to be unsupported in NetBox v2.8.
|
||||||
|
|
||||||
# Getting Started
|
## Getting Started
|
||||||
|
|
||||||
See the [installation guide](installation/index.md) for help getting NetBox up and running quickly.
|
See the [installation guide](installation/index.md) for help getting NetBox up and running quickly.
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
# PostgreSQL Database Installation
|
||||||
|
|
||||||
This section entails the installation and configuration of a local PostgreSQL database. If you already have a PostgreSQL database service in place, skip to [the next section](2-redis.md).
|
This section entails the installation and configuration of a local PostgreSQL database. If you already have a PostgreSQL database service in place, skip to [the next section](2-redis.md).
|
||||||
|
|
||||||
!!! warning
|
!!! warning
|
||||||
|
@ -1,12 +1,16 @@
|
|||||||
|
# Redis Installation
|
||||||
|
|
||||||
|
## Install Redis
|
||||||
|
|
||||||
[Redis](https://redis.io/) is an in-memory key-value store which NetBox employs for caching and queuing. This section entails the installation and configuration of a local Redis instance. If you already have a Redis service in place, skip to [the next section](3-netbox.md).
|
[Redis](https://redis.io/) is an in-memory key-value store which NetBox employs for caching and queuing. This section entails the installation and configuration of a local Redis instance. If you already have a Redis service in place, skip to [the next section](3-netbox.md).
|
||||||
|
|
||||||
#### Ubuntu
|
### Ubuntu
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# apt-get install -y redis-server
|
# apt-get install -y redis-server
|
||||||
```
|
```
|
||||||
|
|
||||||
#### CentOS
|
### CentOS
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# yum install -y epel-release
|
# yum install -y epel-release
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
|
# NetBox Installation
|
||||||
|
|
||||||
This section of the documentation discusses installing and configuring the NetBox application. Begin by installing all system packages required by NetBox and its dependencies:
|
This section of the documentation discusses installing and configuring the NetBox application. Begin by installing all system packages required by NetBox and its dependencies:
|
||||||
|
|
||||||
## Install System Packages
|
## Install System Packages
|
||||||
|
|
||||||
#### Ubuntu
|
### Ubuntu
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# apt-get install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
|
# apt-get install -y python3 python3-pip python3-venv python3-dev build-essential libxml2-dev libxslt1-dev libffi-dev libpq-dev libssl-dev zlib1g-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
#### CentOS
|
### CentOS
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# yum install -y gcc python36 python36-devel python36-setuptools libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config
|
# yum install -y gcc python36 python36-devel python36-setuptools libxml2-devel libxslt-devel libffi-devel openssl-devel redhat-rpm-config
|
||||||
@ -93,7 +95,7 @@ Next, activate the virtual environment and install the required Python packages.
|
|||||||
(venv) # pip3 install -r requirements.txt
|
(venv) # pip3 install -r requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
#### NAPALM Automation (Optional)
|
### NAPALM Automation (Optional)
|
||||||
|
|
||||||
NetBox supports integration with the [NAPALM automation](https://napalm-automation.net/) library. NAPALM allows NetBox to fetch live data from devices and return it to a requester via its REST API. Installation of NAPALM is optional. To enable it, install the `napalm` package:
|
NetBox supports integration with the [NAPALM automation](https://napalm-automation.net/) library. NAPALM allows NetBox to fetch live data from devices and return it to a requester via its REST API. Installation of NAPALM is optional. To enable it, install the `napalm` package:
|
||||||
|
|
||||||
@ -101,7 +103,13 @@ NetBox supports integration with the [NAPALM automation](https://napalm-automati
|
|||||||
(venv) # pip3 install napalm
|
(venv) # pip3 install napalm
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Remote File Storage (Optional)
|
To ensure NAPALM is automatically re-installed during future upgrades, create a file named `local_requirements.txt` in the NetBox root directory (alongside `requirements.txt`) and list the `napalm` package:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
# echo napalm >> local_requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Remote File Storage (Optional)
|
||||||
|
|
||||||
By default, NetBox will use the local filesystem to storage uploaded files. To use a remote filesystem, install the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) library and configure your [desired backend](../../configuration/optional-settings/#storage_backend) in `configuration.py`.
|
By default, NetBox will use the local filesystem to storage uploaded files. To use a remote filesystem, install the [`django-storages`](https://django-storages.readthedocs.io/en/stable/) library and configure your [desired backend](../../configuration/optional-settings/#storage_backend) in `configuration.py`.
|
||||||
|
|
||||||
@ -109,6 +117,12 @@ By default, NetBox will use the local filesystem to storage uploaded files. To u
|
|||||||
(venv) # pip3 install django-storages
|
(venv) # pip3 install django-storages
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Don't forget to add the `django-storages` package to `local_requirements.txt` to ensure it gets re-installed during future upgrades:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
# echo django-storages >> local_requirements.txt
|
||||||
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
|
|
||||||
Move into the NetBox configuration directory and make a copy of `configuration.example.py` named `configuration.py`.
|
Move into the NetBox configuration directory and make a copy of `configuration.example.py` named `configuration.py`.
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
# HTTP Server Setup
|
||||||
|
|
||||||
We'll set up a simple WSGI front end using [gunicorn](http://gunicorn.org/) for the purposes of this guide. For web servers, we provide example configurations for both [nginx](https://www.nginx.com/resources/wiki/) and [Apache](http://httpd.apache.org/docs/2.4). (You are of course free to use whichever combination of HTTP and WSGI services you'd like.) We'll use systemd to enable service persistence.
|
We'll set up a simple WSGI front end using [gunicorn](http://gunicorn.org/) for the purposes of this guide. For web servers, we provide example configurations for both [nginx](https://www.nginx.com/resources/wiki/) and [Apache](http://httpd.apache.org/docs/2.4). (You are of course free to use whichever combination of HTTP and WSGI services you'd like.) We'll use systemd to enable service persistence.
|
||||||
|
|
||||||
!!! info
|
!!! info
|
||||||
|
@ -1,25 +1,37 @@
|
|||||||
|
# LDAP Configuration
|
||||||
|
|
||||||
This guide explains how to implement LDAP authentication using an external server. User authentication will fall back to built-in Django users in the event of a failure.
|
This guide explains how to implement LDAP authentication using an external server. User authentication will fall back to built-in Django users in the event of a failure.
|
||||||
|
|
||||||
## Install Requirements
|
## Install Requirements
|
||||||
|
|
||||||
#### Install openldap-devel
|
### Install System Packages
|
||||||
|
|
||||||
On Ubuntu:
|
On Ubuntu:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
sudo apt-get install -y libldap2-dev libsasl2-dev libssl-dev
|
# apt-get install -y libldap2-dev libsasl2-dev libssl-dev
|
||||||
```
|
```
|
||||||
|
|
||||||
On CentOS:
|
On CentOS:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
sudo yum install -y openldap-devel
|
# yum install -y openldap-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Install django-auth-ldap
|
### Install django-auth-ldap
|
||||||
|
|
||||||
|
Activate the Python virtual environment and install the `django-auth-ldap` package using pip:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
pip3 install django-auth-ldap
|
# cd /opt/netbox/
|
||||||
|
# source venv/bin/activate
|
||||||
|
(venv) # pip3 install django-auth-ldap
|
||||||
|
```
|
||||||
|
|
||||||
|
Once installed, add the package to `local_requirements.txt` to ensure it is re-installed during future rebuilds of the virtual environment:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
(venv) # echo django-auth-ldap >> local_requirements.txt
|
||||||
```
|
```
|
||||||
|
|
||||||
## Configuration
|
## Configuration
|
||||||
@ -79,7 +91,7 @@ AUTH_LDAP_USER_ATTR_MAP = {
|
|||||||
}
|
}
|
||||||
```
|
```
|
||||||
|
|
||||||
## User Groups for Permissions
|
### User Groups for Permissions
|
||||||
|
|
||||||
!!! info
|
!!! info
|
||||||
When using Microsoft Active Directory, support for nested groups can be activated by using `NestedGroupOfNamesType()` instead of `GroupOfNamesType()` for `AUTH_LDAP_GROUP_TYPE`. You will also need to modify the import line to use `NestedGroupOfNamesType` instead of `GroupOfNamesType` .
|
When using Microsoft Active Directory, support for nested groups can be activated by using `NestedGroupOfNamesType()` instead of `GroupOfNamesType()` for `AUTH_LDAP_GROUP_TYPE`. You will also need to modify the import line to use `NestedGroupOfNamesType` instead of `GroupOfNamesType` .
|
||||||
|
@ -8,7 +8,7 @@ The following sections detail how to set up a new instance of NetBox:
|
|||||||
4. [HTTP daemon](4-http-daemon.md)
|
4. [HTTP daemon](4-http-daemon.md)
|
||||||
5. [LDAP authentication](5-ldap.md) (optional)
|
5. [LDAP authentication](5-ldap.md) (optional)
|
||||||
|
|
||||||
# Upgrading
|
## Upgrading
|
||||||
|
|
||||||
If you are upgrading from an existing installation, please consult the [upgrading guide](upgrading.md).
|
If you are upgrading from an existing installation, please consult the [upgrading guide](upgrading.md).
|
||||||
|
|
||||||
|
@ -1,14 +1,16 @@
|
|||||||
|
# Migrating to systemd
|
||||||
|
|
||||||
This document contains instructions for migrating from a legacy NetBox deployment using [supervisor](http://supervisord.org/) to a systemd-based approach.
|
This document contains instructions for migrating from a legacy NetBox deployment using [supervisor](http://supervisord.org/) to a systemd-based approach.
|
||||||
|
|
||||||
## Ubuntu
|
## Ubuntu
|
||||||
|
|
||||||
### Uninstall supervisord:
|
### Uninstall supervisord
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# apt-get remove -y supervisord
|
# apt-get remove -y supervisord
|
||||||
```
|
```
|
||||||
|
|
||||||
### Configure systemd:
|
### Configure systemd
|
||||||
|
|
||||||
!!! note
|
!!! note
|
||||||
These instructions assume the presence of a Python virtual environment at `/opt/netbox/venv`. If you have not created this environment, please refer to the [installation instructions](3-netbox.md#set-up-python-environment) for direction.
|
These instructions assume the presence of a Python virtual environment at `/opt/netbox/venv`. If you have not created this environment, please refer to the [installation instructions](3-netbox.md#set-up-python-environment) for direction.
|
||||||
|
@ -1,3 +1,5 @@
|
|||||||
|
# Upgrading to a New NetBox Release
|
||||||
|
|
||||||
## Review the Release Notes
|
## Review the Release Notes
|
||||||
|
|
||||||
Prior to upgrading your NetBox instance, be sure to carefully review all [release notes](../../release-notes/) that have been published since your current version was released. Although the upgrade process typically does not involve additional work, certain releases may introduce breaking or backward-incompatible changes. These are called out in the release notes under the version in which the change went into effect.
|
Prior to upgrading your NetBox instance, be sure to carefully review all [release notes](../../release-notes/) that have been published since your current version was released. Although the upgrade process typically does not involve additional work, certain releases may introduce breaking or backward-incompatible changes. These are called out in the release notes under the version in which the change went into effect.
|
||||||
@ -25,31 +27,32 @@ Copy the 'configuration.py' you created when first installing to the new version
|
|||||||
# cp netbox-X.Y.Z/netbox/netbox/configuration.py netbox/netbox/netbox/configuration.py
|
# cp netbox-X.Y.Z/netbox/netbox/configuration.py netbox/netbox/netbox/configuration.py
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Also copy the LDAP configuration if using LDAP:
|
||||||
|
|
||||||
|
```no-highlight
|
||||||
|
# cp netbox-X.Y.Z/netbox/netbox/ldap_config.py netbox/netbox/netbox/ldap_config.py
|
||||||
|
```
|
||||||
|
|
||||||
Be sure to replicate your uploaded media as well. (The exact action necessary will depend on where you choose to store your media, but in general moving or copying the media directory will suffice.)
|
Be sure to replicate your uploaded media as well. (The exact action necessary will depend on where you choose to store your media, but in general moving or copying the media directory will suffice.)
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# cp -pr netbox-X.Y.Z/netbox/media/ netbox/netbox/
|
# cp -pr netbox-X.Y.Z/netbox/media/ netbox/netbox/
|
||||||
```
|
```
|
||||||
|
|
||||||
Also make sure to copy over any reports that you've made. Note that if you made them in a separate directory (`/opt/netbox-reports` for example), then you will not need to copy them - the config file that you copied earlier will point to the correct location.
|
Also make sure to copy over any custom scripts and reports that you've made. Note that if these are stored outside the project root, you will not need to copy them. (Check the `SCRIPTS_ROOT` and `REPORTS_ROOT` parameters in the configuration file above if you're unsure.)
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
|
# cp -r /opt/netbox-X.Y.Z/netbox/scripts /opt/netbox/netbox/scripts/
|
||||||
# cp -r /opt/netbox-X.Y.Z/netbox/reports /opt/netbox/netbox/reports/
|
# cp -r /opt/netbox-X.Y.Z/netbox/reports /opt/netbox/netbox/reports/
|
||||||
```
|
```
|
||||||
|
|
||||||
If you followed the original installation guide to set up gunicorn, be sure to copy its configuration as well:
|
If you followed the original installation guide to set up gunicorn, be sure to copy its configuration as well:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# cp netbox-X.Y.Z/gunicorn_config.py netbox/gunicorn_config.py
|
# cp netbox-X.Y.Z/gunicorn.py netbox/gunicorn.py
|
||||||
```
|
```
|
||||||
|
|
||||||
Copy the LDAP configuration if using LDAP:
|
### Option B: Clone the Git Repository
|
||||||
|
|
||||||
```no-highlight
|
|
||||||
# cp netbox-X.Y.Z/netbox/netbox/ldap_config.py netbox/netbox/netbox/ldap_config.py
|
|
||||||
```
|
|
||||||
|
|
||||||
### Option B: Clone the Git Repository (latest master release)
|
|
||||||
|
|
||||||
This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most recent iteration of the master branch:
|
This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most recent iteration of the master branch:
|
||||||
|
|
||||||
@ -62,7 +65,7 @@ This guide assumes that NetBox is installed at `/opt/netbox`. Pull down the most
|
|||||||
|
|
||||||
## Run the Upgrade Script
|
## Run the Upgrade Script
|
||||||
|
|
||||||
Once the new code is in place, run the upgrade script:
|
Once the new code is in place, verify that any optional Python packages required by your deployment (e.g. `napalm` or `django-auth-ldap`) are listed in `local_requirements.txt`. Then, run the upgrade script:
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
# ./upgrade.sh
|
# ./upgrade.sh
|
||||||
@ -71,7 +74,8 @@ Once the new code is in place, run the upgrade script:
|
|||||||
This script:
|
This script:
|
||||||
|
|
||||||
* Destroys and rebuilds the Python virtual environment
|
* Destroys and rebuilds the Python virtual environment
|
||||||
* Installs all required Python packages
|
* Installs all required Python packages (listed in `requirements.txt`)
|
||||||
|
* Installs any additional packages from `local_requirements.txt`
|
||||||
* Applies any database migrations that were included in the release
|
* Applies any database migrations that were included in the release
|
||||||
* Collects all static files to be served by the HTTP service
|
* Collects all static files to be served by the HTTP service
|
||||||
* Deletes stale content types from the database
|
* Deletes stale content types from the database
|
||||||
|
3
docs/models/circuits/circuit.md
Normal file
3
docs/models/circuits/circuit.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Circuits
|
||||||
|
|
||||||
|
A circuit represents a single _physical_ link connecting exactly two endpoints. (A circuit with more than two endpoints is a virtual circuit, which is not currently supported by NetBox.) Each circuit belongs to a provider and must be assigned a circuit ID which is unique to that provider.
|
11
docs/models/circuits/circuittermination.md
Normal file
11
docs/models/circuits/circuittermination.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Circuit Terminations
|
||||||
|
|
||||||
|
A circuit may have one or two terminations, annotated as the "A" and "Z" sides of the circuit. A single-termination circuit can be used when you don't know (or care) about the far end of a circuit (for example, an Internet access circuit which connects to a transit provider). A dual-termination circuit is useful for tracking circuits which connect two sites.
|
||||||
|
|
||||||
|
Each circuit termination is tied to a site, and may optionally be connected via a cable to a specific device interface or pass-through port. Each termination can be assigned a separate downstream and upstream speed independent from one another. Fields are also available to track cross-connect and patch panel details.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
A circuit represents a physical link, and cannot have more than two endpoints. When modeling a multi-point topology, each leg of the topology must be defined as a discrete circuit.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
A circuit may terminate only to a physical interface. Circuits may not terminate to LAG interfaces, which are virtual interfaces: You must define each physical circuit within a service bundle separately and terminate it to its actual physical interface.
|
10
docs/models/circuits/circuittype.md
Normal file
10
docs/models/circuits/circuittype.md
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
# Circuit Types
|
||||||
|
|
||||||
|
Circuits are classified by type. For example, you might define circuit types for:
|
||||||
|
|
||||||
|
* Internet transit
|
||||||
|
* Out-of-band connectivity
|
||||||
|
* Peering
|
||||||
|
* Private backhaul
|
||||||
|
|
||||||
|
Circuit types are fully customizable.
|
5
docs/models/circuits/provider.md
Normal file
5
docs/models/circuits/provider.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Providers
|
||||||
|
|
||||||
|
A provider is any entity which provides some form of connectivity. While this obviously includes carriers which offer Internet and private transit service, it might also include Internet exchange (IX) points and even organizations with whom you peer directly.
|
||||||
|
|
||||||
|
Each provider may be assigned an autonomous system number (ASN), an account number, and relevant contact information.
|
19
docs/models/dcim/cable.md
Normal file
19
docs/models/dcim/cable.md
Normal file
@ -0,0 +1,19 @@
|
|||||||
|
# Cables
|
||||||
|
|
||||||
|
A cable represents a physical connection between two termination points, such as between a console port and a patch panel port, or between two network interfaces. Cables can be traced through pass-through ports to form a complete path between two endpoints. In the example below, three individual cables comprise a path between the two connected endpoints.
|
||||||
|
|
||||||
|
```
|
||||||
|
|<------------------------------------------ Cable Path ------------------------------------------->|
|
||||||
|
|
||||||
|
Device A Patch Panel A Patch Panel B Device B
|
||||||
|
+-----------+ +-------------+ +-------------+ +-----------+
|
||||||
|
| Interface | --- Cable --- | Front Port | | Front Port | --- Cable --- | Interface |
|
||||||
|
+-----------+ +-------------+ +-------------+ +-----------+
|
||||||
|
+-------------+ +-------------+
|
||||||
|
| Rear Port | --- Cable --- | Rear Port |
|
||||||
|
+-------------+ +-------------+
|
||||||
|
```
|
||||||
|
|
||||||
|
All connections between device components in NetBox are represented using cables. However, defining the actual cable plant is optional: Components can be be directly connected using cables with no type or other attributes assigned.
|
||||||
|
|
||||||
|
Cables are also used to associated ports and interfaces with circuit terminations. To do this, first create the circuit termination, then navigate the desired component and connect a cable between the two.
|
5
docs/models/dcim/consoleport.md
Normal file
5
docs/models/dcim/consoleport.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
## Console Ports
|
||||||
|
|
||||||
|
A console port provides connectivity to the physical console of a device. Console ports are typically used for temporary access by someone who is physically near the device, or for remote out-of-band access via a console server.
|
||||||
|
|
||||||
|
Console ports can be connected to console server ports.
|
3
docs/models/dcim/consoleporttemplate.md
Normal file
3
docs/models/dcim/consoleporttemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Console Port Templates
|
||||||
|
|
||||||
|
A template for a console port that will be created on all instantiations of the parent device type.
|
5
docs/models/dcim/consoleserverport.md
Normal file
5
docs/models/dcim/consoleserverport.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
## Console Server Ports
|
||||||
|
|
||||||
|
A console server is a device which provides remote access to the local consoles of connected devices. This is typically done to provide remote out-of-band access to network devices.
|
||||||
|
|
||||||
|
Console server ports can be connected to console ports.
|
3
docs/models/dcim/consoleserverporttemplate.md
Normal file
3
docs/models/dcim/consoleserverporttemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Console Server Port Templates
|
||||||
|
|
||||||
|
A template for a console server port that will be created on all instantiations of the parent device type.
|
7
docs/models/dcim/device.md
Normal file
7
docs/models/dcim/device.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Devices
|
||||||
|
|
||||||
|
Every piece of hardware which is installed within a rack exists in NetBox as a device. Devices are measured in rack units (U) and can be half depth or full depth. A device may have a height of 0U: These devices do not consume vertical rack space and cannot be assigned to a particular rack unit. A common example of a 0U device is a vertically-mounted PDU.
|
||||||
|
|
||||||
|
When assigning a multi-U device to a rack, it is considered to be mounted in the lowest-numbered rack unit which it occupies. For example, a 3U device which occupies U8 through U10 is said to be mounted in U8. This logic applies to racks with both ascending and descending unit numbering.
|
||||||
|
|
||||||
|
A device is said to be full depth if its installation on one rack face prevents the installation of any other device on the opposite face within the same rack unit(s). This could be either because the device is physically too deep to allow a device behind it, or because the installation of an opposing device would impede airflow.
|
7
docs/models/dcim/devicebay.md
Normal file
7
docs/models/dcim/devicebay.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
## Device Bays
|
||||||
|
|
||||||
|
Device bays represent the ability of a device to house child devices. For example, you might install four blade servers into a 2U chassis. The chassis would appear in the rack elevation as a 2U device with four device bays. Each server within it would be defined as a 0U device installed in one of the device bays. Child devices do not appear within rack elevations or the "Non-Racked Devices" list within the rack view.
|
||||||
|
|
||||||
|
Child devices are first-class Devices in their own right: that is, fully independent managed entities which don't share any control plane with the parent. Just like normal devices, child devices have their own platform (OS), role, tags, and interfaces. You cannot create a LAG between interfaces in different child devices.
|
||||||
|
|
||||||
|
Therefore, Device bays are **not** suitable for modeling chassis-based switches and routers. These should instead be modeled as a single Device, with the line cards as Inventory Items.
|
3
docs/models/dcim/devicebaytemplate.md
Normal file
3
docs/models/dcim/devicebaytemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Device Bay Templates
|
||||||
|
|
||||||
|
A template for a device bay that will be created on all instantiations of the parent device type.
|
3
docs/models/dcim/devicerole.md
Normal file
3
docs/models/dcim/devicerole.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Device Roles
|
||||||
|
|
||||||
|
Devices can be organized by functional roles. These roles are fully customizable. For example, you might create roles for core switches, distribution switches, and access switches.
|
18
docs/models/dcim/devicetype.md
Normal file
18
docs/models/dcim/devicetype.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Device Types
|
||||||
|
|
||||||
|
A device type represents a particular make and model of hardware that exists in the real world. Device types define the physical attributes of a device (rack height and depth) and its individual components (console, power, and network interfaces).
|
||||||
|
|
||||||
|
Device types are instantiated as devices installed within racks. For example, you might define a device type to represent a Juniper EX4300-48T network switch with 48 Ethernet interfaces. You can then create multiple devices of this type named "switch1," "switch2," and so on. Each device will inherit the components (such as interfaces) of its device type at the time of creation. (However, changes made to a device type will **not** apply to instances of that device type retroactively.)
|
||||||
|
|
||||||
|
Some devices house child devices which share physical resources, like space and power, but which functional independently from one another. A common example of this is blade server chassis. Each device type is designated as one of the following:
|
||||||
|
|
||||||
|
* A parent device (which has device bays)
|
||||||
|
* A child device (which must be installed in a device bay)
|
||||||
|
* Neither
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
This parent/child relationship is **not** suitable for modeling chassis-based devices, wherein child members share a common control plane.
|
||||||
|
|
||||||
|
For that application you should create a single Device for the chassis, and add Interfaces directly to it. Interfaces can be created in bulk using range patterns, e.g. "Gi1/[1-24]".
|
||||||
|
|
||||||
|
Add Inventory Items if you want to record the line cards themselves as separate entities. There is no explicit relationship between each interface and its line card, but it may be implied by the naming (e.g. interfaces "Gi1/x" are on line card 1)
|
5
docs/models/dcim/frontport.md
Normal file
5
docs/models/dcim/frontport.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
## Front Ports
|
||||||
|
|
||||||
|
Front ports are pass-through ports used to represent physical cable connections that comprise part of a longer path. For example, the ports on the front face of a UTP patch panel would be modeled in NetBox as front ports.
|
||||||
|
|
||||||
|
Each front port is mapped to a specific rear port on the same device. A single rear port may be mapped to multiple rear ports.
|
3
docs/models/dcim/frontporttemplate.md
Normal file
3
docs/models/dcim/frontporttemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Front Port Templates
|
||||||
|
|
||||||
|
A template for a front-facing pass-through port that will be created on all instantiations of the parent device type.
|
9
docs/models/dcim/interface.md
Normal file
9
docs/models/dcim/interface.md
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
## Interfaces
|
||||||
|
|
||||||
|
Interfaces connect to one another in a symmetric manner: If interface A connects to interface B, interface B therefore connects to interface A. Each type of connection can be classified as either *planned* or *connected*.
|
||||||
|
|
||||||
|
Each interface is a assigned a type denoting its physical properties. Two special types exist: the "virtual" type can be used to designate logical interfaces (such as SVIs), and the "LAG" type can be used to desinate link aggregation groups to which physical interfaces can be assigned.
|
||||||
|
|
||||||
|
Each interface can also be enabled or disabled, and optionally designated as management-only (for out-of-band management). Fields are also provided to store an interface's MTU and MAC address.
|
||||||
|
|
||||||
|
VLANs can be assigned to each interface as either tagged or untagged. (An interface may have only one untagged VLAN.)
|
3
docs/models/dcim/interfacetemplate.md
Normal file
3
docs/models/dcim/interfacetemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Interface Templates
|
||||||
|
|
||||||
|
A template for an interface that will be created on all instantiations of the parent device type.
|
3
docs/models/dcim/inventoryitem.md
Normal file
3
docs/models/dcim/inventoryitem.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Inventory Items
|
||||||
|
|
||||||
|
Inventory items represent hardware components installed within a device, such as a power supply or CPU or line card. Currently, these are used merely for inventory tracking, although future development might see their functionality expand. Like device types, each item can optionally be assigned a manufacturer.
|
3
docs/models/dcim/manufacturer.md
Normal file
3
docs/models/dcim/manufacturer.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Manufacturers
|
||||||
|
|
||||||
|
Each device type must be assigned to a manufacturer. The model number of a device type must be unique to its manufacturer.
|
7
docs/models/dcim/platform.md
Normal file
7
docs/models/dcim/platform.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Platforms
|
||||||
|
|
||||||
|
A platform defines the type of software running on a device or virtual machine. This can be helpful when it is necessary to distinguish between, for instance, different feature sets. Note that two devices of the same type may be assigned different platforms: for example, one Juniper MX240 running Junos 14 and another running Junos 15.
|
||||||
|
|
||||||
|
The platform model is also used to indicate which [NAPALM](https://napalm-automation.net/) driver NetBox should use when connecting to a remote device. The name of the driver along with optional parameters are stored with the platform.
|
||||||
|
|
||||||
|
The assignment of platforms to devices is an optional feature, and may be disregarded if not desired.
|
8
docs/models/dcim/powerfeed.md
Normal file
8
docs/models/dcim/powerfeed.md
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# Power Feed
|
||||||
|
|
||||||
|
A power feed identifies the power outlet/drop that goes to a rack and is terminated to a power panel. Power feeds have a supply type (AC/DC), voltage, amperage, and phase type (single/three).
|
||||||
|
|
||||||
|
Power feeds are optionally assigned to a rack. In addition, a power port – and only one – can connect to a power feed; in the context of a PDU, the power feed is analogous to the power outlet that a PDU's power port/inlet connects to.
|
||||||
|
|
||||||
|
!!! info
|
||||||
|
The power usage of a rack is calculated when a power feed (or multiple) is assigned to that rack and connected to a power port.
|
3
docs/models/dcim/poweroutlet.md
Normal file
3
docs/models/dcim/poweroutlet.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Power Outlets
|
||||||
|
|
||||||
|
Power outlets represent the ports on a PDU that supply power to other devices. Power outlets are downstream-facing towards power ports. A power outlet can be associated with a power port on the same device and a feed leg (i.e. in a case of a three-phase supply). This indicates which power port supplies power to a power outlet.
|
3
docs/models/dcim/poweroutlettemplate.md
Normal file
3
docs/models/dcim/poweroutlettemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Power Outlet Templates
|
||||||
|
|
||||||
|
A template for a power outlet that will be created on all instantiations of the parent device type.
|
3
docs/models/dcim/powerpanel.md
Normal file
3
docs/models/dcim/powerpanel.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Power Panel
|
||||||
|
|
||||||
|
A power panel represents the distribution board where power circuits – and their circuit breakers – terminate on. If you have multiple power panels in your data center, you should model them as such in NetBox to assist you in determining the redundancy of your power allocation.
|
6
docs/models/dcim/powerport.md
Normal file
6
docs/models/dcim/powerport.md
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
## Power Ports
|
||||||
|
|
||||||
|
A power port is the inlet of a device where it draws its power. Power ports are upstream-facing towards power outlets. Alternatively, a power port can connect to a power feed – as mentioned in the power feed section – to indicate the power source of a PDU's inlet.
|
||||||
|
|
||||||
|
!!! info
|
||||||
|
If the draw of a power port is left empty, it will be dynamically calculated based on the power outlets associated with that power port. This is usually the case on the power ports of devices that supply power, like a PDU.
|
3
docs/models/dcim/powerporttemplate.md
Normal file
3
docs/models/dcim/powerporttemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Power Port Templates
|
||||||
|
|
||||||
|
A template for a power port that will be created on all instantiations of the parent device type.
|
15
docs/models/dcim/rack.md
Normal file
15
docs/models/dcim/rack.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Racks
|
||||||
|
|
||||||
|
The rack model represents a physical two- or four-post equipment rack in which equipment is mounted. Each rack must be assigned to a site. Rack height is measured in *rack units* (U); racks are commonly between 42U and 48U tall, but NetBox allows you to define racks of arbitrary height. A toggle is provided to indicate whether rack units are in ascending or descending order.
|
||||||
|
|
||||||
|
Each rack is assigned a name and (optionally) a separate facility ID. This is helpful when leasing space in a data center your organization does not own: The facility will often assign a seemingly arbitrary ID to a rack (for example, "M204.313") whereas internally you refer to is simply as "R113." A unique serial number may also be associated with each rack.
|
||||||
|
|
||||||
|
A rack must be designated as one of the following types:
|
||||||
|
|
||||||
|
* 2-post frame
|
||||||
|
* 4-post frame
|
||||||
|
* 4-post cabinet
|
||||||
|
* Wall-mounted frame
|
||||||
|
* Wall-mounted cabinet
|
||||||
|
|
||||||
|
Each rack has two faces (front and rear) on which devices can be mounted. Rail-to-rail width may be 19 or 23 inches.
|
7
docs/models/dcim/rackgroup.md
Normal file
7
docs/models/dcim/rackgroup.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Rack Groups
|
||||||
|
|
||||||
|
Racks can be arranged into groups. As with sites, how you choose to designate rack groups will depend on the nature of your organization. For example, if each site represents a campus, each group might represent a building within a campus. If each site represents a building, each rack group might equate to a floor or room.
|
||||||
|
|
||||||
|
Each rack group must be assigned to a parent site. Hierarchical recursion of rack groups is not currently supported.
|
||||||
|
|
||||||
|
The name and facility ID of each rack within a group must be unique. (Racks not assigned to the same rack group may have identical names and/or facility IDs.)
|
3
docs/models/dcim/rackreservation.md
Normal file
3
docs/models/dcim/rackreservation.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Rack Reservations
|
||||||
|
|
||||||
|
Users can reserve units within a rack for future use. Multiple non-contiguous rack units can be associated with a single reservation (but reservations cannot span multiple racks). A rack reservation may optionally designate a specific tenant.
|
3
docs/models/dcim/rackrole.md
Normal file
3
docs/models/dcim/rackrole.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Rack Roles
|
||||||
|
|
||||||
|
Each rack can optionally be assigned a functional role. For example, you might designate a rack for compute or storage resources, or to house colocated customer devices. Rack roles are fully customizable.
|
5
docs/models/dcim/rearport.md
Normal file
5
docs/models/dcim/rearport.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
## Rear Ports
|
||||||
|
|
||||||
|
Like front ports, rear ports are pass-through ports which represent the end of a particular cable segment in a path. Each rear port is defined with a number of positions: rear ports with more than one position can be mapped to multiple front ports. This can be useful for modeling instances where multiple paths share a common cable (for example, six different fiber connections sharing a 12-strand MPO cable).
|
||||||
|
|
||||||
|
Note that front and rear ports need not necessarily reside on the actual front or rear device face. This terminology is used primarily to distinguish between the two components in a pass-through port pairing.
|
3
docs/models/dcim/rearporttemplate.md
Normal file
3
docs/models/dcim/rearporttemplate.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
## Rear Port Templates
|
||||||
|
|
||||||
|
A template for a rear-facing pass-through port that will be created on all instantiations of the parent device type.
|
3
docs/models/dcim/region.md
Normal file
3
docs/models/dcim/region.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Regions
|
||||||
|
|
||||||
|
Sites can be arranged geographically using regions. A region might represent a continent, country, city, campus, or other area depending on your use case. Regions can be nested recursively to construct a hierarchy. For example, you might define several country regions, and within each of those several state or city regions to which sites are assigned.
|
13
docs/models/dcim/site.md
Normal file
13
docs/models/dcim/site.md
Normal file
@ -0,0 +1,13 @@
|
|||||||
|
# Sites
|
||||||
|
|
||||||
|
How you choose to use sites will depend on the nature of your organization, but typically a site will equate to a building or campus. For example, a chain of banks might create a site to represent each of its branches, a site for its corporate headquarters, and two additional sites for its presence in two colocation facilities.
|
||||||
|
|
||||||
|
Each site must be assigned one of the following operational statuses:
|
||||||
|
|
||||||
|
* Active
|
||||||
|
* Planned
|
||||||
|
* Retired
|
||||||
|
|
||||||
|
The site model provides a facility ID field which can be used to annotate a facility ID (such as a datacenter name) associated with the site. Each site may also have an autonomous system (AS) number and time zone associated with it. (Time zones are provided by the [pytz](https://pypi.org/project/pytz/) package.)
|
||||||
|
|
||||||
|
The site model also includes several fields for storing contact and address information.
|
5
docs/models/dcim/virtualchassis.md
Normal file
5
docs/models/dcim/virtualchassis.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Virtual Chassis
|
||||||
|
|
||||||
|
A virtual chassis represents a set of devices which share a single control plane: a stack of switches which are managed as a single device, for example. Each device in the virtual chassis is assigned a position and (optionally) a priority. Exactly one device is designated the virtual chassis master: This device will typically be assigned a name, secrets, services, and other attributes related to its management.
|
||||||
|
|
||||||
|
It's important to recognize the distinction between a virtual chassis and a chassis-based device. For instance, a virtual chassis is not used to model a chassis switch with removable line cards such as the Juniper EX9208, as its line cards are _not_ physically separate devices capable of operating independently.
|
5
docs/models/extras/configcontext.md
Normal file
5
docs/models/extras/configcontext.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Configuration Contexts
|
||||||
|
|
||||||
|
Sometimes it is desirable to associate arbitrary data with a group of devices to aid in their configuration. For example, you might want to associate a set of syslog servers for all devices at a particular site. Context data enables the association of arbitrary data to devices and virtual machines grouped by region, site, role, platform, and/or tenant. Context data is arranged hierarchically, so that data with a higher weight can be entered to override more general lower-weight data. Multiple instances of data are automatically merged by NetBox to present a single dictionary for each object.
|
||||||
|
|
||||||
|
Devices and Virtual Machines may also have a local config context defined. This local context will always overwrite the rendered config context objects for the Device/VM. This is useful in situations were the device requires a one-off value different from the rest of the environment.
|
24
docs/models/extras/tag.md
Normal file
24
docs/models/extras/tag.md
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
# Tags
|
||||||
|
|
||||||
|
Tags are free-form text labels which can be applied to a variety of objects within NetBox. Tags are created on-demand as they are assigned to objects. Use commas to separate tags when adding multiple tags to an object (for example: `Inventoried, Monitored`). Use double quotes around a multi-word tag when adding only one tag, e.g. `"Core Switch"`.
|
||||||
|
|
||||||
|
Each tag has a label and a URL-friendly slug. For example, the slug for a tag named "Dunder Mifflin, Inc." would be `dunder-mifflin-inc`. The slug is generated automatically and makes tags easier to work with as URL parameters.
|
||||||
|
|
||||||
|
Objects can be filtered by the tags they have applied. For example, the following API request will retrieve all devices tagged as "monitored":
|
||||||
|
|
||||||
|
```
|
||||||
|
GET /api/dcim/devices/?tag=monitored
|
||||||
|
```
|
||||||
|
|
||||||
|
Tags are included in the API representation of an object as a list of plain strings:
|
||||||
|
|
||||||
|
```
|
||||||
|
{
|
||||||
|
...
|
||||||
|
"tags": [
|
||||||
|
"Core Switch",
|
||||||
|
"Monitored"
|
||||||
|
],
|
||||||
|
...
|
||||||
|
}
|
||||||
|
```
|
15
docs/models/ipam/aggregate.md
Normal file
15
docs/models/ipam/aggregate.md
Normal file
@ -0,0 +1,15 @@
|
|||||||
|
# Aggregates
|
||||||
|
|
||||||
|
The first step to documenting your IP space is to define its scope by creating aggregates. Aggregates establish the root of your IP address hierarchy by defining the top-level allocations that you're interested in managing. Most organizations will want to track some commonly-used private IP spaces, such as:
|
||||||
|
|
||||||
|
* 10.0.0.0/8 (RFC 1918)
|
||||||
|
* 100.64.0.0/10 (RFC 6598)
|
||||||
|
* 172.16.0.0/12 (RFC 1918)
|
||||||
|
* 192.168.0.0/16 (RFC 1918)
|
||||||
|
* One or more /48s within fd00::/8 (IPv6 unique local addressing)
|
||||||
|
|
||||||
|
In addition to one or more of these, you'll want to create an aggregate for each globally-routable space your organization has been allocated. These aggregates should match the allocations recorded in public WHOIS databases.
|
||||||
|
|
||||||
|
Each IP prefix will be automatically arranged under its parent aggregate if one exists. Note that it's advised to create aggregates only for IP ranges actually allocated to your organization (or marked for private use): There is no need to define aggregates for provider-assigned space which is only used on Internet circuits, for example.
|
||||||
|
|
||||||
|
Aggregates cannot overlap with one another: They can only exist side-by-side. For instance, you cannot define both 10.0.0.0/8 and 10.16.0.0/16 as aggregates, because they overlap. 10.16.0.0/16 in this example would be created as a prefix and automatically grouped under 10.0.0.0/8. Remember, the purpose of aggregates is to establish the root of your IP addressing hierarchy.
|
31
docs/models/ipam/ipaddress.md
Normal file
31
docs/models/ipam/ipaddress.md
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
# IP Addresses
|
||||||
|
|
||||||
|
An IP address comprises a single host address (either IPv4 or IPv6) and its subnet mask. Its mask should match exactly how the IP address is configured on an interface in the real world.
|
||||||
|
|
||||||
|
Like prefixes, an IP address can optionally be assigned to a VRF (otherwise, it will appear in the "global" table). IP addresses are automatically organized under parent prefixes within their respective VRFs.
|
||||||
|
|
||||||
|
Also like prefixes, each IP address can be assigned a status and a role. Statuses are hard-coded in NetBox and include the following:
|
||||||
|
|
||||||
|
* Active
|
||||||
|
* Reserved
|
||||||
|
* Deprecated
|
||||||
|
* DHCP
|
||||||
|
|
||||||
|
Each IP address can optionally be assigned a special role. Roles are used to indicate some special attribute of an IP address: for example, it is used as a loopback, or is a virtual IP maintained using VRRP. (Note that this differs in purpose from a _functional_ role, and thus cannot be customized.) Available roles include:
|
||||||
|
|
||||||
|
* Loopback
|
||||||
|
* Secondary
|
||||||
|
* Anycast
|
||||||
|
* VIP
|
||||||
|
* VRRP
|
||||||
|
* HSRP
|
||||||
|
* GLBP
|
||||||
|
|
||||||
|
An IP address can be assigned to a device or virtual machine interface, and an interface may have multiple IP addresses assigned to it. Further, each device and virtual machine may have one of its interface IPs designated as its primary IP address (one for IPv4 and one for IPv6).
|
||||||
|
|
||||||
|
## Network Address Translation (NAT)
|
||||||
|
|
||||||
|
An IP address can be designated as the network address translation (NAT) inside IP address for exactly one other IP address. This is useful primarily to denote a translation between public and private IP addresses. This relationship is followed in both directions: For example, if 10.0.0.1 is assigned as the inside IP for 192.0.2.1, 192.0.2.1 will be displayed as the outside IP for 10.0.0.1.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
NetBox does not support tracking one-to-many NAT relationships (also called port address translation). This type of policy requires additional logic to model and cannot be fully represented by IP address alone.
|
18
docs/models/ipam/prefix.md
Normal file
18
docs/models/ipam/prefix.md
Normal file
@ -0,0 +1,18 @@
|
|||||||
|
# Prefixes
|
||||||
|
|
||||||
|
A prefix is an IPv4 or IPv6 network and mask expressed in CIDR notation (e.g. 192.0.2.0/24). A prefix entails only the "network portion" of an IP address: All bits in the address not covered by the mask must be zero. (In other words, a prefix cannot be a specific IP address.)
|
||||||
|
|
||||||
|
Prefixes are automatically arranged by their parent aggregates. Additionally, each prefix can be assigned to a particular site and VRF (routing table). All prefixes not assigned to a VRF will appear in the "global" table.
|
||||||
|
|
||||||
|
Each prefix can be assigned a status and a role. These terms are often used interchangeably so it's important to recognize the difference between them. The **status** defines a prefix's operational state. Statuses are hard-coded in NetBox and can be one of the following:
|
||||||
|
|
||||||
|
* Container - A summary of child prefixes
|
||||||
|
* Active - Provisioned and in use
|
||||||
|
* Reserved - Designated for future use
|
||||||
|
* Deprecated - No longer in use
|
||||||
|
|
||||||
|
On the other hand, a prefix's **role** defines its function. Role assignment is optional and roles are fully customizable. For example, you might create roles to differentiate between production and development infrastructure.
|
||||||
|
|
||||||
|
A prefix may also be assigned to a VLAN. This association is helpful for identifying which prefixes are included when reviewing a list of VLANs.
|
||||||
|
|
||||||
|
The prefix model include a "pool" flag. If enabled, NetBox will treat this prefix as a range (such as a NAT pool) wherein every IP address is valid and assignable. This logic is used for identifying available IP addresses within a prefix. If this flag is disabled, NetBox will assume that the first and last (broadcast) address within the prefix are unusable.
|
7
docs/models/ipam/rir.md
Normal file
7
docs/models/ipam/rir.md
Normal file
@ -0,0 +1,7 @@
|
|||||||
|
# Regional Internet Registries (RIRs)
|
||||||
|
|
||||||
|
[Regional Internet registries](https://en.wikipedia.org/wiki/Regional_Internet_registry) are responsible for the allocation of globally-routable address space. The five RIRs are ARIN, RIPE, APNIC, LACNIC, and AFRINIC. However, some address space has been set aside for internal use, such as defined in RFCs 1918 and 6598. NetBox considers these RFCs as a sort of RIR as well; that is, an authority which "owns" certain address space. There also exist lower-tier registries which serve a particular geographic area.
|
||||||
|
|
||||||
|
Each aggregate must be assigned to one RIR. You are free to define whichever RIRs you choose (or create your own). The RIR model includes a boolean flag which indicates whether the RIR allocates only private IP space.
|
||||||
|
|
||||||
|
For example, suppose your organization has been allocated 104.131.0.0/16 by ARIN. It also makes use of RFC 1918 addressing internally. You would first create RIRs named ARIN and RFC 1918, then create an aggregate for each of these top-level prefixes, assigning it to its respective RIR.
|
3
docs/models/ipam/role.md
Normal file
3
docs/models/ipam/role.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Prefix/VLAN Roles
|
||||||
|
|
||||||
|
A role indicates the function of a prefix or VLAN. For example, you might define Data, Voice, and Security roles. Generally, a prefix will be assigned the same functional role as the VLAN to which it is assigned (if any).
|
5
docs/models/ipam/service.md
Normal file
5
docs/models/ipam/service.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Services
|
||||||
|
|
||||||
|
A service represents a layer four TCP or UDP service available on a device or virtual machine. For example, you might want to document that an HTTP service is running on a device. Each service includes a name, protocol, and port number; for example, "SSH (TCP/22)" or "DNS (UDP/53)."
|
||||||
|
|
||||||
|
A service may optionally be bound to one or more specific IP addresses belonging to its parent device or VM. (If no IP addresses are bound, the service is assumed to be reachable via any assigned IP address.)
|
11
docs/models/ipam/vlan.md
Normal file
11
docs/models/ipam/vlan.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# VLANs
|
||||||
|
|
||||||
|
A VLAN represents an isolated layer two domain, identified by a name and a numeric ID (1-4094) as defined in [IEEE 802.1Q](https://en.wikipedia.org/wiki/IEEE_802.1Q). Each VLAN may be assigned to a site and/or VLAN group.
|
||||||
|
|
||||||
|
Each VLAN must be assigned one of the following operational statuses:
|
||||||
|
|
||||||
|
* Active
|
||||||
|
* Reserved
|
||||||
|
* Deprecated
|
||||||
|
|
||||||
|
Each VLAN may also be assigned a functional role. Prefixes and VLANs share the same set of customizable roles.
|
3
docs/models/ipam/vlangroup.md
Normal file
3
docs/models/ipam/vlangroup.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# VLAN Groups
|
||||||
|
|
||||||
|
VLAN groups can be used to organize VLANs within NetBox. Groups can also be used to enforce uniqueness: Each VLAN within a group must have a unique ID and name. VLANs which are not assigned to a group may have overlapping names and IDs (including VLANs which belong to a common site). For example, you can create two VLANs with ID 123, but they cannot both be assigned to the same group.
|
12
docs/models/ipam/vrf.md
Normal file
12
docs/models/ipam/vrf.md
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
# Virtual Routing and Forwarding (VRF)
|
||||||
|
|
||||||
|
A VRF object in NetBox represents a virtual routing and forwarding (VRF) domain. Each VRF is essentially a separate routing table. VRFs are commonly used to isolate customers or organizations from one another within a network, or to route overlapping address space (e.g. multiple instances of the 10.0.0.0/8 space).
|
||||||
|
|
||||||
|
Each VRF is assigned a unique name and an optional route distinguisher (RD). The RD is expected to take one of the forms prescribed in [RFC 4364](https://tools.ietf.org/html/rfc4364#section-4.2), however its formatting is not strictly enforced.
|
||||||
|
|
||||||
|
Each prefix and IP address may be assigned to one (and only one) VRF. If you have a prefix or IP address which exists in multiple VRFs, you will need to create a separate instance of it in NetBox for each VRF. Any IP prefix or address not assigned to a VRF is said to belong to the "global" table.
|
||||||
|
|
||||||
|
By default, NetBox will allow duplicate prefixes to be assigned to a VRF. This behavior can be disabled by setting the "enforce unique" flag on the VRF model.
|
||||||
|
|
||||||
|
!!! note
|
||||||
|
Enforcement of unique IP space can be toggled for global table (non-VRF prefixes) using the `ENFORCE_GLOBAL_UNIQUE` configuration setting.
|
5
docs/models/secrets/secret.md
Normal file
5
docs/models/secrets/secret.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Secrets
|
||||||
|
|
||||||
|
A secret represents a single credential or other sensitive string of characters which must be stored securely. Each secret is assigned to a device within NetBox. The plaintext value of a secret is encrypted to a ciphertext immediately prior to storage within the database using a 256-bit AES master key. A SHA256 hash of the plaintext is also stored along with each ciphertext to validate the decrypted plaintext.
|
||||||
|
|
||||||
|
Each secret can also store an optional name parameter, which is not encrypted. This may be useful for storing user names.
|
11
docs/models/secrets/secretrole.md
Normal file
11
docs/models/secrets/secretrole.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Secret Roles
|
||||||
|
|
||||||
|
Each secret is assigned a functional role which indicates what it is used for. Secret roles are customizable. Typical roles might include:
|
||||||
|
|
||||||
|
* Login credentials
|
||||||
|
* SNMP community strings
|
||||||
|
* RADIUS/TACACS+ keys
|
||||||
|
* IKE key strings
|
||||||
|
* Routing protocol shared secrets
|
||||||
|
|
||||||
|
Roles are also used to control access to secrets. Each role is assigned an arbitrary number of groups and/or users. Only the users associated with a role have permission to decrypt the secrets assigned to that role. (A superuser has permission to decrypt all secrets, provided they have an active user key.)
|
35
docs/models/secrets/userkey.md
Normal file
35
docs/models/secrets/userkey.md
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
# User Keys
|
||||||
|
|
||||||
|
Each user within NetBox can associate his or her account with an RSA public key. If activated by an administrator, this user key will contain a unique, encrypted copy of the AES master key needed to retrieve secret data.
|
||||||
|
|
||||||
|
User keys may be created by users individually, however they are of no use until they have been activated by a user who already possesses an active user key.
|
||||||
|
|
||||||
|
## Supported Key Format
|
||||||
|
|
||||||
|
Public key formats supported
|
||||||
|
|
||||||
|
- PKCS#1 RSAPublicKey* (PEM header: BEGIN RSA PUBLIC KEY)
|
||||||
|
- X.509 SubjectPublicKeyInfo** (PEM header: BEGIN PUBLIC KEY)
|
||||||
|
- **OpenSSH line format is not supported.**
|
||||||
|
|
||||||
|
Private key formats supported (unencrypted)
|
||||||
|
|
||||||
|
- PKCS#1 RSAPrivateKey** (PEM header: BEGIN RSA PRIVATE KEY)
|
||||||
|
- PKCS#8 PrivateKeyInfo* (PEM header: BEGIN PRIVATE KEY)
|
||||||
|
|
||||||
|
|
||||||
|
## Creating the First User Key
|
||||||
|
|
||||||
|
When NetBox is first installed, it contains no encryption keys. Before it can store secrets, a user (typically the superuser) must create a user key. This can be done by navigating to Profile > User Key.
|
||||||
|
|
||||||
|
To create a user key, you can either generate a new RSA key pair, or upload the public key belonging to a pair you already have. If generating a new key pair, **you must save the private key** locally before saving your new user key. Once your user key has been created, its public key will be displayed under your profile.
|
||||||
|
|
||||||
|
When the first user key is created in NetBox, a random master encryption key is generated automatically. This key is then encrypted using the public key provided and stored as part of your user key. **The master key cannot be recovered** without your private key.
|
||||||
|
|
||||||
|
Once a user key has been assigned an encrypted copy of the master key, it is considered activated and can now be used to encrypt and decrypt secrets.
|
||||||
|
|
||||||
|
## Creating Additional User Keys
|
||||||
|
|
||||||
|
Any user can create his or her user key by generating or uploading a public RSA key. However, a user key cannot be used to encrypt or decrypt secrets until it has been activated with an encrypted copy of the master key.
|
||||||
|
|
||||||
|
Only an administrator with an active user key can activate other user keys. To do so, access the NetBox admin UI and navigate to Secrets > User Keys. Select the user key(s) to be activated, and select "activate selected user keys" from the actions dropdown. You will need to provide your private key in order to decrypt the master key. A copy of the master key is then encrypted using the public key associated with the user key being activated.
|
16
docs/models/tenancy/tenant.md
Normal file
16
docs/models/tenancy/tenant.md
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
# Tenants
|
||||||
|
|
||||||
|
A tenant represents a discrete entity for administrative purposes. Typically, tenants are used to represent individual customers or internal departments within an organization. The following objects can be assigned to tenants:
|
||||||
|
|
||||||
|
* Sites
|
||||||
|
* Racks
|
||||||
|
* Rack reservations
|
||||||
|
* Devices
|
||||||
|
* VRFs
|
||||||
|
* Prefixes
|
||||||
|
* IP addresses
|
||||||
|
* VLANs
|
||||||
|
* Circuits
|
||||||
|
* Virtual machines
|
||||||
|
|
||||||
|
Tenant assignment is used to signify ownership of an object in NetBox. As such, each object may only be owned by a single tenant. For example, if you have a firewall dedicated to a particular customer, you would assign it to the tenant which represents that customer. However, if the firewall serves multiple customers, it doesn't *belong* to any particular customer, so tenant assignment would not be appropriate.
|
3
docs/models/tenancy/tenantgroup.md
Normal file
3
docs/models/tenancy/tenantgroup.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Tenant Groups
|
||||||
|
|
||||||
|
Tenants can be organized by custom groups. For instance, you might create one group called "Customers" and one called "Acquisitions." The assignment of tenants to groups is optional.
|
5
docs/models/virtualization/cluster.md
Normal file
5
docs/models/virtualization/cluster.md
Normal file
@ -0,0 +1,5 @@
|
|||||||
|
# Clusters
|
||||||
|
|
||||||
|
A cluster is a logical grouping of physical resources within which virtual machines run. A cluster must be assigned a type, and may optionally be assigned to a group and/or site.
|
||||||
|
|
||||||
|
Physical devices may be associated with clusters as hosts. This allows users to track on which host(s) a particular VM may reside. However, NetBox does not support pinning a specific VM within a cluster to a particular host device.
|
3
docs/models/virtualization/clustergroup.md
Normal file
3
docs/models/virtualization/clustergroup.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Cluster Groups
|
||||||
|
|
||||||
|
Cluster groups may be created for the purpose of organizing clusters. The assignment of clusters to groups is optional.
|
3
docs/models/virtualization/clustertype.md
Normal file
3
docs/models/virtualization/clustertype.md
Normal file
@ -0,0 +1,3 @@
|
|||||||
|
# Cluster Types
|
||||||
|
|
||||||
|
A cluster type represents a technology or mechanism by which a cluster is formed. For example, you might create a cluster type named "VMware vSphere" for a locally hosted cluster or "DigitalOcean NYC3" for one hosted by a cloud provider.
|
11
docs/models/virtualization/virtualmachine.md
Normal file
11
docs/models/virtualization/virtualmachine.md
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
# Virtual Machines
|
||||||
|
|
||||||
|
A virtual machine represents a virtual compute instance hosted within a cluster. Each VM must be associated with exactly one cluster.
|
||||||
|
|
||||||
|
Like devices, each VM can be assigned a platform and have interfaces created on it. VM interfaces behave similarly to device interfaces, and can be assigned IP addresses, VLANs, and services. However, given their virtual nature, they cannot be connected to other interfaces. Unlike physical devices, VMs cannot be assigned console or power ports, device bays, or inventory items.
|
||||||
|
|
||||||
|
The following resources can be defined for each VM:
|
||||||
|
|
||||||
|
* vCPU count
|
||||||
|
* Memory (MB)
|
||||||
|
* Disk space (GB)
|
@ -1,22 +0,0 @@
|
|||||||
# v1.0.7-r1 (2016-07-05)
|
|
||||||
|
|
||||||
* [#199](https://github.com/netbox-community/netbox/issues/199) - Correct IP address validation
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.0.7 (2016-06-30)
|
|
||||||
|
|
||||||
**Note:** If upgrading from a previous release, be sure to run ./upgrade.sh after downloading the new code.
|
|
||||||
* [#135](https://github.com/netbox-community/netbox/issues/135) - Fixed display of navigation menu on mobile screens
|
|
||||||
* [#141](https://github.com/netbox-community/netbox/issues/141) - Fixed rendering of "getting started" guide
|
|
||||||
* Modified upgrade.sh to use sudo for pip installations
|
|
||||||
* [#109](https://github.com/netbox-community/netbox/issues/109) - Hide the navigation menu from anonymous users if login is required
|
|
||||||
* [#143](https://github.com/netbox-community/netbox/issues/143) - Add help_text to Device.position
|
|
||||||
* [#136](https://github.com/netbox-community/netbox/issues/136) - Prefixes which have host bits set will trigger an error instead of being silently corrected
|
|
||||||
* [#140](https://github.com/netbox-community/netbox/issues/140) - Improved support for Unicode in object names
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.0.0 (2016-06-27)
|
|
||||||
|
|
||||||
NetBox was originally developed internally at DigitalOcean by the network development team. This release marks the debut of NetBox as an open source project.
|
|
@ -1,15 +0,0 @@
|
|||||||
# v1.1.0 (2016-07-07)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
* [#107](https://github.com/netbox-community/netbox/pull/107) - Docker support
|
|
||||||
* [#91](https://github.com/netbox-community/netbox/issues/91) - Support for subdevices within a device
|
|
||||||
* [#170](https://github.com/netbox-community/netbox/pull/170) - Added MAC address field to interfaces
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#169](https://github.com/netbox-community/netbox/issues/169) - Fix rendering of cancellation URL when editing objects
|
|
||||||
* [#183](https://github.com/netbox-community/netbox/issues/183) - Ignore vi swap files
|
|
||||||
* [#209](https://github.com/netbox-community/netbox/issues/209) - Corrected error when not confirming component template deletions
|
|
||||||
* [#214](https://github.com/netbox-community/netbox/issues/214) - Fixed redundant message on bulk interface creation
|
|
||||||
* [#68](https://github.com/netbox-community/netbox/issues/68) - Improved permissions-related error reporting for secrets
|
|
@ -1,48 +0,0 @@
|
|||||||
# v1.2.2 (2016-07-14)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#174](https://github.com/netbox-community/netbox/issues/174) - Added search and site filter to provider list
|
|
||||||
* [#270](https://github.com/netbox-community/netbox/issues/270) - Added the ability to filter devices by rack group
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#115](https://github.com/netbox-community/netbox/issues/115) - Fix deprecated django.core.context_processors reference
|
|
||||||
* [#268](https://github.com/netbox-community/netbox/issues/268) - Added support for entire 32-bit ASN space
|
|
||||||
* [#282](https://github.com/netbox-community/netbox/issues/282) - De-select "all" checkbox if one or more objects are deselected
|
|
||||||
* [#290](https://github.com/netbox-community/netbox/issues/290) - Always display management interfaces for a device type (even if `is_network_device` is not set)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.2.1 (2016-07-13)
|
|
||||||
|
|
||||||
**Note:** This release introduces a new dependency ([natsort](https://pypi.python.org/pypi/natsort)). Be sure to run `upgrade.sh` if upgrading from a previous release.
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#285](https://github.com/netbox-community/netbox/issues/285) - Added the ability to prefer IPv4 over IPv6 for primary device IPs
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#243](https://github.com/netbox-community/netbox/issues/243) - Improved ordering of device object lists
|
|
||||||
* [#271](https://github.com/netbox-community/netbox/issues/271) - Fixed primary_ip bug in secrets API
|
|
||||||
* [#274](https://github.com/netbox-community/netbox/issues/274) - Fixed primary_ip bug in DCIM admin UI
|
|
||||||
* [#275](https://github.com/netbox-community/netbox/issues/275) - Fixed bug preventing the expansion of an existing aggregate
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.2.0 (2016-07-12)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
* [#73](https://github.com/netbox-community/netbox/issues/73) - Added optional persistent banner
|
|
||||||
* [#93](https://github.com/netbox-community/netbox/issues/73) - Ability to set both IPv4 and IPv6 primary IPs for devices
|
|
||||||
* [#203](https://github.com/netbox-community/netbox/issues/203) - Introduced support for LDAP
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#162](https://github.com/netbox-community/netbox/issues/228) - Fixed support for Unicode characters in rack/device/VLAN names
|
|
||||||
* [#228](https://github.com/netbox-community/netbox/issues/228) - Corrected conditional inclusion of device bay templates
|
|
||||||
* [#246](https://github.com/netbox-community/netbox/issues/246) - Corrected Docker build instructions
|
|
||||||
* [#260](https://github.com/netbox-community/netbox/issues/260) - Fixed error on admin UI device type list
|
|
||||||
* Miscellaneous layout improvements for mobile devices
|
|
@ -1,54 +0,0 @@
|
|||||||
# v1.3.2 (2016-07-26)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#292](https://github.com/netbox-community/netbox/issues/292) - Added part_number field to DeviceType
|
|
||||||
* [#363](https://github.com/netbox-community/netbox/issues/363) - Added a description field to the VLAN model
|
|
||||||
* [#374](https://github.com/netbox-community/netbox/issues/374) - Increased VLAN name length to 64 characters
|
|
||||||
* Enabled bulk deletion of interfaces from devices
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#359](https://github.com/netbox-community/netbox/issues/359) - Corrected the DCIM API endpoint for finding related connections
|
|
||||||
* [#370](https://github.com/netbox-community/netbox/issues/370) - Notify user when secret decryption fails
|
|
||||||
* [#381](https://github.com/netbox-community/netbox/issues/381) - Fix 'u_consumed' error on rack import
|
|
||||||
* [#384](https://github.com/netbox-community/netbox/issues/384) - Fixed description field's maximum length on IPAM bulk edit forms
|
|
||||||
* [#385](https://github.com/netbox-community/netbox/issues/385) - Fixed error when deleting a user with one or more associated UserActions
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.3.1 (2016-07-21)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#258](https://github.com/netbox-community/netbox/issues/258) - Add an API endpoint to list interface connections
|
|
||||||
* [#303](https://github.com/netbox-community/netbox/issues/303) - Improved numeric ordering of sites, racks, and devices
|
|
||||||
* [#304](https://github.com/netbox-community/netbox/issues/304) - Display utilization percentage on rack list
|
|
||||||
* [#327](https://github.com/netbox-community/netbox/issues/327) - Disable rack assignment for installed child devices
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#331](https://github.com/netbox-community/netbox/issues/331) - Add group field to VLAN bulk edit form
|
|
||||||
* Miscellaneous improvements to Unicode handling
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.3.0 (2016-07-18)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
* [#42](https://github.com/netbox-community/netbox/issues/42) - Allow assignment of VLAN on prefix import
|
|
||||||
* [#43](https://github.com/netbox-community/netbox/issues/43) - Toggling of IP space uniqueness within a VRF
|
|
||||||
* [#111](https://github.com/netbox-community/netbox/issues/111) - Introduces VLAN groups
|
|
||||||
* [#227](https://github.com/netbox-community/netbox/issues/227) - Support for bulk import of child devices
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#301](https://github.com/netbox-community/netbox/issues/301) - Prevent deletion of DeviceBay when installed device is deleted
|
|
||||||
* [#306](https://github.com/netbox-community/netbox/issues/306) - Fixed device import to allow an unspecified rack face
|
|
||||||
* [#307](https://github.com/netbox-community/netbox/issues/307) - Catch `RelatedObjectDoesNotExist` when an invalid device type is defined during device import
|
|
||||||
* [#308](https://github.com/netbox-community/netbox/issues/308) - Update rack assignment for all child devices when moving a parent device
|
|
||||||
* [#311](https://github.com/netbox-community/netbox/issues/311) - Fix assignment of primary_ip on IP address import
|
|
||||||
* [#317](https://github.com/netbox-community/netbox/issues/317) - Rack elevation display fix for device types greater than 42U in height
|
|
||||||
* [#320](https://github.com/netbox-community/netbox/issues/320) - Disallow import of prefixes with host masks
|
|
||||||
* [#322](https://github.com/netbox-community/netbox/issues/320) - Corrected VLAN import behavior
|
|
@ -1,54 +0,0 @@
|
|||||||
# v1.4.2 (2016-08-06)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#167](https://github.com/netbox-community/netbox/issues/167) - Added new interface form factors
|
|
||||||
* [#253](https://github.com/netbox-community/netbox/issues/253) - Added new interface form factors
|
|
||||||
* [#434](https://github.com/netbox-community/netbox/issues/434) - Restored admin UI access to user action history (however bulk deletion is disabled)
|
|
||||||
* [#435](https://github.com/netbox-community/netbox/issues/435) - Added an "add prefix" button to the VLAN view
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#425](https://github.com/netbox-community/netbox/issues/425) - Ignore leading and trailing periods when generating a slug
|
|
||||||
* [#427](https://github.com/netbox-community/netbox/issues/427) - Prevent error when duplicate IPs are present in a prefix's IP list
|
|
||||||
* [#429](https://github.com/netbox-community/netbox/issues/429) - Correct redirection of user when adding a secret to a device
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.4.1 (2016-08-03)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#289](https://github.com/netbox-community/netbox/issues/289) - Annotate available ranges in prefix IP list
|
|
||||||
* [#412](https://github.com/netbox-community/netbox/issues/412) - Tenant group assignment is no longer mandatory
|
|
||||||
* [#422](https://github.com/netbox-community/netbox/issues/422) - CSV import now supports double-quoting values which contain commas
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#395](https://github.com/netbox-community/netbox/issues/395) - Show child prefixes from all VRFs if the parent belongs to the global table
|
|
||||||
* [#406](https://github.com/netbox-community/netbox/issues/406) - Fixed circuit list rendring when filtering on port speed or commit rate
|
|
||||||
* [#409](https://github.com/netbox-community/netbox/issues/409) - Filter IPs and prefixes by tenant slug rather than by its PK
|
|
||||||
* [#411](https://github.com/netbox-community/netbox/issues/411) - Corrected title of secret roles view
|
|
||||||
* [#419](https://github.com/netbox-community/netbox/issues/419) - Fixed a potential database performance issue when gathering tenant statistics
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.4.0 (2016-08-01)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
### Multitenancy ([#16](https://github.com/netbox-community/netbox/issues/16))
|
|
||||||
|
|
||||||
NetBox now supports tenants and tenant groups. Sites, racks, devices, VRFs, prefixes, IP addresses, VLANs, and circuits can be assigned to tenants to track the allocation of these resources among customers or internal departments. If a prefix or IP address does not have a tenant assigned, it will fall back to the tenant assigned to its parent VRF (where applicable).
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#176](https://github.com/netbox-community/netbox/issues/176) - Introduced seed data for new installs
|
|
||||||
* [#358](https://github.com/netbox-community/netbox/issues/358) - Improved search for all objects
|
|
||||||
* [#394](https://github.com/netbox-community/netbox/issues/394) - Improved VRF selection during bulk editing of prefixes and IP addresses
|
|
||||||
* Miscellaneous cosmetic improvements to the UI
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#392](https://github.com/netbox-community/netbox/issues/392) - Don't include child devices in non-racked devices table
|
|
||||||
* [#397](https://github.com/netbox-community/netbox/issues/397) - Only include child IPs which belong to the same VRF as the parent prefix
|
|
@ -1,50 +0,0 @@
|
|||||||
# v1.5.2 (2016-08-16)
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#460](https://github.com/netbox-community/netbox/issues/460) - Corrected ordering of IP addresses with differing prefix lengths
|
|
||||||
* [#463](https://github.com/netbox-community/netbox/issues/463) - Prevent pre-population of livesearch field with '---------'
|
|
||||||
* [#467](https://github.com/netbox-community/netbox/issues/467) - Include prefixes and IPs which inherit tenancy from their VRF in tenant stats
|
|
||||||
* [#468](https://github.com/netbox-community/netbox/issues/468) - Don't allow connected interfaces to be changed to the "virtual" form factor
|
|
||||||
* [#469](https://github.com/netbox-community/netbox/issues/469) - Added missing import buttons to list views
|
|
||||||
* [#472](https://github.com/netbox-community/netbox/issues/472) - Hide the connection button for interfaces which have a circuit terminated to them
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.5.1 (2016-08-11)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#421](https://github.com/netbox-community/netbox/issues/421) - Added an asset tag field to devices
|
|
||||||
* [#456](https://github.com/netbox-community/netbox/issues/456) - Added IP search box to home page
|
|
||||||
* Colorized rack and device roles
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#454](https://github.com/netbox-community/netbox/issues/454) - Corrected error on rack export
|
|
||||||
* [#457](https://github.com/netbox-community/netbox/issues/457) - Added role field to rack edit form
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.5.0 (2016-08-10)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
### Rack Enhancements ([#180](https://github.com/netbox-community/netbox/issues/180), [#241](https://github.com/netbox-community/netbox/issues/241))
|
|
||||||
|
|
||||||
Like devices, racks can now be assigned to functional roles. This allows users to group racks by designated function as well as by physical location (rack groups). Additionally, rack can now have a defined rail-to-rail width (19 or 23 inches) and a type (two-post-rack, cabinet, etc.).
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#149](https://github.com/netbox-community/netbox/issues/149) - Added discrete upstream speed field for circuits
|
|
||||||
* [#157](https://github.com/netbox-community/netbox/issues/157) - Added manufacturer field for device modules
|
|
||||||
* We have a logo!
|
|
||||||
* Upgraded to Django 1.10
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#433](https://github.com/netbox-community/netbox/issues/433) - Corrected form validation when editing child devices
|
|
||||||
* [#442](https://github.com/netbox-community/netbox/issues/442) - Corrected child device import instructions
|
|
||||||
* [#443](https://github.com/netbox-community/netbox/issues/443) - Correctly display and initialize VRF for creation of new IP addresses
|
|
||||||
* [#444](https://github.com/netbox-community/netbox/issues/444) - Corrected prefix model validation
|
|
||||||
* [#445](https://github.com/netbox-community/netbox/issues/445) - Limit rack height to between 1U and 100U (inclusive)
|
|
@ -1,85 +0,0 @@
|
|||||||
# v1.6.3 (2016-10-19)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#353](https://github.com/netbox-community/netbox/issues/353) - Bulk editing of device and device type interfaces
|
|
||||||
* [#527](https://github.com/netbox-community/netbox/issues/527) - Support for nullification of fields when bulk editing
|
|
||||||
* [#592](https://github.com/netbox-community/netbox/issues/592) - Allow space-delimited lists of ALLOWED_HOSTS in Docker
|
|
||||||
* [#608](https://github.com/netbox-community/netbox/issues/608) - Added "select all" button for device and device type components
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#602](https://github.com/netbox-community/netbox/issues/602) - Correct display of custom integer fields with value of 0 or 1
|
|
||||||
* [#604](https://github.com/netbox-community/netbox/issues/604) - Correct display of unnamed devices in form selection fields
|
|
||||||
* [#611](https://github.com/netbox-community/netbox/issues/611) - Power/console/interface connection import: status field should be case-insensitive
|
|
||||||
* [#615](https://github.com/netbox-community/netbox/issues/615) - Account for BASE_PATH in static URLs and during login
|
|
||||||
* [#616](https://github.com/netbox-community/netbox/issues/616) - Correct display of custom URL fields
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.6.2-r1 (2016-10-04)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#212](https://github.com/netbox-community/netbox/issues/212) - Introduced the `BASE_PATH` configuration setting to allow running NetBox in a URL subdirectory
|
|
||||||
* [#345](https://github.com/netbox-community/netbox/issues/345) - Bulk edit: allow user to select all objects on page or all matching query
|
|
||||||
* [#475](https://github.com/netbox-community/netbox/issues/475) - Display "add" buttons at top and bottom of all device/device type panels
|
|
||||||
* [#480](https://github.com/netbox-community/netbox/issues/480) - Improved layout on mobile devices
|
|
||||||
* [#481](https://github.com/netbox-community/netbox/issues/481) - Require interface creation before trying to assign an IP to a device
|
|
||||||
* [#575](https://github.com/netbox-community/netbox/issues/575) - Allow all valid URL schemes in custom fields
|
|
||||||
* [#579](https://github.com/netbox-community/netbox/issues/579) - Add a description field to export templates
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#466](https://github.com/netbox-community/netbox/issues/466) - Validate available free space for all instances when increasing the U height of a device type
|
|
||||||
* [#571](https://github.com/netbox-community/netbox/issues/571) - Correct rack group filter on device list
|
|
||||||
* [#576](https://github.com/netbox-community/netbox/issues/576) - Delete all relevant CustomFieldValues when deleting a CustomFieldChoice
|
|
||||||
* [#581](https://github.com/netbox-community/netbox/issues/581) - Correct initialization of custom boolean and select fields
|
|
||||||
* [#591](https://github.com/netbox-community/netbox/issues/591) - Correct display of component creation buttons in device type view
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.6.1-r1 (2016-09-21)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
* [#415](https://github.com/netbox-community/netbox/issues/415) - Add an expand/collapse toggle button to the prefix list
|
|
||||||
* [#552](https://github.com/netbox-community/netbox/issues/552) - Allow filtering on custom select fields by "none"
|
|
||||||
* [#561](https://github.com/netbox-community/netbox/issues/561) - Make custom fields accessible from within export templates
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
* [#493](https://github.com/netbox-community/netbox/issues/493) - CSV import support for UTF-8
|
|
||||||
* [#531](https://github.com/netbox-community/netbox/issues/531) - Order prefix list by VRF assignment
|
|
||||||
* [#542](https://github.com/netbox-community/netbox/issues/542) - Add LDAP support in Docker
|
|
||||||
* [#557](https://github.com/netbox-community/netbox/issues/557) - Add 'global' choice to VRF filter for prefixes and IP addresses
|
|
||||||
* [#558](https://github.com/netbox-community/netbox/issues/558) - Update slug field when name is populated without a key press
|
|
||||||
* [#562](https://github.com/netbox-community/netbox/issues/562) - Fixed bulk interface creation
|
|
||||||
* [#564](https://github.com/netbox-community/netbox/issues/564) - Display custom fields for all applicable objects
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.6.0 (2016-09-13)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
### Custom Fields ([#129](https://github.com/netbox-community/netbox/issues/129))
|
|
||||||
|
|
||||||
Users can now create custom fields to associate arbitrary data with core NetBox objects. For example, you might want to add a geolocation tag to IP prefixes, or a ticket number to each device. Text, integer, boolean, date, URL, and selection fields are supported.
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#489](https://github.com/netbox-community/netbox/issues/489) - Docker file now builds from a `python:2.7-wheezy` base instead of `ubuntu:14.04`
|
|
||||||
* [#540](https://github.com/netbox-community/netbox/issues/540) - Add links for VLAN roles under VLAN navigation menu
|
|
||||||
* Added new interface form factors
|
|
||||||
* Added address family filters to aggregate and prefix lists
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#476](https://github.com/netbox-community/netbox/issues/476) - Corrected rack import instructions
|
|
||||||
* [#484](https://github.com/netbox-community/netbox/issues/484) - Allow bulk deletion of >1K objects
|
|
||||||
* [#486](https://github.com/netbox-community/netbox/issues/486) - Prompt for secret key only if updating a secret's value
|
|
||||||
* [#490](https://github.com/netbox-community/netbox/issues/490) - Corrected display of circuit commit rate
|
|
||||||
* [#495](https://github.com/netbox-community/netbox/issues/495) - Include tenant in prefix and IP CSV export
|
|
||||||
* [#507](https://github.com/netbox-community/netbox/issues/507) - Corrected rendering of nav menu on screens narrower than 1200px
|
|
||||||
* [#515](https://github.com/netbox-community/netbox/issues/515) - Clarified instructions for the "face" field when importing devices
|
|
||||||
* [#522](https://github.com/netbox-community/netbox/issues/522) - Remove obsolete check for staff status when bulk deleting objects
|
|
||||||
* [#544](https://github.com/netbox-community/netbox/issues/544) - Strip CRLF-style line terminators from rendered export templates
|
|
@ -1,75 +0,0 @@
|
|||||||
# v1.7.3 (2016-12-08)
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#724](https://github.com/netbox-community/netbox/issues/724) - Exempt API views from LoginRequiredMiddleware to enable basic HTTP authentication when LOGIN_REQUIRED is true
|
|
||||||
* [#729](https://github.com/netbox-community/netbox/issues/729) - Corrected cancellation links when editing secondary objects
|
|
||||||
* [#732](https://github.com/netbox-community/netbox/issues/732) - Allow custom select field values to be deselected if the field is not required
|
|
||||||
* [#733](https://github.com/netbox-community/netbox/issues/733) - Fixed MAC address filter on device list
|
|
||||||
* [#734](https://github.com/netbox-community/netbox/issues/734) - Corrected display of device type when editing a device
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.7.2-r1 (2016-12-06)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#663](https://github.com/netbox-community/netbox/issues/663) - Added MAC address search field to device list
|
|
||||||
* [#672](https://github.com/netbox-community/netbox/issues/672) - Increased the selection of available colors for rack and device roles
|
|
||||||
* [#695](https://github.com/netbox-community/netbox/issues/695) - Added is_private field to RIR
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#677](https://github.com/netbox-community/netbox/issues/677) - Fix setuptools installation error on Debian 8.6
|
|
||||||
* [#696](https://github.com/netbox-community/netbox/issues/696) - Corrected link to VRF in prefix and IP address breadcrumbs
|
|
||||||
* [#702](https://github.com/netbox-community/netbox/issues/702) - Improved Unicode support for custom fields
|
|
||||||
* [#712](https://github.com/netbox-community/netbox/issues/712) - Corrected export of tenants which are not assigned to a group
|
|
||||||
* [#713](https://github.com/netbox-community/netbox/issues/713) - Include a label for the comments field when editing circuits, providers, or racks in bulk
|
|
||||||
* [#718](https://github.com/netbox-community/netbox/issues/718) - Restore is_primary field on IP assignment form
|
|
||||||
* [#723](https://github.com/netbox-community/netbox/issues/723) - API documentation is now accessible when using BASE_PATH
|
|
||||||
* [#727](https://github.com/netbox-community/netbox/issues/727) - Corrected error in rack elevation display (v1.7.2)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.7.1 (2016-11-15)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#667](https://github.com/netbox-community/netbox/issues/667) - Added prefix utilization statistics to the RIR list view
|
|
||||||
* [#685](https://github.com/netbox-community/netbox/issues/685) - When assigning an IP to a device, automatically select the interface if only one exists
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#674](https://github.com/netbox-community/netbox/issues/674) - Fix assignment of status to imported IP addresses
|
|
||||||
* [#676](https://github.com/netbox-community/netbox/issues/676) - Server error when bulk editing device types
|
|
||||||
* [#678](https://github.com/netbox-community/netbox/issues/678) - Server error on device import specifying an invalid device type
|
|
||||||
* [#691](https://github.com/netbox-community/netbox/issues/691) - Allow the assignment of power ports to PDUs
|
|
||||||
* [#692](https://github.com/netbox-community/netbox/issues/692) - Form errors are not displayed on checkbox fields
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.7.0 (2016-11-03)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
### IP address statuses ([#87](https://github.com/netbox-community/netbox/issues/87))
|
|
||||||
|
|
||||||
An IP address can now be designated as active, reserved, or DHCP. The DHCP status implies that the IP address is part of a DHCP pool and may or may not be assigned to a DHCP client.
|
|
||||||
|
|
||||||
### Top-to-bottom rack numbering ([#191](https://github.com/netbox-community/netbox/issues/191))
|
|
||||||
|
|
||||||
Racks can now be set to have descending rack units, with U1 at the top of the rack. When adding a device to a rack with descending units, be sure to position it in the **lowest-numbered** unit which it occupies (this will be physically the topmost unit).
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
* [#211](https://github.com/netbox-community/netbox/issues/211) - Allow device assignment and removal from IP address view
|
|
||||||
* [#630](https://github.com/netbox-community/netbox/issues/630) - Added a custom 404 page
|
|
||||||
* [#652](https://github.com/netbox-community/netbox/issues/652) - Use password input controls when editing secrets
|
|
||||||
* [#654](https://github.com/netbox-community/netbox/issues/654) - Added Cisco FlexStack and FlexStack Plus form factors
|
|
||||||
* [#661](https://github.com/netbox-community/netbox/issues/661) - Display relevant IP addressing when viewing a circuit
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
* [#632](https://github.com/netbox-community/netbox/issues/632) - Use semicolons instead of commas to separate regexes in topology maps
|
|
||||||
* [#647](https://github.com/netbox-community/netbox/issues/647) - Extend form used when assigning an IP to a device
|
|
||||||
* [#657](https://github.com/netbox-community/netbox/issues/657) - Unicode error when adding device modules
|
|
||||||
* [#660](https://github.com/netbox-community/netbox/issues/660) - Corrected calculation of utilized space in rack list
|
|
||||||
* [#664](https://github.com/netbox-community/netbox/issues/664) - Fixed bulk creation of interfaces across multiple devices
|
|
@ -1,106 +0,0 @@
|
|||||||
# v1.8.4 (2017-02-03)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#856](https://github.com/netbox-community/netbox/issues/856) - Strip whitespace from fields during CSV import
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#851](https://github.com/netbox-community/netbox/issues/851) - Resolve encoding issues during import/export (Python 3)
|
|
||||||
* [#854](https://github.com/netbox-community/netbox/issues/854) - Correct processing of get_return_url() in ObjectDeleteView
|
|
||||||
* [#859](https://github.com/netbox-community/netbox/issues/859) - Fix Javascript for connection status toggle button on device view
|
|
||||||
* [#861](https://github.com/netbox-community/netbox/issues/861) - Avoid overwriting device primary IP assignment from alternate family during bulk import of IP addresses
|
|
||||||
* [#865](https://github.com/netbox-community/netbox/issues/865) - Fix server error when attempting to delete a protected object parent (Python 3)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.8.3 (2017-01-26)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#782](https://github.com/netbox-community/netbox/issues/782) - Allow filtering devices list by manufacturer
|
|
||||||
* [#820](https://github.com/netbox-community/netbox/issues/820) - Add VLAN column to parent prefixes table on IP address view
|
|
||||||
* [#821](https://github.com/netbox-community/netbox/issues/821) - Support for comma separation in bulk IP/interface creation
|
|
||||||
* [#827](https://github.com/netbox-community/netbox/issues/827) - **Introduced support for Python 3**
|
|
||||||
* [#836](https://github.com/netbox-community/netbox/issues/836) - Add "deprecated" status for IP addresses
|
|
||||||
* [#841](https://github.com/netbox-community/netbox/issues/841) - Merged search and filter forms on all object lists
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#816](https://github.com/netbox-community/netbox/issues/816) - Redirect back to parent prefix view after deleting child prefixes termination
|
|
||||||
* [#817](https://github.com/netbox-community/netbox/issues/817) - Update last_updated time of a circuit when editing a child termination
|
|
||||||
* [#830](https://github.com/netbox-community/netbox/issues/830) - Redirect user to device view after editing a device component
|
|
||||||
* [#840](https://github.com/netbox-community/netbox/issues/840) - Correct API path resolution for secrets when BASE_PATH is configured
|
|
||||||
* [#844](https://github.com/netbox-community/netbox/issues/844) - Apply order_naturally() to API interfaces list
|
|
||||||
* [#845](https://github.com/netbox-community/netbox/issues/845) - Fix missing edit/delete buttons on object tables for non-superusers
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.8.2 (2017-01-18)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#284](https://github.com/netbox-community/netbox/issues/284) - Enabled toggling of interface display order per device type
|
|
||||||
* [#760](https://github.com/netbox-community/netbox/issues/760) - Redirect user back to device view after deleting an assigned IP address
|
|
||||||
* [#783](https://github.com/netbox-community/netbox/issues/783) - Add a description field to the Circuit model
|
|
||||||
* [#797](https://github.com/netbox-community/netbox/issues/797) - Add description column to VLANs table
|
|
||||||
* [#803](https://github.com/netbox-community/netbox/issues/803) - Clarify that no child objects are deleted when deleting a prefix
|
|
||||||
* [#805](https://github.com/netbox-community/netbox/issues/805) - Linkify site column in device table
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#776](https://github.com/netbox-community/netbox/issues/776) - Prevent circuits from appearing twice while searching
|
|
||||||
* [#778](https://github.com/netbox-community/netbox/issues/778) - Corrected an issue preventing multiple interfaces with the same position ID from appearing in a device's interface list
|
|
||||||
* [#785](https://github.com/netbox-community/netbox/issues/785) - Trigger validation error when importing a prefix assigned to a nonexistent VLAN
|
|
||||||
* [#802](https://github.com/netbox-community/netbox/issues/802) - Fixed enforcement of ENFORCE_GLOBAL_UNIQUE for prefixes
|
|
||||||
* [#807](https://github.com/netbox-community/netbox/issues/807) - Redirect user back to form when adding IP addresses in bulk and "create and add another" is clicked
|
|
||||||
* [#810](https://github.com/netbox-community/netbox/issues/810) - Suppress unique IP validation on invalid IP addresses and prefixes
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.8.1 (2017-01-04)
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#771](https://github.com/netbox-community/netbox/issues/771) - Don't automatically redirect user when only one object is returned in a list
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#764](https://github.com/netbox-community/netbox/issues/764) - Encapsulate in double quotes values containing commas when exporting to CSV
|
|
||||||
* [#767](https://github.com/netbox-community/netbox/issues/767) - Fixes xconnect_id error when searching for circuits
|
|
||||||
* [#769](https://github.com/netbox-community/netbox/issues/769) - Show default value for boolean custom fields
|
|
||||||
* [#772](https://github.com/netbox-community/netbox/issues/772) - Fixes TypeError in API RackUnitListView when no device is excluded
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
# v1.8.0 (2017-01-03)
|
|
||||||
|
|
||||||
## New Features
|
|
||||||
|
|
||||||
### Point-to-Point Circuits ([#49](https://github.com/netbox-community/netbox/issues/49))
|
|
||||||
|
|
||||||
Until now, NetBox has supported tracking only one end of a data circuit. This is fine for Internet connections where you don't care (or know) much about the provider side of the circuit, but many users need the ability to track inter-site circuits as well. This release expands circuit modeling so that each circuit can have an A and/or Z side. Each endpoint must be terminated to a site, and may optionally be terminated to a specific device and interface within that site.
|
|
||||||
|
|
||||||
### L4 Services ([#539](https://github.com/netbox-community/netbox/issues/539))
|
|
||||||
|
|
||||||
Our first major community contribution introduces the ability to track discrete TCP and UDP services associated with a device (for example, SSH or HTTP). Each service can optionally be assigned to one or more specific IP addresses belonging to the device. Thanks to [@if-fi](https://github.com/if-fi) for the addition!
|
|
||||||
|
|
||||||
## Improvements
|
|
||||||
|
|
||||||
* [#122](https://github.com/netbox-community/netbox/issues/122) - Added comments field to device types
|
|
||||||
* [#181](https://github.com/netbox-community/netbox/issues/181) - Implemented support for bulk IP address creation
|
|
||||||
* [#613](https://github.com/netbox-community/netbox/issues/613) - Added prefixes column to VLAN list; added VLAN column to prefix list
|
|
||||||
* [#716](https://github.com/netbox-community/netbox/issues/716) - Add ASN field to site bulk edit form
|
|
||||||
* [#722](https://github.com/netbox-community/netbox/issues/722) - Enabled custom fields for device types
|
|
||||||
* [#743](https://github.com/netbox-community/netbox/issues/743) - Enabled bulk creation of all device components
|
|
||||||
* [#756](https://github.com/netbox-community/netbox/issues/756) - Added contact details to site model
|
|
||||||
|
|
||||||
## Bug Fixes
|
|
||||||
|
|
||||||
* [#563](https://github.com/netbox-community/netbox/issues/563) - Allow a device to be flipped from one rack face to the other without moving it
|
|
||||||
* [#658](https://github.com/netbox-community/netbox/issues/658) - Enabled conditional treatment of network/broadcast IPs for a prefix by defining it as a pool
|
|
||||||
* [#741](https://github.com/netbox-community/netbox/issues/741) - Hide "select all" button for users without edit permissions
|
|
||||||
* [#744](https://github.com/netbox-community/netbox/issues/744) - Fixed export of sites without an AS number
|
|
||||||
* [#747](https://github.com/netbox-community/netbox/issues/747) - Fixed natural_order_by integer cast error on large numbers
|
|
||||||
* [#751](https://github.com/netbox-community/netbox/issues/751) - Fixed python-cryptography installation issue on Debian
|
|
||||||
* [#763](https://github.com/netbox-community/netbox/issues/763) - Added missing fields to CSV exports for racks and prefixes
|
|
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user