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

Using vm-manager as a Crate

The vm-manager library can be used as a Rust dependency for building custom VM management tools.

Add the Dependency

[dependencies]
vm-manager = { path = "crates/vm-manager" }
# or from a git repository:
# vm-manager = { git = "https://github.com/user/vm-manager.git" }

Re-Exports

The crate root re-exports the most commonly used types:

#![allow(unused)]
fn main() {
use vm_manager::{
    // Hypervisor abstraction
    Hypervisor, ConsoleEndpoint, RouterHypervisor,
    // Error handling
    VmError, Result,
    // Core types
    BackendTag, VmSpec, VmHandle, VmState,
    NetworkConfig, CloudInitConfig, SshConfig,
};
}

Minimal Example

use vm_manager::{RouterHypervisor, Hypervisor, VmSpec, NetworkConfig};
use std::time::Duration;

#[tokio::main]
async fn main() -> vm_manager::Result<()> {
    // Create a hypervisor (platform-detected)
    let hyp = RouterHypervisor::new(None, "rpool".into());

    // Define a VM
    let spec = VmSpec {
        name: "example".into(),
        image_path: "/path/to/image.qcow2".into(),
        vcpus: 2,
        memory_mb: 2048,
        disk_gb: Some(20),
        network: NetworkConfig::User,
        cloud_init: None,
        ssh: None,
    };

    // Lifecycle
    let handle = hyp.prepare(&spec).await?;
    let handle = hyp.start(&handle).await?;

    // ... use the VM ...

    hyp.stop(&handle, Duration::from_secs(30)).await?;
    hyp.destroy(handle).await?;

    Ok(())
}

Feature Flags

FeatureEffect
pure-isoUse pure-Rust ISO generation instead of genisoimage/mkisofs