⚠️ This website is still in construction, you may find incorrect information.

Documentation
Advanced
Project structure

Project Structure

Agent

The agent directory contains the code necessary to generate the agent that executes within the Virtual Machine (VM) and is responsible for executing the code.

build.rs

The build.rs file is responsible for constructing the proto file used by both the server and the client for gRPC communication outside of the VM.

lib

Inside the lib directory, you will find:

API

The API folder contains the code required to create both a gRPC client and server using tonic, as well as the definition of the gRPC fields. These definitions are generated by the build.rs file. Note that grpc_definition.rs is an automatically generated file and should not be modified manually.

Runner Engine

The runner engine, also located within the lib directory, is responsible for creating the workspace and executing the code received from the users.

API

The api directory contains the code responsible for generating the executable that accepts external HTTP requests to execute code. This directory also houses the VM manager and the server that communicates with the agent to execute the code.

model.rs

At the root of the api directory, you will find the model.rs file, which contains the structures used by the HTTP server to define the structure of both requests and responses.

config.rs

The config.rs file holds the definition of data structures and functions required for loading and manipulating a specific configuration (LambdoConfig) from a YAML file. This configuration is used to parameterize various aspects of Lambdo, including the Virtual Machine Monitor (VMM), API, agent, and supported programming languages.

api (Subdirectory)

Inside the api directory, there is also an api subdirectory containing the code for the HTTP server. In mod.rs, the /run route is defined, which launches VMs using the LambdoApiService service found in service.rs.

vm_manager

The vm_manager directory contains all the low-level logic for communicating with the VM. In the mod.rs file, you will find functions for launching the VMs. Additionally, the grpc_server.rs file houses the gRPC server where agents from the VMs register upon VM startup. This server manages the state of all the VMs.

net.rs

The net.rs file is responsible for configuring the network layer of the VMs, assigning them IP addresses and network interfaces.

Initramfs

The initramfs directory encompasses the Command Line Interface (CLI) tool that enables the building of a valid initramfs from a Docker image. This initramfs includes the binary of the agent, its configuration, and an init file.

Fetching Docker Images

The httpclient.rs file contains the logic required to make HTTP requests. This is subsequently utilized in registry.rs to fetch the layers of an image from the Docker Hub.

image.rs

The image.rs file encompasses all the code necessary for building an initramfs that can be utilized by Lambdo.

Lumper

Lumper is the Virtual Machine Monitor (VMM) utilized by Lambdo to launch and manage virtual machines (VMs). It plays a crucial role in the virtualization layer of the system, providing the necessary functionalities to ensure that VMs are run efficiently and securely.

Shared

The shared directory is a central hub for elements that are utilized across various other modules in the project. It serves as a common ground to store reusable code, configurations, and resources, ensuring consistency and reducing redundancy throughout the application.