Hierarchical Dictionaries in netlab YAML files
netlab describes network topology with a complex data structures encoded as a combination of hierarchical dictionaries and lists. Such a data structure is easy to encode in YAML but could be hard to read due to the many levels of dictionary hierarchy.
netlab uses a simple trick to make the topology (and defaults) files more readable: every dictionary key that contains a dot[1] is expanded into a hierarchical dictionary that is merged with the rest of the data structure.
For example, you could use defaults.device key instead of a dictionary to set the default lab device instead of a more complex setup shown below:
defaults:
device: eos
nodes: [ r1, r2]
The hierarchical dictionaries created from dotted attribute names are merged back with the topology data structure, allowing you to use the same prefix in multiple keys, for example:
defaults.device: eos
defaults.devices.eos.libvirt.image: vEOS:4.27.0M
defaults.devices.eos.clab.image: cEOS:4.27.0M
defaults.devices.eos.memory: 8192
The above settings are identical to the following structured YAML:
defaults:
device: eos
devices:
eos:
libvirt:
image: vEOS.4.27.0M
clab:
image: cEOS:4.27.0M
memory: 8192
The dotted attributes could appear anywhere in the topology hierarchy. For example, you could use them to set node or link attributes:
nodes:
r1:
bgp.as: 65000
ospf.area: 1
links:
- r1:
vlan.access: red
The above snippet is equivalent to the following traditional YAML data structure:
nodes:
r1:
bgp:
as: 65000
ospf:
area: 1
links:
- r1:
vlan:
access: red