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 dot1 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
… but not a slash – we don’t want to do that on filenames