From b5ccd4e2aa7091b99ae71c4c995787308f3635d7d71f427f863bc4cee030fc78 Mon Sep 17 00:00:00 2001 From: Till Wegmueller Date: Tue, 7 Apr 2026 17:45:00 +0200 Subject: [PATCH] Pass work dir to vm-manager for container volume compatibility Configure vm-manager's QEMU backend to use /var/lib/solstice-ci as the data directory (matching the compose.yml volume mount) instead of the default ~/.local/share/vmctl/vms/ path. --- crates/orchestrator/src/main.rs | 7 ++++++- crates/orchestrator/src/vm_adapter.rs | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/crates/orchestrator/src/main.rs b/crates/orchestrator/src/main.rs index 1c60423..be70c61 100644 --- a/crates/orchestrator/src/main.rs +++ b/crates/orchestrator/src/main.rs @@ -186,7 +186,12 @@ async fn main() -> Result<()> { let capacity_map = parse_capacity_map(opts.capacity_map.as_deref()); // Build hypervisor via vm-manager adapter (QEMU direct, no libvirt) - let router = vm_adapter::VmManagerAdapter::build(opts.network_bridge.clone()); + // Work dir for VM overlays, QEMU sockets, and console logs. + // Defaults to /var/lib/solstice-ci (matches compose.yml volume mount). + let work_dir = Some(PathBuf::from( + std::env::var("ORCH_WORK_DIR").unwrap_or_else(|_| "/var/lib/solstice-ci".to_string()), + )); + let router = vm_adapter::VmManagerAdapter::build(opts.network_bridge.clone(), work_dir); // Initialize persistence (optional). Skip when requested for faster startup. let persist = if opts.skip_persistence { diff --git a/crates/orchestrator/src/vm_adapter.rs b/crates/orchestrator/src/vm_adapter.rs index 981ac65..86af8fb 100644 --- a/crates/orchestrator/src/vm_adapter.rs +++ b/crates/orchestrator/src/vm_adapter.rs @@ -20,15 +20,15 @@ pub struct VmManagerAdapter { } impl VmManagerAdapter { - /// Build a new adapter. Uses user-mode networking (SLIRP) for - /// containerization-friendly operation — no libvirt or bridge needed. /// Build a new adapter. /// /// `bridge` — optional bridge name for TAP networking (e.g. `"virbr0"`). /// If `None`, uses user-mode (SLIRP) networking with SSH port forwarding. - pub fn build(bridge: Option) -> Self { + /// `work_dir` — directory for VM overlays, sockets, and console logs. + /// Defaults to `~/.local/share/vmctl/vms/` if `None`. + pub fn build(bridge: Option, work_dir: Option) -> Self { Self { - inner: vm_manager::RouterHypervisor::new(bridge, None), + inner: vm_manager::RouterHypervisor::with_data_dir(bridge, None, work_dir), } } }