This comes handy for new and existing Netbox installations, because now you can populate your database with predefined device models for the most common networking gear manufacturers.
I have contributed to the repository and created the entire set of MikroTik routers and switches, updated to December 2019.
NetBox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at DigitalOcean, NetBox was developed specifically to address the needs of network and infrastructure engineers.
When I started using NetBox on my daily job, I planned to use it as a replacement for all the spreadsheets I had for switch configurations, IP address management, secrets, and VLAN assignments. NetBox can handle all of this and more, but the interface didn’t suit my needs.
NetBox is built using the Python Django framework, which I have used for another projects. I used Visual Studio Code to clone the repository and debug, as it has native support for the Django template language.
I keep a copy of the repository on my local machine for ease of modifications. Prior, I have set DEBUG=TRUE on netbox/configuration.py, and allowed localhostand my local network to access the development server. Also, I set the correct settings to connect to the existing postgresql database.
Connecting the existing DB to my local development server
This environment works for test purposes, but the best you can do is to set up separated development and production environments, and commit your changes to production once everything is tested.
Using VSCode to debug Django
The URL definition for the single device view is around line #147 of the netbox/dcim/urls.py file, and it looks like this.
Heading to the DeviceView view, I put a breakpoint on the interfaces QuerySet of the view definition, and launched the debugger. The default location is at http://localhost:8000.
Setting up the debuggerBreakpoints
I headed to http://localhost:8000/dcim/devices/570/, where I had defined a switch with several VLANs, to hit the breakpoint and find out if the QuerySet had information about the VLANs, or if they were queried in a per-interface basis, on the interface view.
QuerySet returns this
Lucky me, the QuerySet recovered all the information I needed, and it is passed to the template via a render() call.
All the information I want is rendered on this table. This is the power of the Django framework. I added line #513 as an additional header for the VLANs column.
This table has a for loop which iterates for each interface of the device, so I edited the included template file at dcim/inc/interface.html.
Both tagged and untagged VLANs groups have a bolded title, and the VID and VLAN name is shown after it. I used the dictsort filter, which is part of the Django framework, to sort all the VLANs by their VID.
dcim/inc/interface.html
The final result looks like the following image, and it allows to keep track of all the VLANs on all ports, at first sight. This is easier and more user friendly than getting that information interface per interface, or making a new custom view.
NetBox is an IP address management (IPAM) and data center infrastructure management (DCIM) tool. Initially conceived by the network engineering team at DigitalOcean, NetBox was developed specifically to address the needs of network and infrastructure engineers.
$ git clone -b master https://github.com/ninech/netbox-docker.git
$ cd netbox-docker
Once cloned, I used docker-compose to pull the images
$ docker-compose pull
And then I started the stack with
$ docker-compose up -d
The service will be up and running after a few minutes. Once ready, you need to find where to connect to with
$ docker-compose port nginx 8080
Or use this snippet
$ echo "http://$(docker-compose port nginx 8080)/"
Here I use Portainer as a gui to manage Docker, and Traefik as a reverse proxy to enable FQDN access to the services behind. I added an entry on my DNS to route netbox.arturo.local to the Docker IP address, on the exposed port for Nginx.