We recently launched Nautobot, an open source Network Source of Truth and Network Automation Platform. If you haven’t already watched, you can check out the official Nautobot launch here from Networking Field Day 24 (NFD24).
For more background on Nautobot, please see Why did Network to Code Fork NetBox?
This blog post is focused on Nautobot’s top use cases and its new features. It also sets the stage for where we are taking Nautobot longer term.
Nautobot is focused on three primary use cases. These use cases highlight how Nautobot can be used as a Flexible Source of Truth for Networking, Extensible Data Platform for Network Automation, and Platform for Network Automation Apps. We’ll provide a summary of each use case followed by a deeper dive into a few features that support the use cases.
This is the core Source of Truth function that allows users to store network data in Nautobot such as inventory, IP addresses, VLANs, and more. However, we are really honing in on making Nautobot extremely flexible. For example, Nautobot already allows users to define their own business rules for the data being added to Nautobot. Nautobot also allows users to create relationships between objects while supporting custom fields on any model, including interfaces.
Learn more about Nautobot Extensibility and how Nautobot enables Data Quality & Visibility in these NFD24 videos.
Nautobot is meant to power network automation solutions. In order to do that, there needs to be more seamless ways to access data and integrate across data systems. Nautobot supports GraphQL to truly simplify the way data is queried. Instead of making several REST API calls, it is now possible to make a single GraphQL query (which is done over an HTTP POST). Nautobot also offers native Git integration. For data that isn’t stored in Nautobot, it is possible to leverage Git platforms like GitHub allowing users to have a well-defined approval process and use CI-testing on structured JSON/YAML files. Once the files are merged into a Git repository, Nautobot takes those data files and dynamically loads them as Nautobot config contexts. The YAML data is also available via Nautobot REST and GraphQL APIs. Within this use case, the Nautobot plugin system also allows users to create data integrations unifying disparate data sources and custom models as needed to power any network automation solution.
Explore and see a demo of GraphQL.
A key use case for Nautobot is enabling network automation by creating an App ecosystem. Using Nautobot as a platform speeds up delivery of those applications by almost 70%. This is because users can take advantage of all of the non-functional benefits that are already there such as predefined patterns, authentication, authorizations and permissions, logging, Git integration, GraphQL, webhooks, and much more. We are also open sourcing apps to showcase using Nautobot as a platform. Some of these include a Chatbot App for network automation and a Golden Configuration App that allows users to perform backups, generate configuration, and perform configuration compliance. More on these below.
Let’s dive deeper into some of the new features and functionality that support the Nautobot use cases. This is not an exhaustive list of everything that has changed or that is being announced, just the highlights. For the full list, you should read through the Release Notes.
GraphQL support adds a tremendous amount of flexibility to query data via an HTTP API endpoint. It offers the ability to query for specific datasets across models in a single query. Historically, the process to retrieve a list of devices, all of their interfaces, and all of their neighbors would require numerous REST API calls. GraphQL gives the flexibility to get all the data desired and nothing more in a single API call.
The following is an example using the built-in interactive GraphQL browser, GraphiQL, to build and test queries without writing any code:
Data quality in Nautobot becomes easier with the new data validation plugin API. This makes it possible to codify organizational standards. Using a data validation plugin, an organization can ensure all data stored in Nautobot meets its specific standards, e.g. enforce device naming standards, ensure certain prefixes are never used, ensure VLANs always have a name, or ensure interfaces always have a description. You get to codify your standards. The ability to ensure a high quality of data becomes much more streamlined; what had been human processes may now be automated and there is no more need to actively run reports to check data quality.
The following shows that with minimal Python code, you can start to codify your standards:
Basic Regex rules can be configured in the UI using the Nautobot data validation engine:
Git integration offers users an option to integrate into a more traditional NetDevOps pipeline for managing Python modules, Jinja templates, and YAML/JSON data. There are several Nautobot use cases that require users to either manage Python modules on the filesystem or use Jinja2 templates within the GUI.
With this new feature, users can add a Git repository from the UI, the contents of which will be synchronized into Nautobot immediately and can be refreshed later on-demand. This allows users to more easily update and manage:
Not only does this integration and feature simplify management of these features in the UI, it offers users the ability to use Git workflows for the management of the jobs, templates, and data ensuring there has been proper review and approval before updating them on the system.
User-defined or custom relationships allow users to create their own relationships between models in Nautobot that best suit the needs of their specific network design. Nautobot comes with opinionated data models and relationships. For example, a VLAN is mapped to a site by default. After a VLAN is created, you then assign that VLAN to an interface on a device. However, many networks today have different requirements and relationships for VLANs (and many other models). With user-defined relationships, you can now choose to only use the opinionated relationship that maps site to VLAN, or you can create the relationship that best matches your network design. VLANs may be limited to racks in Layer 3 DC fabrics; VLANs may be mapped to multiple buildings in a campus; they may span sites. Other use cases include circuits, ASNs, IP addressing just to name a few allowing users to define the exact relationships required for their network.
Custom fields allow user-defined fields, or attributes, on specific data models such as sites or devices. With Nautobot, custom fields are now supported on every model, including interfaces. This allows organizations to extend existing models to best suit their needs and network designs.
Differing operations rely on different nomenclature for the status of elements in a given automation pipeline. While Nautobot has default status values, it also provides full customization of status names. This empowers teams to dynamically control status within an automation workflow to better represent the status of a given device or object at any point in time. One example of custom statuses is using contextual statuses for a device during an automation workflow.
New statuses can be defined such as “upgrading” or “rebooting” and if devices are actively being automated, the status can be checked by an automated process via the API to determine the right sequence of steps or actions to take, e.g., wait for device, skip device, etc.
Jobs allow users to embrace native Python to easily execute scripts or any Python code from the Nautobot GUI. Jobs combines the Custom Scripts and Custom Reports features that are available in NetBox. The Python code generates web forms and eliminates the need for custom GUI development. It’s quite common to use Jobs for populating data using organizational standards or validating data standards and generating reports. The following describes one example for populating data. If network designs are standard, then it’s not uncommon to have “t-shirt size” designs such as a Small, Medium, and Large site where each site has predefined device types, VLANs, IPs, etc. The custom form would allow users to select Small, Medium, or Large sites (if it is a greenfield site deployment) and provide any other required inputs. Once the Submit button is pressed, all relevant Source of Truth data would be populated automatically in just a few seconds. Jobs also play a critical role in data hygiene in that Python code can be written to validate and ensure data is as expected.
Given that Nautobot is also a Network Automation Platform, we are releasing several open source Apps & Extensions.
Note: these are all denoted as “plugins” on GitHub as you browse the repositories. The Apps & Extensions that we are releasing at launch include the following:
The ChatOps App is the first multi-platform chatbot for network operations and engineering teams. It is built to seamlessly work across Slack, MS Teams, WebEx Teams, and Mattermost. The baseline app makes it easy to get data out of Nautobot. It allows users to “chat with Nautobot” checking to see inventory, rack capacity, interface connections, or which circuits are at a given site just to name a few of the built-in commands. The app is designed for extensibility, allowing a developer to easily add more chat platforms in the future as well as define additional chat commands to communicate with any other IT system or device type. NTC will release more chat apps in the future that communicate with systems such as Ansible and Grafana – those apps use the chatbot framework in this app as a dependency.
See the ChatOps demo or Join slack.networktocode.com and try it out for yourself in the #nautobot-chat
channel.
The Golden Configuration (GC) App is designed to let users know how compliant their network is and if their golden configurations that are generated from the rich data already stored in Nautobot are being implemented properly across the network. The GC app has three inputs including a git repository that has configuration backups, a git repository that has Jinja templates that define the golden configuration, and a set of rules to define what compliance is for each environment. GC is able to generate network configuration files using its local data and Jinja templates and then compare the rendered configuration with the backup configuration to determine the compliance of each device. Optionally, GC can perform automated backups with Nornir if there isn’t an existing repository that already has them in the users environment. While the goal of GC is to perform compliance, it is possible to use the automated backup feature and/or the configuration generation feature independently and without actually performing compliance.
The Capacity Metrics Extension exposes key data stored in Nautobot as Prometheus HTTP endpoints so the data can be easily scraped, collected, stored, and visualized. PMP exposes metrics and meta data for devices, IP addresses, VLANs, prefixes, interfaces, racks, and anything else that makes sense to track. Exposing this data and visualizing it in a tool like Grafana will allow users to track growth, trends, interface capacity, site and rack utilization and capacity, IP consumption just to name a few of the common use cases.
The Device Onboarding Extension allows users to expedite adding devices to Nautobot. By providing just an IP address, credentials, and a site, baseline characteristics about the device will be added to Nautobot.
Users have tight control over their business rules using the Data Validation feature. Users can write Python to codify their exact organizational standards. However, the Rules Engine App offers users a UI-driven approach to create basic rules, initially with Regular Expressions (RegEx). For example, if your site name must start with a three-letter site code with all capital letters, followed by a two-digit ID, you can enforce that within the UI just by using RegEx. This app is coming soon.
Want to dive even deeper? Come chat with us in the #nautobot
channel in the Network to Code Slack workspace.
-Jason
Share details about yourself & someone from our team will reach out to you ASAP!