Skip to content

Module System

sat edited this page Jan 3, 2026 · 23 revisions

Module System

This page explains how modules extend dot2net with platform-specific functionality.

Overview

Modules provide integration with container orchestration platforms. They:

  1. Define output files - Platform-specific topology files (e.g., topo.yaml)
  2. Provide internal templates - Platform-specific formatting
  3. Require specific config blocks - User-provided configuration elements

How Modules Work

User Configuration          Module (e.g., containerlab)
─────────────────          ─────────────────────────────
nodeclass:                  Defines: topo.yaml file
  - name: router            Provides: node entry template
    config:                 Requires: "startup" config block
      - name: startup  ──────────────────────────────────►  Uses in exec section
        template: [...]

Module-User Contract

Modules establish a contract with user configurations:

Module Provides User Provides
File definitions (e.g., topo.yaml) Required config blocks (e.g., startup)
Platform-specific templates Node parameters (e.g., image, kind)
Automatic bind mount generation File definitions with path

Bind Mount Generation

Modules automatically generate bind mounts for files that:

  1. Have a path field defined in FileDefinition
  2. Are actually generated by the node (based on class configuration)

This ensures nodes only mount files they actually produce.

Example Usage

module:
  - containerlab

file:
  - name: frr.conf
    path: /etc/frr/frr.conf    # Bind mount target

nodeclass:
  - name: router
    values:
      image: quay.io/frrouting/frr:8.5.0
      kind: linux
    config:
      - file: frr.conf
        template:
          - "hostname {{ .name }}"

      # This "startup" block is used by containerlab module
      - name: startup
        template:
          - "vtysh -b"

Generated topo.yaml

name: mylab
topology:
  nodes:
    r1:
      kind: linux
      image: quay.io/frrouting/frr:8.5.0
      binds:
        - r1/frr.conf:/etc/frr/frr.conf
      exec:
        - vtysh -b
  links:
    - endpoints: [r1:net0, r2:net0]

Available Modules

Module Output File Required Parameters Optional Blocks
containerlab topo.yaml image, kind startup
tinet spec.yaml image startup
frr (none) - -

Module Documentation

For detailed documentation on each module:

See Also

Clone this wiki locally