diff --git a/src/lib.rs b/src/lib.rs index 86bbbb1..ea384d3 100644 --- a/src/lib.rs +++ b/src/lib.rs @@ -4,4 +4,5 @@ pub mod minio; #[cfg(test)] pub mod minio_test_server; pub mod secrets; +pub mod temp; pub mod utils; diff --git a/src/minio.rs b/src/minio.rs index 17152d2..6111cd9 100644 --- a/src/minio.rs +++ b/src/minio.rs @@ -5,6 +5,7 @@ use serde::Deserialize; use crate::constants::{MC_EXE, SECRET_MINIO_BUCKET_ACCESS_LEN, SECRET_MINIO_BUCKET_SECRET_LEN}; use crate::crd::{BucketRetention, MinioBucketSpec, RetentionType}; +use crate::temp; use crate::utils::rand_str; const MC_ALIAS_NAME: &str = "managedminioinst"; @@ -173,7 +174,7 @@ impl MinioService { { log::debug!("exec_mc_cmd with args {:?}", args); - let conf_dir = mktemp::Temp::new_dir()?; + let conf_dir = temp::create_temp_dir()?; let global_flags = ["--config-dir", conf_dir.to_str().unwrap(), "--json"]; // First, set our alias to mc in a temporary directory @@ -458,7 +459,7 @@ impl MinioService { /// Apply a bucket policy pub async fn policy_apply(&self, name: &str, content: &str) -> anyhow::Result<()> { - let tmp_file = mktemp::Temp::new_file()?; + let tmp_file = temp::create_temp_file()?; std::fs::write(&tmp_file, content)?; let res = self diff --git a/src/minio_test_server.rs b/src/minio_test_server.rs index 1f61dfa..cb19ca4 100644 --- a/src/minio_test_server.rs +++ b/src/minio_test_server.rs @@ -3,6 +3,7 @@ //! Used for testing only use crate::minio::MinioService; +use crate::temp; use crate::utils::rand_str; use rand::RngCore; use std::io::ErrorKind; @@ -20,7 +21,7 @@ pub struct MinioTestServer { impl MinioTestServer { pub async fn start() -> anyhow::Result { - let storage_dir = mktemp::Temp::new_dir()?; + let storage_dir = temp::create_temp_dir()?; let root_user = rand_str(30); let root_password = rand_str(30); diff --git a/src/temp.rs b/src/temp.rs new file mode 100644 index 0000000..382b186 --- /dev/null +++ b/src/temp.rs @@ -0,0 +1,26 @@ +use std::path::{Path, PathBuf}; + +/// Get the directory where temp files should be created +fn temp_path() -> Option { + std::env::var("TEMP_DIR") + .as_deref() + .ok() + .map(Path::new) + .map(|p| p.to_path_buf()) +} + +/// Create a temporary directory +pub fn create_temp_dir() -> std::io::Result { + match temp_path() { + None => mktemp::Temp::new_dir(), + Some(p) => mktemp::Temp::new_dir_in(p), + } +} + +/// Create a temporary file +pub fn create_temp_file() -> std::io::Result { + match temp_path() { + None => mktemp::Temp::new_file(), + Some(p) => mktemp::Temp::new_file_in(p), + } +}