Design

Overview

Lavafed is made of three elements:

  • the lavafed application

  • the federated lava server

  • remote labs

lavafed application

This django application is the central point where the results are stored and made visible to users.

This application is also responsible for acquiring and releasing the different devices that are hosted in the remote labs.

The official lavafed application is hosted by the lavasoftware project.

federated lava server

This instance of LAVA is the central point of the federated LAVA instance. Each remote lab will start a dockerized lava-dispatcher (in a lava job) that will connent back to the federated master, forming a temporary LAVA dispatcher with real devices.

The official federated lava server is hosted by the lavasoftware project.

remote labs

Remote LAVA instances that share real devices with lavafed for a fixed amount of time every day.

Currently, the folowing labs are participating in lavafed:

Database objects

The lavafed application is storing different objects in the database:

device

The device that lavafed use for testing LAVA versions.

This object is used to store and restore the status of the device in the remote lab. A device is always linked to a device-type and a lab.

device-type

The LAVA device-type of a given device.

This is used to group test jobs and features together as the results are only relevant for device-types and not specific devices.

feature

A LAVA feature that is being tested by a lavafed job.

Features are of two kinds currently:

  • generic: generic LAVA feature (notifications, …)

  • device: device-type specific (booting using tftp and u-boot, …)

Device features are split in three actions deploy, boot, test

job

lavafed test job that is linking all objects together.

The job can be of four types:

  • FED: lavafed job on a rela device

  • SLAVE: lavafed dispatcher on a remote lab dispatcher

  • META: meta-lava tests

  • PACKAGE: packaging tests

lab

The remote lab with name and url.

token

lavafed token used to authenticate API calls.

This token is mainly used by LAVA when posting the job results as part of the notifications.

version

The version string that is tested by lavafed.

Users can then group features, devic-types or jobs per version.