Post

Nautobot Workshop Blog Series - Overview

Nautobot Workshop Blog Series

“Nautobot Workshop” is a blog series that guides you through building a fully automated network lab using Nautobot, Containerlab, and Docker. Starting from environment setup on Ubuntu, each post will walk through deploying Nautobot with nautobot-docker-compose, modeling network topologies with Containerlab and vrnetlab-based routers, and populating Nautobot with real device data using Ansible. You’ll also learn how to use Nautobot’s GraphQL API for dynamic inventory, generate device configurations with Jinja2 templates, and enforce configuration compliance using the Golden Config plugin. This series is ideal for network engineers looking to integrate source of truth, automation, and lab simulation into a streamlined workflow.

Workshop Outline

Part 1: Environment Setup

Goal: Build a repeatable automation lab foundation using Ubuntu, Containerlab, Nautobot, and vrnetlab.

  • Install and prepare Ubuntu 24.04 LTS
  • Install dependencies:

    • Docker
    • Containerlab
    • vrnetlab (for IOL)
    • nautobot-docker-compose
  • Clone and configure:
    • containerlab-topology
    • nautobot-docker-compose
  • Validate working environment:
    • Spin up Nautobot stack
    • Verify IOL devices launch via containerlab

Part 2: Review the Network Topology

Goal: Understand the multi-site MPLS lab you’ll be modeling in Nautobot.

  • Overview of uploaded diagrams:
    • Provider topology
    • East Data Center
    • West Data Center
    • In-band Management
  • Discuss ASN layout, IP schemes (v4/v6), and router roles (RR, PE, P, CE)
  • Management overlay discussion and how it ties into automation

Part 3: Adding Devices to Nautobot via Ansible

Goal: Automate network inventory onboarding.

  • Use networktocode.nautobot Ansible collections
  • Build YAML or Jinja templates for devices, interfaces, and IPs
  • Write a playbook to:
    • Create Sites, Devices, Interfaces, IP Addresses, Connections
  • Validate in Nautobot UI

Part 4: Building ContainerLab topology from the Nautobot Inventory

Goal: Create a virtual topology based on the Nautobot inventory that can be used for testing and validation.

  • Write GraphQL queries for device + interface inventory
  • Write a Jinja2 template to create the CLAB topology YAML
  • Write a Jinja2 template to create an initial configuration with MGMT reachability

Part 5: Dynamic Inventory from Nautobot

Goal: Replace static inventory files with real-time Nautobot queries.

  • Install and configure nautobot.gql_inventory plugin
  • Write GraphQL queries for device + interface inventory
  • Use ansible-inventory to validate dynamic source
  • Demonstrate targeted playbook execution using dynamic inventory

Part 6: Configuration Compliance Checks

Goal: Track and enforce consistency across devices.

  • Configure compliance rules per platform or device role
  • Define expected patterns (e.g. NTP servers, banners, ACLs)
  • Run compliance check job
  • View results and identify drift
This post is licensed under CC BY 4.0 by the author.