With the node filtering feature containerlab enables users to perform operations on a subset of nodes defined in the topology file. A typical use case is to deploy only a subset of nodes in a lab to save deployment time and host resources.
Consider the following topology file that defines 4 interconnected nodes:
name: filter topology: defaults: image: alpine:3 nodes: node1: node2: node3: node4: links: - endpoints: ["node1:eth1", "node2:eth1"] - endpoints: ["node1:eth2", "node3:eth2"] - endpoints: ["node1:eth3", "node4:eth3"] - endpoints: ["node2:eth2", "node4:eth2"] - endpoints: ["node3:eth1", "node4:eth1"]
A graphical representation of the topology forms a ring with 4 nodes and 5 links between them:
Deploying a subset of nodes#
By default, all nodes and their links are deployed when the
deploy command is executed. But what if each node is a massive VM that consumes a lot of RAM and you want to launch just a few of them? This use case becomes even more relevant when you have a large lab with many nodes and isolated domains.
For the sake of this example, let's assume that we want to deploy only nodes
node4, representing a subring. To do that, we can use the
--node-filter flag and provide a comma-separated list of nodes names to deploy:
As a result of this command, only nodes
node4 will be deployed, and the links between them will be created. The remaining nodes and links will be ignored.
When filtering the nodes to
node2 the topology becomes a linear chain:
Destroying a subset of nodes#
destroy command can also be scoped to a subset of nodes. The same
--node-filter flag can be used to specify the nodes to destroy. For example, to destroy only nodes
node2 from the previous example, we can run:
And only these two nodes will be destroyed (with all links connected to them), leaving the rest of the lab intact.
The following commands have support for