Skip to content

Health-Check

A health-check is a specific LAVA job that is automatically and regularly scheduled to check the health of DUT.

If for any reason the job fails, the DUT health will be set to Bad (see device health). The device will not be used anymore by the scheduler until an admin set the health to either unknown or good.

Reports

Health-check reports are available at http://localhost/scheduler/reports. The report shows health-check failures and track the general health of the devices.

There is also a table providing information on the fails checks at http://localhost/scheduler/reports/failures?health-checks=1.

Recommendations

Golden image

In order to provide constant results, we advice to only use Golden image for health-checks.

The infrastructure

As health-checks are normal LAVA jobs, an health-check can test any part of the infrastructure that is normally used by a LAVA job.

For instance, we recommend to test:

  • bootloader methods
  • attached devices (hard-drive, probes, ...)
  • network access (local or remote servers)

lava-test-raise

In order to fail a job during the test, call lava-test-raise <message>. This will return immediately and set the job health to Incomplete.

Configuration file

The health-checks are stored on the server in /etc/lava-server/dispatcher-config/health-checks/<name>.yaml

By default, LAVA creates device-types with a routine health-check frequency of 24 hours. Admins can change this default for an instance by setting HEALTH_FREQUENCY_HOURS in one of the LAVA settings files, for example:

HEALTH_FREQUENCY_HOURS: 168

Admin could update device-type health-check using lavacli:

lavacli device-types health-check set qemu qemu.jinja2

filename

In order to compute the health-check of a DUT, LAVA will look in the device dictionary for the {% extends device-type.jinja2 %} line. The health-check filename is device-type.yaml.

Secrets

A health-check may need credentials, for instance to authenticate against a service or to download a private artifact.

As for any other job, a health-check can use secrets and refer to a remote artifact token by name, so the token value never appears in the health-check definition. LAVA resolves the token names against the remote artifact tokens of the job submitter. Health-checks are submitted automatically by LAVA using the lava-health service account, so the remote artifact tokens are resolved from this user.

The lava-health account cannot log in, so its tokens cannot be modified through the usual profile page. Admins should add them from the Django admin interface: edit the lava-health user and add the tokens in the Remote artifacts auths form, filling the Name and Token fields.

REST API

The /api/v0.2/remote-artifact-tokens/ endpoint always operates on the authenticated user. Since the lava-health user cannot log in, this endpoint cannot be used to manage its tokens; use the Django admin interface instead.

For example, add a token named example-token-reference to the lava-health user, then refer to it from the health-check definition:

job_name: example health check

secrets:
  API_TOKEN: example-token-reference

actions:
- deploy:
    # ...

- boot:
    # ...

- test:
    definitions:
    - from: inline
      name: example
      path: inline/example.yaml
      repository:
        metadata:
          format: Lava-Test Test Definition 1.0
          name: example
        run:
          steps:
          - . /lava-*/secrets
          - curl -H "Authorization: Bearer ${API_TOKEN}" https://example.com/check

LAVA replaces example-token-reference with the real token value when the job runs; the definition shown to users keeps the token name.

Downloading a private artifact

The secrets block is only exported to the test shell, so it cannot be used to authenticate a download. Use an authenticated download instead: token names used in the artifact headers are resolved from the lava-health user, just like the ones in secrets.