diff --git a/runaway-cli/Cargo.toml b/runaway-cli/Cargo.toml index d57ac125735cc0e3fbba551450e2b8d18d6e152d..7e65ed4cb988f5ae3f02b8eea9af0c64ab0faa05 100644 --- a/runaway-cli/Cargo.toml +++ b/runaway-cli/Cargo.toml @@ -23,4 +23,5 @@ tracing = "0.1.10" tracing-attributes = "0.1.5" tracing-futures = {version = "0.1.0", features=["futures-preview"]} openssl-probe = "0.1.2" +path_abs = "0.5.0" liborchestra = { path = "../liborchestra"} diff --git a/runaway-cli/src/subcommands/batch.rs b/runaway-cli/src/subcommands/batch.rs index a011b211d20dae53f2213be4e69618d24100837b..e3ad28c0316b4313624ddd4b8b3680a6f4f9bff8 100644 --- a/runaway-cli/src/subcommands/batch.rs +++ b/runaway-cli/src/subcommands/batch.rs @@ -32,6 +32,7 @@ use rand::{self, Rng}; use std::io::Write; use tracing::{self, error, debug, info, warn}; use liborchestra::commons::format_env; +use path_abs::PathAbs; //--------------------------------------------------------------------------------------- SUBCOMMAND @@ -430,7 +431,7 @@ async fn perform_on_node(store: EnvironmentStore, let mut store = store; push_env(&mut store, "RUNAWAY_ARGUMENTS", arguments); - + // We generate an uuid let id = uuid::Uuid::new_v4().hyphenated().to_string(); push_env(&mut store, "RUNAWAY_UUID", id.clone()); @@ -518,7 +519,9 @@ async fn perform_on_node(store: EnvironmentStore, local_output_folder = remote_folder.clone(); } else { let local_output_string = substitute_environment(&execution_context.envs, output_folder_pattern.as_str()); - local_output_folder = to_exit!(PathBuf::from(local_output_string).canonicalize(), Exit::OutputFolder)?; + let abs_local_output_folder = to_exit!(PathAbs::new(local_output_string), Exit::OutputFolder)?; + let abs_local_output_folder: &PathBuf = abs_local_output_folder.as_ref(); + local_output_folder = abs_local_output_folder.to_owned(); } debug!("Local output folder set to: {}", local_output_folder.to_str().unwrap()); if !local_output_folder.exists(){ @@ -606,13 +609,12 @@ fn unpacks_fetch_post_proc(matches: &clap::ArgMatches<'_>, // We execute the post processing debug!("Executing post script"); let command_string = if matches.is_present("post-script"){ - let path_str = PathBuf::from(matches.value_of("post-script").unwrap()) - .canonicalize() - .unwrap() - .to_str() + let path = PathBuf::from(matches.value_of("post-script").unwrap()); + let path = to_exit!(path.canonicalize(), Exit::PostScriptPath)?; + let path = path.to_str() .unwrap() .to_owned(); - format!("bash {}", path_str) + format!("bash {}", path) } else { matches.value_of("post-command").unwrap().to_owned() }; diff --git a/runaway-cli/src/subcommands/sched.rs b/runaway-cli/src/subcommands/sched.rs index b48283854004f8261c90fd1733b91155d9b1162a..6aed550824c0e504b4a811125583d63cbe3bcda8 100644 --- a/runaway-cli/src/subcommands/sched.rs +++ b/runaway-cli/src/subcommands/sched.rs @@ -32,6 +32,7 @@ use std::convert::TryInto; use rand::{self, Rng}; use std::io::Write; use tracing::{self, info, error, debug}; +use path_abs::PathAbs; //--------------------------------------------------------------------------------------- SUBCOMMAND @@ -459,7 +460,9 @@ async fn perform_on_node(store: EnvironmentStore, local_output_folder = remote_folder.clone(); } else { let local_output_string = substitute_environment(&execution_context.envs, output_folder_pattern); - local_output_folder = to_exit!(PathBuf::from(local_output_string).canonicalize(), Exit::OutputFolder)?; + let abs_local_output_folder = to_exit!(PathAbs::new(local_output_string), Exit::OutputFolder)?; + let abs_local_output_folder: &PathBuf = abs_local_output_folder.as_ref(); + local_output_folder = abs_local_output_folder.to_owned(); } debug!("Local output folder set to: {}", local_output_folder.to_str().unwrap());