diff --git a/harmony/src/modules/helm/command.rs b/harmony/src/modules/helm/command.rs index 84c13b7..618f4a3 100644 --- a/harmony/src/modules/helm/command.rs +++ b/harmony/src/modules/helm/command.rs @@ -1,8 +1,10 @@ use std::collections::HashMap; +use std::env::temp_dir; use std::ffi::OsStr; use std::io::ErrorKind; use std::path::{Path, PathBuf}; use std::process::{Command, Output}; +use temp_dir::{self, TempDir}; #[derive(Clone)] pub struct HelmCommandExecutor { @@ -18,8 +20,8 @@ pub struct HelmCommandExecutor { #[derive(Clone)] pub struct HelmGlobals { - chart_home: PathBuf, - config_home: PathBuf, + pub chart_home: Option, + pub config_home: Option, } #[derive(Clone)] @@ -42,12 +44,16 @@ pub struct HelmChart { } impl HelmCommandExecutor { - pub fn generate(&self) -> Result { + pub fn generate(mut self) -> Result { + if self.globals.chart_home.is_none() { + self.globals.chart_home = Some(PathBuf::from("charts")); + } + if self .clone() .chart .clone() - .chart_exists_locally(self.clone().globals.chart_home) + .chart_exists_locally(self.clone().globals.chart_home.unwrap()) .is_none() { if self.chart.repo.is_none() { @@ -59,14 +65,14 @@ impl HelmCommandExecutor { self.clone().run_command( self.chart .clone() - .pull_command(self.globals.chart_home.clone()), + .pull_command(self.globals.chart_home.clone().unwrap()), )?; } self.clone().run_command( self.chart .clone() - .helm_args(self.globals.chart_home.clone()), + .helm_args(self.globals.chart_home.clone().unwrap()), ) } @@ -85,17 +91,22 @@ impl HelmCommandExecutor { } } + let config_home = match self.globals.config_home { + Some(p) => p, + None => PathBuf::from(TempDir::new()?.path()), + }; + self.env.insert( "HELM_CONFIG_HOME".to_string(), - self.globals.config_home.to_str().unwrap().to_string(), + config_home.to_str().unwrap().to_string(), ); self.env.insert( "HELM_CACHE_HOME".to_string(), - self.globals.config_home.to_str().unwrap().to_string(), + config_home.to_str().unwrap().to_string(), ); self.env.insert( "HELM_DATA_HOME".to_string(), - self.globals.config_home.to_str().unwrap().to_string(), + config_home.to_str().unwrap().to_string(), ); Command::new(self.path).envs(self.env).args(args).output()