Custom Topology

NVIDIA Air fully supports the creation of custom topologies. This feature augments the pre-built demo infrastructure.

To access the custom topologies, do one of the following:

  • Click the Create your own card on the Create a Simulation page:

  • Go directly by following this link:

Custom Topology Landing Page

The custom topology landing page is a blank canvas that you can use to design any network.

Canvas Overview

The left panel for custom topologies contains the supported nodes used for creating the custom topology:

  • Cumulus VX switches
  • Ubuntu servers
  • SONiC switches
  • Generic nodes

The toolbar at the top manages the topology. Clicking the default name My Topology Project provides additional management options.

  • Open Build: Uploads a JSON-structured custom topology build. This is not the same as importing a Graphviz format document. The JSON format structure is unique to the custom topology builder tool.
  • Save Build: Exports a JSON-structured custom topology that represents the canvas. While you can open and edit it in a text editor, only the custom topology builder application should read and interpret this JSON file.
  • Export Build: Exports the topology as a Graphviz format file. You can import this file into the Air simulation platform to launch a custom topology.
  • Download SVG: Downloads an image in SVG format that defines your topology.
  • Rename Project: Renames the project.
  • New Project: Creates a new project.

Add Nodes

To add a node, drag and drop it from the left panel.

Edit Nodes

After you add a node, you can edit it as needed. Click the node to select it and configure it using the options in the right panel.

  • Name: The hostname of the node.

  • OS: The operating system version on the node. The supported OS versions are in a dropdown list.

  • Memory: The amount of RAM on the node. The default is 1GB.

  • CPU: The number of CPUs allocated to the node. The default is 1 CPU.

  • Role: This is an advanced feature to define the role of the node to affect boot order. You typically do not have to assign a role.

  • Hardware Model: Pre-populate the ports based on a specific hardware model of switch selected. This does not affect the simulation, it acts as a macro to pre-populate the number of ports per switch model.

  • Ports: Add, rename and edit port location and information for the diagram.

Press the breakout button to simulate breaking out a port into a group of 4.

Connect Nodes

To connect two nodes together, click a port on one node and drag it to the port on the other node. This draws a line between the two ports to show the connection.

ZTP Script

You can include a custom ZTP script as part of the network design. When you create the simulation, the ZTP script gets copied, exactly as pasted into the text field, onto the oob-mgmt-server. Any network node making a ZTP request on the OOB management network has access to this ZTP script through a DHCP server and web server running on the oob-mgmt-server.

To upload a ZTP script, click the ZTP script button in the top right of the canvas:

This opens up a popup window where you paste the contents of the ZTP script. The popup window is already populated with a default script. The default script is a guide to implement common ZTP features on Cumulus Linux, including:

  • Disabling password expiry
  • Making the cumulus user passwordless for sudo
  • Downloading SSH keys for key based SSH

After you apply the ZTP script, the ZTP button changes color from grey to green, indicating that ZTP is now active on your oob-mgmt-server.

Build a Custom Topology

To build a custom topology, choose one of these two options:

  • Start a simulation directly from the topology builder
  • Export the topology files and upload them directly into Air

Start a Simulation Directly

To start a simulation directly from the topology builder, click the Start Simulation button. This automatically launches the simulation and redirects to the Air landing page. The topology and the diagram are automatically linked to your simulation, so you do not have to do anything else.

Export a Custom Topology

To export a custom topology, first download the requisite files. Click Export in the top right button.

This exports two files for download:

  • - Network definition in Graphviz format
  • topology.svg - Network diagram in Scalable Vector Graphics format

You can upload both files file into Air via the Create Simulation workflow. First, click the Upload Topology card:

Then upload the and topology.svg files to the proper locations (drag the file onto the Drop a topology file here card and the topology.svg file onto the Drop a diagram here card):

NetQ Integration

You can include NetQ with any simulation. To do this, drag the node icon into the canvas and change the OS field to a NetQ version.

You do not need any other additional connectivity to get NetQ functionality. The only requirement is the existence of a NetQ node. As long as you defined the NetQ node in the simulation, the platform automatically creates the NetQ agents and does the registration.

Create a Custom Topology from the Production Network

A common request for the Air custom topology is to create a simulation based on an existing production deployment. The steps below outline how you can accomplish this.

Gather cl-support from the Production Network

You can gather the cl-support script output by using these playbooks.

The ReadMe in that repository provides instructions how to run the playbook to gather the cl-support output.

Create from the Production Network

After you get the cl-support output, you can create a file using this script.

You can run the script using python3. Here is some sample output:

$ python3 
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_leaf01_20210721_164553.txz
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_spine02_20210721_164553.txz
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_leaf02_20210721_164553.txz
Extracting: /home/cumulus/cl_support_lldp_parser/cl_support_spine01_20210721_084129.txz
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_leaf01_20210721_164553
    leaf01:eth0 -- oob-mgmt-switch:swp2
    leaf01:swp31 -- spine01:swp1
    leaf01:swp32 -- spine02:swp1
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_spine02_20210721_164553
    spine02:eth0 -- oob-mgmt-switch:swp6
    spine02:swp1 -- leaf01:swp32
    spine02:swp2 -- leaf02:swp32
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_leaf02_20210721_164553
    leaf02:eth0 -- oob-mgmt-switch:swp4
    leaf02:swp31 -- spine01:swp2
    leaf02:swp32 -- spine02:swp2
folder is: /home/cumulus/cl_support_lldp_parser/cl_support_spine01_20210721_084129
    spine01:eth0 -- oob-mgmt-switch:swp5
    spine01:swp1 -- leaf01:swp31
    spine01:swp2 -- leaf02:swp31

The command writes the output to You need to manually edit this file to define the node versions and clean up any superfluous configurations.

Here is more example output:

$ cat
graph dc1 {
"leaf01" [function="leaf" ]
"oob-mgmt-switch" [function="leaf" ]
"spine01" [function="leaf" ]
"spine02" [function="leaf" ]
"leaf02" [function="leaf" ]
    "leaf01":"eth0" -- "oob-mgmt-switch":"swp2"
    "leaf01":"swp31" -- "spine01":"swp1"
    "leaf01":"swp32" -- "spine02":"swp1"
    "spine02":"eth0" -- "oob-mgmt-switch":"swp6"
    "spine02":"swp2" -- "leaf02":"swp32"
    "leaf02":"eth0" -- "oob-mgmt-switch":"swp4"
    "leaf02":"swp31" -- "spine01":"swp2"
    "spine01":"eth0" -- "oob-mgmt-switch":"swp5"