Skip to content

Commit acedf26

Browse files
authored
Release 26.02 (#3098)
1 parent c35aba8 commit acedf26

File tree

8 files changed

+160
-6
lines changed

8 files changed

+160
-6
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ Interested? [Read the documentation](https://netlab.tools) (also available on [G
1717

1818
## Releases
1919

20-
The latest release is [release 26.01.01](https://github.com/ipspace/netlab/releases/tag/release_26.01.01). We did a major refactoring of configuration file generation in release 26.01 (resulting in a few breaking changes); if you encounter bugs, please report them as [GitHub issues](https://github.com/ipspace/netlab/issues/new/choose) and use [release 25.12.03](https://github.com/ipspace/netlab/releases/tag/release_25.12.03).
20+
The latest release is [release 26.02](https://github.com/ipspace/netlab/releases/tag/release_26.02). It should be pretty stable, but if you encounter bugs, please report them as [GitHub issues](https://github.com/ipspace/netlab/issues/new/choose) and use [release 26.01.01](https://github.com/ipspace/netlab/releases/tag/release_26.01.01).
2121

2222
<!--
2323
or [1.8.4-post2](https://github.com/ipspace/netlab/releases/tag/release_1.8.4-post2).

docs/caveats.md

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -115,13 +115,18 @@ nodes:
115115
**Licensing:**
116116

117117
* Catalyst 8000v uses a boot-level license to enable additional features. The *netlab*-built Vagrant box configures the **premier** license, while the older versions of *vrnetlab* built containers without the add-on license. Set the default parameter **defaults.devices.cat8000v.clab.cat8000v.license** to *none* if you're using Catalyst 8000v containers without the **premier** license.
118-
* The **premier** license is required for new-style VLAN configuration (see below), VXLAN, MPLS, SR-MPLS, and SRv6.
118+
* The **premier** license is required for new-style VLAN configuration (see below), VXLAN, EVPN, MPLS, SR-MPLS, and SRv6.
119119

120120
**VLAN caveats:**
121121

122122
* You cannot use reserved VLANs (1002..1005) on Catalyst 8000v
123123
* _netlab_ uses new-style VLAN configuration (service instance configured as a **member** of the **bridge-domain**) on Catalyst 8000v nodes with the **premier** license, and old-style VLAN configuration (**bridge-domain** configured under **service instance**) on other Catalyst 8000v nodes.
124124

125+
**EVPN/VXLAN caveats:**
126+
127+
* The layer-3 EVPN functionality (transit VNI, type-5 routes) is not supported by _netlab_
128+
* Cisco IOS/XE does not accept VXLAN VNI values below 4096
129+
125130
**Container caveats:**
126131

127132
You should use the latest *vrnetlab* code to build (or rebuild) the Catalyst 8000v containers:
@@ -135,7 +140,7 @@ See also [CSR 1000v](caveats-csr) and [Cisco IOSv](caveats-iosv) caveats.
135140
## Cisco CSR 1000v
136141

137142
* Cisco CSR 1000v does not support an interface MTU lower than 1500 bytes or an IP MTU higher than 1500 bytes.
138-
* The minimum VXLAN VNI accepted by Cisco CSR 1000v is 4096. Using lower VNI values triggers a configuration error that is not caught by Ansible, resulting in a weird failure of the **netlab initial** command.
143+
* Cisco IOS/XE does not accept VXLAN VNI values below 4096
139144

140145
See also [Cisco IOSv](caveats-iosv) SSH, OSPF, RIPng, and BGP caveats.
141146

@@ -167,7 +172,7 @@ The Cisco IOS/IOS-XE SSH implementation uses RSA keys and older encryption algor
167172

168173
That wasn't a problem for Ansible users until October 2025, when the new version of the `ansible-pylibssh` package (installed with Ansible) was released. `ansible-pylibssh` release 1.3.0 uses `libssh` release 0.11.0, which [no longer supports legacy SSH algorithms](https://github.com/ipspace/netlab/discussions/2759).
169174

170-
You could downgrade `ansible-pylibssh` to release 1.2.2 with a command similar to `pip3 install --upgrade ansible-pylibssh==1.2.2` (you might have to prefix the command with `sudo` or add the `--break-system-packages` argument to the **pip3** command). Alternatively, you can tell Ansible to use the **paramiko** SSH library with:
175+
_netlab_ automatically tells Ansible to use the **paramiko** library when it detects a newer version of the `ansible-pylibssh` library. You could also downgrade `ansible-pylibssh` to release 1.2.2 with a command similar to `pip3 install --upgrade ansible-pylibssh==1.2.2` (you might have to prefix the command with `sudo` or add the `--break-system-packages` argument to the **pip3** command). Alternatively, you can tell Ansible to use the **paramiko** SSH library with:
171176

172177
```
173178
$ export ANSIBLE_NETWORK_CLI_SSH_TYPE=paramiko
@@ -191,6 +196,8 @@ Additionally, you might have to execute `sudo update-crypto-policies --set LEGAC
191196
* The Cisco IOL and IOL L2 images work only as containers created with Roman Dodin's fork of [vrnetlab](https://github.com/srl-labs/vrnetlab).
192197
* You need Containerlab 0.59.0 or greater to run these images.
193198
* You cannot use VLANs 1002 through 1005 with the Cisco IOL layer-2 image
199+
* The layer-3 EVPN functionality (transit VNI, type-5 routes) is not supported by _netlab_
200+
* Cisco IOS/XE does not accept VXLAN VNI values below 4096
194201
* Cisco IOL layer-2 image cannot configure tagged VLAN 1 in a trunk. Internal VLAN 1002 is used as a fake native VLAN on interfaces that have tagged VLAN 1 in a trunk.
195202
* Cisco IOL/IOLL2 cannot set the interface MTU (which is fixed at 1500 bytes). IOLL2 cannot set the IP MTU.
196203
* VXLAN with static ingress replication does not work on IOL/IOLL2, but works with the EVPN control plane.

docs/platforms.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,7 @@ Ansible playbooks included with **netlab** can deploy and collect device configu
215215

216216
[^XR]: Includes IOS XRv, IOS XRd, and Cisco 8000v
217217

218+
(platform-config-mode)=
218219
_netlab_ uses Ansible playbooks and device-specific task lists to deploy device configuration snippets onto most devices, with these notable exceptions:
219220

220221
| Device | Provider | Configuration deployment method |

docs/plugins/fabric.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
(plugin-fabric)=
12
# Build a Leaf-and-Spine Fabric
23

34
The *fabric* plugin builds a leaf-and-spine topology and adds the generated groups, nodes, and links to the lab topology.

docs/release.md

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,15 @@
11
Release Notes
22
=============
33

4+
**Release 26.02 (2026-02-11)**
5+
6+
* Support for [Kubernetes (KinD) clusters](plugin-kind) based on work by [@wnagele](https://github.com/wnagele)
7+
* Layer-2 EVPN/VXLAN support on Cat8000v, IOL, IOLL2
8+
* Containers can be [configured with Linux scripts or *containerlab* startup-config parameter](platform-config-mode) instead of with an Ansible playbook.
9+
* **[netlab graph](netlab-graph)** command can create graphs from a subset of nodes or links
10+
11+
[More details](release-26.02) and [a tiny breaking change](release-26.02-breaking)
12+
413
**Release 26.01.01 (2026-01-14)**
514

615
Release 26.01.01 is a bug-fix release [fixing](bug-fixes-26.01.01) the **[netlab status](netlab-status)** crash.
@@ -102,6 +111,7 @@ For older releases, check the [release notes archive](release-archive.md).
102111
:caption: Individual release notes
103112
:maxdepth: 1
104113
114+
release/26.02.md
105115
release/26.01.md
106116
release/25.12.md
107117
release/25.11.md

docs/release/26.02.md

Lines changed: 135 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,135 @@
1+
# Changes in Release 26.02
2+
3+
```eval_rst
4+
.. contents:: Table of Contents
5+
:depth: 2
6+
:local:
7+
```
8+
9+
(release-26.02)=
10+
## New Functionality
11+
12+
* Support for [Kubernetes (KinD) clusters](plugin-kind) based on work by [@wnagele](https://github.com/wnagele)
13+
* Layer-2 EVPN/VXLAN support on Cat8000v, IOL, IOLL2
14+
* Containers can be [configured with Linux scripts or *containerlab* startup-config parameter](platform-config-mode) instead of with an Ansible playbook.
15+
* **[netlab graph](netlab-graph)** command can create graphs from a subset of nodes or links
16+
* You can specify the parameters of core links in the **[fabric](plugin-fabric)** plugin
17+
* "Are the SSH servers ready?" tests are executed directly in **netlab initial**, resulting in reduced Ansible-generated clutter.
18+
* OSPFv3 reports
19+
20+
**Minor improvements**
21+
22+
* **[netlab status](netlab-status)** command can generate results in JSON or YAML format
23+
* The **netlab api** command returns the JSON-formatted results of the **netlab status** command in `/status` GET request
24+
* Use JSON files for Ansible group/host variables ([more](release-26.02-breaking))
25+
* **netlab libvirt package** command can build custom Vagrant boxes (used for FRRouting boxes)
26+
27+
(release-26.02-device-features)=
28+
## New Device Features
29+
30+
Arista EOS:
31+
* Arista cEOS can be configured with Linux scripts
32+
33+
Aruba CX:
34+
* Aruba CX containers can be configured with *containerlab* partial startup configuration
35+
36+
Cisco IOS:
37+
* IOSv/IOS-XE/IOL containers can be configured with *containerlab* partial startup configuration
38+
* Layer-2 EVPN/VXLAN support on Cat8000v, IOL, IOLL2
39+
40+
Dell OS10:
41+
* Dell OS10 containers can be configured with *containerlab* partial startup configuration
42+
43+
Linux:
44+
* Containers can be configured with the **docker exec** command that executes Linux scripts (skipping the Ansible playbooks)
45+
46+
FRRouting:
47+
* FRRouting containers are configured with Linux scripts
48+
* You can use the **netlab libvirt package** command to build a custom Vagrant box with a preinstalled FRRouting package
49+
* The custom Vagrant box can have the management VRF.
50+
51+
Junos:
52+
* Junos containers can be configured with *containerlab* partial startup configuration
53+
54+
(release-26.02-device-fixes)=
55+
## Fixes in Configuration Templates
56+
57+
Bird:
58+
* Reduced BGP connect/retry/hold timers
59+
* BFD configuration uses its own configuration template
60+
61+
Cisco IOS/IOS-XE:
62+
* Explicit **exit** from VRF BGP configuration (needed to have SRv6 configuration in the same startup-config)
63+
* Cisco IOS/XE devices use a shared VXLAN configuration template
64+
65+
Cisco IOSvL2:
66+
* _netlab_ sets the correct *containerlab* node *type* to influence the generation of initial configuration.
67+
* The *containerlab* image name has been changed to reflect the latest image tag format used by *vrnetlab*
68+
* Use correct interface variable in switchport normalization template (#3056)
69+
70+
Cumulus Linux NVUE:
71+
* Fixed OSPFv2 area configuration template
72+
73+
Dell OS10:
74+
* Cleanup device readiness check
75+
76+
FRRouting:
77+
* Leave *zebra* to configure IP addresses on VLAN interfaces
78+
* Load the MPLS kernel module in the FRR virtual machine
79+
80+
Linux:
81+
* Control IP forwarding with the **netlab_ip_forwarding** variable (needed for KinD clusters)
82+
83+
RouterOS7:
84+
* Set VLAN interface MTU/description
85+
* Fix BGP/VRF/session/origination errors
86+
87+
SR Linux:
88+
* Use SCP to copy the reloaded configuration to the device
89+
90+
VyOS:
91+
* The shared "setup vbash" code has been removed from VyOS configuration templates and is now added during configuration deployment
92+
93+
(release-26.02-breaking)=
94+
## Breaking changes
95+
96+
* The Ansible inventory files (apart from `hosts.yml`) are created in JSON format by default. If you need YAML-formatted inventory files, set the **defaults.outputs.ansible.filetype** [topology default](topo-defaults) to `yaml` or `yml` (depending on the desired file type).
97+
98+
(bug-fixes-26.02)=
99+
## Bug Fixes
100+
101+
* Flush printouts in the "netlab up" execution path (#3079)
102+
* Extend BFD start time in BGP BFD integration test (#3078)
103+
* ospf.areas.inter_area attribute cannot be used with regular areas (#3076)
104+
* Move plugin device features and daemon configs to device/daemon definitions (#3066)
105+
* Change netsim/cli/libvirt.py into netsim/cli/libvirt directory
106+
* Integration tests for the graph output module (#3061)
107+
* Add custom actions to integration tests (#3060)
108+
* Report errors when generating graphs with D2/dot (#3059)
109+
* Use random sleep instead of PHY control in cEOS normalization (#3055)
110+
* Remove 'netlab inspect' dependence on Ansible 'all' group (#3057)
111+
* Add IBGP checks to EBGP EVPN integration test
112+
* Fix hard-coded ISIS instance names in templates (#3052)
113+
* Extended Jinja2 error report in 'report' rendering
114+
* Use 'netlab_default_shebang' to implement easy wrapper cases (#3044)
115+
* Another large fabric (FRR with BGP/OSPF)
116+
* Cannot use netlab_config_mode on Linux (#3040)
117+
* Unmanaged nodes should not be provisioned with 'netlab initial'
118+
* Load optional kernel modules when starting clab provider (#3029)
119+
* Add 'get_node_group_var' to augment.devices (#3027)
120+
* Survive removed lab directory in 'netlab status --cleanup'
121+
* Implement default configuration deployment mode (sh/ns) for containers (#3022)
122+
* Make container scripts directly executable (#3020)
123+
* Make the 'summary of internal deployment' printout more informative (#3092)
124+
* Quote shell here documents in Jinja2 templates to prevent code injection (#3058)
125+
* Use correct ping timeout in EVPN EBGP-over-EBGP test
126+
* Adjust MTU and VNIs in EVPN integration tests (#3087)
127+
* Adjust core link MTU in VXLAN integration tests (#3086)
128+
* Add 'netlab_start_exec' clab group variable (#3047)
129+
* Restore the IOL interface state after system restart (#3096)
130+
* Increase IOL wait time in BGP aggregation tests
131+
132+
(doc-fixes-26.02)=
133+
## Documentation Fixes
134+
135+
* Update the MPLS support tables (#3083)

legacy/setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66

77
sys.path.append('..')
88

9-
version="26.01.01"
9+
version="26.02"
1010

1111
long_description = (Path(__file__).parent / "README.md").read_text()
1212

netsim/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import sys
44

5-
__version__ = "26.01.01"
5+
__version__ = "26.02"
66

77
abort = False
88

0 commit comments

Comments
 (0)