aboutsummaryrefslogtreecommitdiffstats
path: root/zoned/src/http.rs
diff options
context:
space:
mode:
Diffstat (limited to 'zoned/src/http.rs')
-rw-r--r--zoned/src/http.rs16
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)?;