NetBox API client library
Project description
Pynetbox
Python API client library for NetBox.
Note: Version 6.7 and later of the library only supports NetBox 3.3 and above.
Compatibility
Each pyNetBox Version listed below has been tested with its corresponding NetBox Version.
| NetBox Version | Plugin Version |
|---|---|
| 4.5 | 7.6.1 |
| 4.5 | 7.6.0 |
| 4.4 | 7.5.0 |
| 4.3 | 7.5.0 |
| 4.2 | 7.5.0 |
| 4.1 | 7.5.0 |
| 4.0.6 | 7.4.1 |
| 4.0.0 | 7.3.4 |
| 3.7 | 7.3.0 |
| 3.6 | 7.2.0 |
| 3.5 | 7.1.0 |
| 3.3 | 7.0.0 |
Installation
To install run pip install pynetbox.
Alternatively, you can clone the repo and run python setup.py install.
Quick Start
The full pynetbox API is documented on GitHub Pages, but the following should be enough to get started using it.
To begin, import pynetbox and instantiate the API.
import pynetbox
nb = pynetbox.api(
'http://localhost:8000',
token='d6f4e314a5b5fefd164995169f28ae32d987704f'
)
The first argument the .api() method takes is the NetBox URL. There are a handful of named arguments you can provide, but in most cases none are required to simply pull data. In order to write, the token argument should to be provided.
Queries
The pynetbox API is setup so that NetBox's apps are attributes of the .api() object, and in turn those apps have attribute representing each endpoint. Each endpoint has a handful of methods available to carry out actions on the endpoint. For example, in order to query all the objects in the devices endpoint you would do the following:
>>> devices = nb.dcim.devices.all()
>>> for device in devices:
... print(device.name)
...
test1-leaf1
test1-leaf2
test1-leaf3
>>>
Note that the all() and filter() methods are generators and return an object that can be iterated over only once. If you are going to be iterating over it repeatedly you need to either call the all() method again, or encapsulate the results in a list object like this:
>>> devices = list(nb.dcim.devices.all())
Threading
pynetbox supports multithreaded calls for .filter() and .all() queries. It is highly recommended you have MAX_PAGE_SIZE in your Netbox install set to anything except 0 or None. The default value of 1000 is usually a good value to use. To enable threading, add threading=True parameter to the .api:
nb = pynetbox.api(
'http://localhost:8000',
threading=True,
)
Filters validation
NetBox doesn't validate filters passed to the GET API endpoints, which are accessed with .get() and .filter(). If a filter is incorrect, NetBox silently returns the entire database table content. Pynetbox allows to check provided parameters against NetBox OpenAPI specification before doing the call, and raise an exception if a parameter is incorrect.
This can be enabled globally by setting strict_filters=True in the API object initialization:
nb = pynetbox.api(
'http://localhost:8000',
strict_filters=True,
)
This can also be enabled and disabled on a per-request basis:
# Disable for one request when enabled globally.
# Will not raise an exception and return the entire Device table.
nb.dcim.devices.filter(non_existing_filter="aaaa", strict_filters=False)
# Enable for one request when not enabled globally.
# Will raise an exception.
nb.dcim.devices.filter(non_existing_filter="aaaa", strict_filters=True)
Running Tests
First, create and activate a Python virtual environment in the pynetbox directory to isolate the project dependencies:
python3 -m venv venv
source venv/bin/activate
Install both requirements files:
pip install -r requirements.txt
pip install -r requirements-dev.txt
The test suite requires Docker to be installed and running, as it will download and launch netbox-docker containers during test execution.
With Docker installed and running, execute the following command to run the test suite:
pytest
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file pynetbox-7.6.1.tar.gz.
File metadata
- Download URL: pynetbox-7.6.1.tar.gz
- Upload date:
- Size: 92.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8a7ee99b89d08848be134793015afc17c85711a18e8c7e67c353362e1c8d7fc7
|
|
| MD5 |
5350712486013397d4af8b2c56335059
|
|
| BLAKE2b-256 |
110af0b733d44c4793ee3be0ee142a8ac92cfdd6232f64e4ae2dda256a08fb41
|
File details
Details for the file pynetbox-7.6.1-py3-none-any.whl.
File metadata
- Download URL: pynetbox-7.6.1-py3-none-any.whl
- Upload date:
- Size: 39.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.9.25
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
daa064b1cc4e7d871124ddca1e0de3a36e7ff9e0814fb046a90e36024fd59e4b
|
|
| MD5 |
f178b383cd0afcdf33d5bc10213e7d15
|
|
| BLAKE2b-256 |
c0f6a11612421017fdd8f93e653ea1505d4e64e9a24de0974c53a36b154cd945
|