mirror of
https://github.com/netbox-community/netbox.git
synced 2024-05-10 07:54:54 +00:00
Reset documentation hierarchy
This commit is contained in:
@ -1 +1,3 @@
|
|||||||
|
# Context Data
|
||||||
|
|
||||||
{!docs/models/extras/configcontext.md!}
|
{!docs/models/extras/configcontext.md!}
|
||||||
|
@ -1 +1,3 @@
|
|||||||
|
# Tagging
|
||||||
|
|
||||||
{!docs/models/extras/tag.md!}
|
{!docs/models/extras/tag.md!}
|
||||||
|
@ -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)
|
||||||
|
|
||||||
|
@ -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,7 @@ NetBox supports integration with the [NAPALM automation](https://napalm-automati
|
|||||||
(venv) # pip3 install napalm
|
(venv) # pip3 install napalm
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Remote File Storage (Optional)
|
### 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`.
|
||||||
|
|
||||||
|
@ -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,8 +1,10 @@
|
|||||||
|
# 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 openldap-devel
|
||||||
|
|
||||||
On Ubuntu:
|
On Ubuntu:
|
||||||
|
|
||||||
@ -16,7 +18,7 @@ On CentOS:
|
|||||||
sudo yum install -y openldap-devel
|
sudo yum install -y openldap-devel
|
||||||
```
|
```
|
||||||
|
|
||||||
#### Install django-auth-ldap
|
### Install django-auth-ldap
|
||||||
|
|
||||||
```no-highlight
|
```no-highlight
|
||||||
pip3 install django-auth-ldap
|
pip3 install django-auth-ldap
|
||||||
@ -79,7 +81,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.
|
||||||
@ -49,7 +51,7 @@ Copy the LDAP configuration if using LDAP:
|
|||||||
# cp netbox-X.Y.Z/netbox/netbox/ldap_config.py netbox/netbox/netbox/ldap_config.py
|
# 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)
|
### Option B: Clone the Git Repository
|
||||||
|
|
||||||
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:
|
||||||
|
|
||||||
|
@ -58,10 +58,10 @@ nav:
|
|||||||
- NetBox Shell: 'administration/netbox-shell.md'
|
- NetBox Shell: 'administration/netbox-shell.md'
|
||||||
- API:
|
- API:
|
||||||
- Overview: 'api/overview.md'
|
- Overview: 'api/overview.md'
|
||||||
|
- Filtering: 'api/filtering.md'
|
||||||
- Authentication: 'api/authentication.md'
|
- Authentication: 'api/authentication.md'
|
||||||
- Working with Secrets: 'api/working-with-secrets.md'
|
- Working with Secrets: 'api/working-with-secrets.md'
|
||||||
- Examples: 'api/examples.md'
|
- Examples: 'api/examples.md'
|
||||||
- Filtering: 'api/filtering.md'
|
|
||||||
- Development:
|
- Development:
|
||||||
- Introduction: 'development/index.md'
|
- Introduction: 'development/index.md'
|
||||||
- Style Guide: 'development/style-guide.md'
|
- Style Guide: 'development/style-guide.md'
|
||||||
|
Reference in New Issue
Block a user