Installation¶
Docker¶
A docker container is provided at hub.lavasoftware.org/lava/lavafed
docker container run -p 9001:80 \
"hub.lavasoftware.org/lava/lavafed:latest"
Visit http://127.0.0.1:80/ to browse your local lavafed.
Development versions¶
It’s also possible to use lavafed directly from the sources:
git clone https://git.lavasoftware.org/lava/lavafed.git
cd lavafed
virtualenv -p python3 venv
source venv/bin/activate
python3 -m pip install -r requirements.txt
django-admin startproject fedweb .
cp share/urls.py fedweb/urls.py
cp share/settings.py fedweb/custom_settings.py
echo "INSTALLED_APPS.append(\"lavafed\")" >> fedweb/settings.py
echo "from fedweb.custom_settings import *" >> fedweb/settings.py
python3 manage.py migrate
DEBUG=1 python3 manage.py runserver
Visit http://127.0.0.1:8000/ to browse your development environment.
Official instance¶
The lavafed official instance, hosted by the lavasoftware project is made of two docker containers:
hub.lavasoftware.org/lava/lavafed
hub.lavasoftware.org/lava/lava/amd64/lava-server
lavafed¶
The lavafed application is started by Gitlab as part of the CI with:
docker container run --name lavafed-web -d \
--restart always \
-p 9001:80 \
-v "/home/lavafed/db.sqlite3:/app/db.sqlite3" \
-v "/home/lavafed/etc/labs/:/app/etc/labs/" \
-v "/home/lavafed/etc/master.yaml:/app/etc/master.yaml" \
"hub.lavasoftware.org/lava/lavafed:latest"
The main apache2 server is configured to proxy https://federation.lavasoftware.org/
to this container.
federated lava server¶
The federated lava server is started by Gitlab as part of the CI with:
docker run --name lavafed-master --rm -d \
-p 9000:80 -p 6500:5500 -p 6555:5555 -p 6556:5556 \
-v "/home/lavafed/lava-master/certificates.d/:/etc/lava-dispatcher/certificates.d/" \
-v "/home/lavafed/lava-master/instance.conf:/etc/lava-server/instance.conf" \
-v "/home/lavafed/lava-master/lava-logs:/etc/lava-server/lava-logs" \
-v "/home/lavafed/lava-master/lava-master:/etc/lava-server/lava-master" \
-v "/home/lavafed/lava-master/lava-server.conf:/etc/apache2/sites-enabled/lava-server.conf" \
-v "/home/lavafed/lava-master/settings.conf:/etc/lava-server/settings.conf" \
-v "lavafed-master-db:/var/lib/postgresql/9.6/main/" \
-v "lavafed-master-jobs:/var/lib/lava-server/default/media/" \
"hub.lavasoftware.org/lava/lava/amd64/lava-server:2019.05.0012.g7d4454923"
The main apache2 server is configured to proxy https://federation.lavasoftware.org/lava/
to this container.
Configuration¶
lavafed¶
XXXX
federated lava server¶
User¶
The federated lava admin should create a user (called lavafed
in this
document) that will be used by the acquire and release commands. This user
should have the rights to create device-types, devices and workers and to
submit jobs.
This is translating to the following permissions:
lava_scheduler_app | device | Can add device
lava_scheduler_app | device | Can change device
lava_scheduler_app | device type | Can add device type
lava_scheduler_app | device type | Can change device type
lava_scheduler_app | tag | Can add tag
lava_scheduler_app | test job | Can add test job
lava_scheduler_app | test job | Can cancel/resubmit job
lava_scheduler_app | worker | Can change worker
Tokens¶
The acquire and release commands need a token to authenticate as the lavafed user for the XMLRPC API. Federated lava Admin can create such token in the lava admin interface.
This token will be called lava_server_lavafed_token
in the rest of the
documentation.
A second token should be created to hold the lavafed api token used by the federated lava server when submitting results to the lavafed api.
description: federation.lavasoftware.org
secret: {{ federated_lavafed_api_token }}
Note
this token should be created when a first remote lab is added.
zmq certificates¶
The zmq channel between remote dispatchers and the federated master is encrypted.
In order to encrypt the communication, the federated lava admin should generate a certificate:
mkdir data
docker run --rm \
-v "/home/lavafed/lava-master/certificates.d/:/data" \
"hub.lavasoftware.org/lava/lava/amd64/lava-server:2019.05.0012.g7d4454923" \
/usr/share/lava-common/create_certificate.py \
--directory /data master
The public (master.key
) and private (master.key_secret
) keys will be
created in /home/lavafed/lava-master/certificates.d/
.
The value of the public key, is called lava_master_zmq_public_certificate
in the rest of the documentation.
master.yaml¶
The lavafed master configuration in etc/master.yaml should look like:
# base job url of the web interface
job_url: https://federation.lavasoftware.org/lava/scheduler/job/{id}
# xmlrpc configuration
# The user should be able to administrate devices and submit jobs
url: https://federation.lavasoftware.org/lava/RPC2/
username: lavafed
token: "{{ lava_server_lavafed_token }}"
# zmq urls to the lava-master and lava-slave
master: tcp://federation.lavasoftware.org:6556
logs: tcp://federation.lavasoftware.org:6555
certificates:
public: "{{ lava_master_zmq_public_certificate }}"
# api configuration
api:
url: https://federation.lavasoftware.org/api/v0.1/jobs/
token: federation.lavasoftware.org