diff options
Diffstat (limited to 'zoned/src/http.rs')
-rw-r--r-- | zoned/src/http.rs | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/zoned/src/http.rs b/zoned/src/http.rs index df82908..4ed289a 100644 --- a/zoned/src/http.rs +++ b/zoned/src/http.rs @@ -5,7 +5,7 @@ use axum::{ routing::{get, post}, Json, Router, }; -use std::sync::Arc; +use std::{process::Command, sync::Arc}; use tracing::{info, instrument, warn}; use zone_core::{CloneOptions, Container, ContainerOptions, ContainerStatus, FilterContainer}; @@ -73,6 +73,20 @@ async fn clone_container( let name = format!("{}-{}", container.user, id); let root = state.zfs.clone_latest(name, (&container.template).into())?; + if let Some(script) = &state.config.init_script { + Command::new(script) + .env("DIRECTORY", &root) + .env("USER", &container.user) + .env("TEMPLATE", &container.template) + .status()? + .code() + .map_or(Ok(()), |code| { + Err(Error::Script(format!( + "Script exited with status code: {}", + code + ))) + })?; + }; let name = format!("{}-{}-{}", container.template, container.user, id); state.nspawn.create(root, name)?; |