Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

VMFile Parsing API

The VMFile module parses and resolves VMFile.kdl configuration files. Located in crates/vm-manager/src/vmfile.rs.

Types

VmFile

#![allow(unused)]
fn main() {
pub struct VmFile {
    pub base_dir: PathBuf,
    pub vms: Vec<VmDef>,
}
}

VmDef

#![allow(unused)]
fn main() {
pub struct VmDef {
    pub name: String,
    pub image: ImageSource,
    pub vcpus: u16,
    pub memory_mb: u64,
    pub disk_gb: Option<u32>,
    pub network: NetworkDef,
    pub cloud_init: Option<CloudInitDef>,
    pub ssh: Option<SshDef>,
    pub provisions: Vec<ProvisionDef>,
}
}

ImageSource

#![allow(unused)]
fn main() {
pub enum ImageSource {
    Local(String),
    Url(String),
}
}

ProvisionDef

#![allow(unused)]
fn main() {
pub enum ProvisionDef {
    Shell(ShellProvision),
    File(FileProvision),
}

pub struct ShellProvision {
    pub inline: Option<String>,
    pub script: Option<String>,
}

pub struct FileProvision {
    pub source: String,
    pub destination: String,
}
}

Functions

discover

#![allow(unused)]
fn main() {
pub fn discover(explicit: Option<&Path>) -> Result<PathBuf>
}

Finds the VMFile. If explicit is provided, uses that path. Otherwise, looks for VMFile.kdl in the current directory.

parse

#![allow(unused)]
fn main() {
pub fn parse(path: &Path) -> Result<VmFile>
}

Parses a VMFile.kdl into a VmFile struct. Validates:

  • At least one vm block.
  • No duplicate VM names.
  • Each VM has a valid image source.
  • Provisioner blocks are well-formed.

resolve

#![allow(unused)]
fn main() {
pub async fn resolve(def: &VmDef, base_dir: &Path) -> Result<VmSpec>
}

Converts a VmDef into a VmSpec ready for the hypervisor:

  • Downloads images from URLs.
  • Resolves local image paths.
  • Generates Ed25519 SSH keypairs if needed.
  • Reads cloud-init user-data files.
  • Resolves all relative paths against base_dir.

Utility Functions

#![allow(unused)]
fn main() {
pub fn expand_tilde(s: &str) -> PathBuf
}

Expands ~ to the user's home directory.

#![allow(unused)]
fn main() {
pub fn resolve_path(raw: &str, base_dir: &Path) -> PathBuf
}

Expands tilde and makes relative paths absolute against base_dir.

#![allow(unused)]
fn main() {
pub fn generate_ssh_keypair(vm_name: &str) -> Result<(String, String)>
}

Generates an Ed25519 keypair. Returns (public_key_openssh, private_key_pem).