Device Classes are located in a special directory in our Git repository. This directory is embedded into the Thola binary using go embed. This allows Thola having access to the information provided by the device classes without needing the device class directory as an additional dependency.

The device class directory is structured in a hierarchy which represents the relations between device classes. A device class can inherit information from another device class. This inheritance is automatically done by Thola depending on the location of the YAML file inside the directory. When defining a sub class for an already existing device class, the YAML file of this sub class needs to be located in a directory which is located in the same directory as the YAML file of the parent device class and has the name of that parent class.

The following example shows a small part of the device class hierarchy:

├── generic
│.. ├── adva_fsp3kr7.yaml
│...├── arista_eos.yaml
│.. ├── audiocodes.yaml
│.. ├── aviat.yaml
│.. ├── ceraos
│.. │.. └── ip10.yaml
│.. ├── ceraos.yaml
│.. ├── clavister.yaml
│   ...
└── generic.yaml

At the top level, there are only two files. The YAML file generic.yaml defines the behavior for the generic device class. All other device classes, which inherit from this class, are located in the generic directory.

This directory contains various YAML files, which all represent a device class, and additional directories, which introduce a new level in the inheritance hierarchy. For instance, the YAML file located at generic/ceraos/ip10.yaml defines a device class for Ceragon IP-10 devices. This device class inherits from the ceraos device class, which is defined at generic/ceraos.yaml. This device class again inherits from generic.

Every device class in Thola inherits from generic. Therefore, when creating a new device class, it has to be created inside the generic directory.