Nautobot Plugin: Single Source of Truth (SSoT)

Documenting a Property with Setter and Deleter Methods

In managing networks, there are systems of record (SoR) that own distinct sets of information about the network, and sources of truth (SoT) from which users and network automation tools pull their required data. All too commonly, these are one and the same, with each SoR serving as an SoT, which has the undesirable consequence that the user or automation needs to consult multiple SoT in order to do their job. Worse, in many cases there is overlap or intersection between various SoR – for example, device hardware inventory might be managed in one SoR, while device configuration might belong to a different SoR – which requires the consumer to cross-correlate information between SoTs in order to gain the full picture. Fortunately, there’s a solution – the introduction of a unified single source of truth (SSoT) that aggregates data from multiple SoR and provides a single unified point of access to this data. Towards this end, we are now introducing the Single Source of Truth (SSoT) plugin for Nautobot.

ssot-concept

Overview

This open-source plugin is designed to enable you to use Nautobot as your network’s SSoT, unifying data from any number of SoR behind Nautobot’s UI and APIs. Additionally, this plugin makes it quick and easy to develop and integrate specialized Nautobot Jobs that use DiffSync to synchronize data from other systems (“Data Sources”) into Nautobot and/or from Nautobot to other systems (“Data Targets”) as desired. In short, whatever system(s) you need to synchronize with Nautobot, you can support via Jobs (either open-source or custom-built) that use this plugin.

Please note that there is a 1:1 correlation between Nautobot plugins and Nautobot Apps. The terms can be used interchangeably.

Key features of the Nautobot SSoT plugin include:

SSoT Dashboard

The Single Source of Truth Dashboard UI lists available Data Sources and Data Targets and summarizes recent synchronization history.

dashboard-populated

Data Source / Data Target Views

Each installed Data Source or Data Target automatically creates a corresponding detailed landing page that displays its configuration, data mappings between the source/target and Nautobot, and sync history.

detail-view-servicenow

SSoT Job Result Database and Views

After executing a data synchronization Job, its impact (diffs, number of changes overall), outcome (successes/failures/errors), and detailed logs are automatically saved in Nautobot’s database, and can be reviewed in detail according to your needs.

result-view-servicenow

Installing the Plugin

The plugin is available as a Python package in PyPI and can be installed atop an existing Nautobot installation using pip:

pip install nautobot-ssot

This plugin is compatible with Nautobot 1.0.3 and higher.

Once installed, the plugin needs to be enabled in your nautobot_config.py:

# nautobot_config.py
PLUGINS = [
    # ...,
    "nautobot_ssot",
]

Using the Plugin

As initially installed, the plugin provides example Data Source and Data Target jobs for syncing some basic data (Regions and Sites) between your Nautobot installation and a remote Nautobot instance (such as demo.nautobot.com). We’ll use those example Jobs for this introduction.

Accessing the SSoT Dashboard

You can begin by selecting Plugins > Single Source of Truth > Dashboard from the navigation bar (or navigating to /plugins/ssot/) on your Nautobot instance to view the SSoT dashboard:

dashboard-initial

Running a Data Synchronization Job

From here you can click the Sync button next to any of the available Data Sources or Data Targets – for this example, let’s click the Sync button under Example Data Source to begin syncing data from a remote Nautobot instance to your local Nautobot instance. This will open a web form (which should look familiar if you have any prior experience with Nautobot Jobs) prompting you for any necessary inputs and options for the data sync:

job-submission

Note that by default the Dry Run option is selected; if this is checked, the Job will report on what would be changed but will not actually make any database updates. For sake of a more interesting example, make sure to uncheck this option before clicking the Run Job button.

After submitting the Job, you will be redirected to a standard Nautobot Job Result view, which will refresh automatically until the Job has run to completion.

Viewing Synchronization Results

Once the Job has finished, a button labeled SSoT Sync Details will appear at the top right of the page:

job-result-view

Clicking this button will redirect you to the SSoT plugin’s detailed view of this sync, including the diffs between the two systems that DiffSync detected and the detailed logs of exactly what got changed:

sync-detail-view

This view describes in detail everything that occurred during the data synchronization attempt. The primary Data Sync tab summarizes the overall outcome of the sync attempt, including a view of the diffs (if any) identified by DiffSync and a summary of the actions taken (create, update, delete) and their outcomes (success, failure, error).

The Job Logs tab shows any general status messages generated by the data synchronization Job as it executed; this is roughly equivalent to the Nautobot Job Result view shown earlier.

The Sync Logs tab shows the logs captured from DiffSync regarding the individual data records being synchronized, details of any contents or changes of these records, and other detailed information. (Sync logs can also be accessed directly via the Plugins > Single Source of Truth > Logs menu item if desired.)

sync-logs-view

Reviewing History and Job Details

You can return to the dashboard view and see that it now summarizes the recent sync history, including this successful sync:

dashboard-one-result

From here, you can click on the Example Data Source link to inspect the detailed view of this Job, including its execution history and the data mappings that it includes in the sync:

data-source-detail-view

Running Again

If you run this Job a second time, you will see that, thanks to DiffSync, the Job detects that nothing has changed that needs to be resynced, and completes quickly:

sync-detail-view-no-changes

Finding, Creating, and Enabling More Jobs

Now that you have some idea of how this plugin works and what it’s capable of, you probably want to investigate how to integrate your own specific SoR systems with Nautobot via this plugin.

Keep an eye on this space, as we’ll be open-sourcing several example Data Source and Data Target Jobs in the near future for use with this plugin! You may also browse the Nautobot App Ecosystem under the Single Source of Truth category to see what’s available already and what’s coming up on the horizon.

We also have documentation on how to develop your own custom Jobs from scratch to support whatever SoR you want to integrate.

In any case, once the desired Job(s) have been developed, you can install them into your Nautobot system like any other Nautobot Job:


Conclusion

Hopefully you can now see the value that this plugin provides as a framework for integrating any number of other SoT and SoR with Nautobot as the unified SSoT. Keeping data synchronized between these systems, especially via automation such as this, makes our lives easier and reduces the likelihood of trouble resulting from out-of-sync information. If you do develop your own Data Source and/or Data Target Job with this plugin, we’d love to hear all about it!

-Glenn



ntc img
ntc img

Contact Us to Learn More

Share details about yourself & someone from our team will reach out to you ASAP!

Author