Module firepilot::builder

source ·
Expand description

MicroVM Builder Pattern

This module provides a builder pattern to make the configuration of microVM easier. For each component, all fields are optional and are validated once you run the Builder::try_build method. Once the build is successful, you can consider it will properly be configured and can be used to start a microVM.

Example

use std::{
  fs::File,
  io::copy,
  path::{Path, PathBuf},
};
use firepilot_models::models::{BootSource, Drive, NetworkInterface};
use firepilot::builder::{Configuration, Builder};
use firepilot::builder::{drive::DriveBuilder, kernel::KernelBuilder};
use firepilot::builder::executor::FirecrackerExecutorBuilder;
let path = Path::new("examples/resources");
let kernel_path = path.join("kernel.bin");
let rootfs_path = path.join("rootfs.ext4");

// Configure the kernel in the micro VM
let kernel = KernelBuilder::new()
    .with_kernel_image_path(kernel_path.to_str().unwrap().to_string())
    .with_boot_args("reboot=k panic=1 pci=off".to_string())
    .try_build()
    .unwrap();
// Create a single drive that will be used as rootfs
let drive = DriveBuilder::new()
    .with_drive_id("rootfs".to_string())
    .with_path_on_host(rootfs_path)
    .as_read_only()
    .as_root_device()
    .try_build()
    .unwrap();
// Configure the executor that will be used to start the microVM
// only firecracker is available, but you could add a jailer executor
let executor = FirecrackerExecutorBuilder::new()
    .with_chroot("./examples/executor/".to_string())
    .with_exec_binary(PathBuf::from("/usr/bin/firecracker"))
    .try_build()
    .unwrap();
// Execute the builder pattern to create the configuration which can be used
// to create a [Machine]
let config = Configuration::new("simple_vm".to_string())
    .with_kernel(kernel)
    .with_executor(executor)
    .with_drive(drive);

Modules

Structs

  • Configuration object which represent a microVM configuration, when using the Builder the final object is this one.

Enums

Traits

  • Generic trait which all builder componenet must implement in order to be part of Configuration