Changes in Release 1.1

If you wrote custom Jinja2 templates or Python plugins, you might want to read the breaking changes section first.

New Functionality in Release 1.1.4

New Functionality in Release 1.1.3

New Functionality in Release 1.1.2

New Functionality in Release 1.1.1

  • Cumulus VX: unnumbered IPv4 interfaces

  • Cumulus VX: support for EBGP sessions over unnumbered IPv4 interfaces

  • OVS bridge support in containerlab provider

New Functionality in Release 1.1

  • Layer-2-only address pools

  • Layer-2-only interfaces on numbered or unnumbered links

  • Unnumbered interfaces attached to numbered links

  • Per-protocol unnumbered links (example: IPv4 prefix + IPv6 LLA)

  • Specifying node IP address as N-th IP address on the link

  • Multiple attachments of a node to the same link (use cases: inter-VRF back-to-back links or bridging loops)

  • BFD configuration module (contributed by Jeroen van Bemmel)

  • BFD support for IS-IS and OSPF

  • IS-IS over unnumbered multi-access links

  • Device capability checks: unnumbered interfaces, OSPF and IS-IS over unnumbered links

  • Linux bridges are used to implement multi-access links in containerlab (contributed by Jeroen van Bemmel)

Major Code Changes

  • Nodes data structure has been changed from a list to a dictionary. The change impacts plugins written for release 1.0.x that traverse nodes data structure.

  • Link data structure has been changed – nodes connected to a link (previously dictionary keys) are now collected in interfaces list.

  • Final node data structure has been changed – links (list of interfaces) have been renamed to interfaces

  • BFD, OSPF, and IS-IS configuration modules calculate interface state in Python code, significantly simplifying Jinja2 device configuration templates.

  • IPAM code refactoring – unifying address handling on all links and adding new functionality:

    • Layer-2-only pools, links, and interfaces

    • Unnumbered multi-access links. Standard IPv6 feature (LLA), might not work for IPv4 on all platforms (depends on platform implementation quality).

    • Per-address-family unnumbered interfaces

    • Unnumbered interfaces on numbered or layer-2-only links

  • Provider-specific device settings have been moved into devices dictionary (release 1.1.2)

  • Tons of new test cases to stress-test IPAM code and increase code coverage

  • Device image names have been moved into provider-specific device settings (release 1.1.3)

Bug Fixes in Release 1.1.4

  • Invalid modules are reported and stop topology transformation (previously you’d get as far as failing Ansible playbook)

  • Make sure node.interfaces are always defined

Bug Fixes in Release 1.1.3

  • IOSv does not support unnumbered IPv4 interfaces

  • Node- and interface module data did not merge correctly

  • Fix precedence of node-level module parameters (node, global, device, system default)

  • Copy select node module settings into interface data

  • Implement explicit interface-level module attributes

  • Allow provider-specific data to be specified on individual nodes

Bug Fixes in Release 1.1.2

  • netlab requires Python 3.7 or later

  • Static hostnames on Junos

  • Wait for eth1/1 interface to appear before starting Nexus OS configuration

  • Add a check for gNMI plugin

Earlier Bug Fixes

  • Limit Linux bridge name to 15 characters (1.1.1)

  • Prefer netlab_console_connection Ansible variable over ansible_connection in netlab connect to connect to devices that use less common connection plugins.

  • Set Fortinet OSPF Area ID

  • Fix “unnumbered IPv4 interfaces” flags – they don’t work on IOSv, IS-IS on vSRX and SR/OS works on P2P links

  • Check that the BGP AS number is an integer

  • netlab down should have the same CLI options as netlab up or netlab create

Documentation Fixes

  • Disabling zero-touch on Arista vEOS is crucial

  • Fixed tutorial printouts

  • Describe automated tests

  • Change minimum Ansible version recommendation

  • Fix BFD platform support table

Breaking Changes

Don’t bother with this section if you’re not using custom configuration templates or plugins.

  • links list in node data (which is also what you get in Ansible inventory) has been renamed to interfaces. You’ll have to change most device configuration templates. Apologize for the inconvenience; we had to bite that bullet sooner or later.

  • topology.links and topology.nodes changed. You will have to rewrite any plugins you developed for release 1.0. Fortunately, that’s pretty easy to do, and the new data structures are easier to work with.

  • ipv4 and ipv6 interface attributes could be an IP address or a boolean value (for unnumbered/LLA interfaces), requiring additional checks in device configuration templates. You can ignore this change if you’re not using unnumbered interfaces.


  • Removed ancient (release 0.1) management network addressing parameters

  • ArcOS is no longer supported by netlab – technical documentation is not available online, the VM image cannot be downloaded, and the contributor of this platform is no longer working at Arrcus.