Mentions légales du service

Skip to content
Snippets Groups Projects
Commit 4ce89804 authored by PERE Alexandre's avatar PERE Alexandre
Browse files

Merge branch '1-leave-tar-option' into 'master'

Resolve "Leave tar option"

Closes #1

See merge request !5
parents e0bb907a 7cf31dcc
No related branches found
No related tags found
1 merge request!5Resolve "Leave tar option"
......@@ -197,14 +197,11 @@ async fn fetch_data(node: DropBack<Expire<RemoteHandle>>,
Ok(())
}
/// Cleans data on both local and remote hand.
async fn cleaning_data(node: DropBack<Expire<RemoteHandle>>,
remote_dir: String,
remote_defl: String,
input_path: path::PathBuf,
output_path: path::PathBuf,
leave_config: LeaveConfig,
keep_send: bool) -> Result<(), String>{
/// Cleans data on remote hand.
async fn clean_data(node: DropBack<Expire<RemoteHandle>>,
remote_dir: String,
remote_defl: String,
leave_config: LeaveConfig) -> Result<(), String>{
info!("Job: Cleaning...");
match leave_config{
LeaveConfig::Nothing => {
......@@ -220,12 +217,6 @@ async fn cleaning_data(node: DropBack<Expire<RemoteHandle>>,
}
LeaveConfig::Everything => {}
}
if !keep_send{
std::fs::remove_file(&input_path.join(SEND_ARCH_RPATH))
.map_err(|e| format!("Failed to remove send archive"))?;
}
std::fs::remove_file(&output_path.join(FETCH_ARCH_RPATH))
.map_err(|e| format!("Failed to remove the fetch archive"))?;
Ok(())
}
......@@ -261,8 +252,8 @@ fn exec(matches: &clap::ArgMatches) -> i32 {
install_ctrlc_handler(host.clone());
let leave = LeaveConfig::from(matches.value_of("leave").unwrap());
let leave_tar = matches.is_present("leave-tars");
let script_path = matches.value_of("SCRIPT").unwrap();
let parameters = matches.value_of("parameters").unwrap_or("");
let script_abs_path = try_return_code!(std::fs::canonicalize(script_path),
......@@ -309,13 +300,14 @@ fn exec(matches: &clap::ArgMatches) -> i32 {
remote_fetch.to_str().unwrap().to_owned(),
remote_ignore.to_str().unwrap().to_owned(),
script_folder.into()).await);
try_return_err!(cleaning_data(node.clone(),
remote_dir.to_str().unwrap().to_owned(),
remote_defl.to_str().unwrap().to_owned(),
script_folder.into(),
script_folder.into(),
leave,
false).await);
try_return_err!(clean_data(node.clone(),
remote_dir.to_str().unwrap().to_owned(),
remote_defl.to_str().unwrap().to_owned(),
leave).await);
if !leave_tar{
std::fs::remove_file(script_folder.join(SEND_ARCH_RPATH)).unwrap();
std::fs::remove_file(script_folder.join(FETCH_ARCH_RPATH)).unwrap();
}
Ok(out.status.code().unwrap_or(911))
};
let out = try_return_code!(block_on(future),
......@@ -352,6 +344,7 @@ fn batch(matches: &clap::ArgMatches) -> i32 {
install_ctrlc_handler(host.clone());
let leave = LeaveConfig::from(matches.value_of("leave").unwrap());
let leave_tars = matches.is_present("leave-tars");
let script_path = matches.value_of("SCRIPT").unwrap();
......@@ -429,10 +422,10 @@ fn batch(matches: &clap::ArgMatches) -> i32 {
"failed to send data",
13);
let l = match leave{
LeaveConfig::Everything => LeaveConfig::Everything,
LeaveConfig::Nothing => LeaveConfig::Code,
LeaveConfig::Code => LeaveConfig::Code,
let l = match leave{
LeaveConfig::Everything => LeaveConfig::Everything,
LeaveConfig::Nothing => LeaveConfig::Code,
LeaveConfig::Code => LeaveConfig::Code,
};
let len = outputs.len();
......@@ -484,13 +477,10 @@ fn batch(matches: &clap::ArgMatches) -> i32 {
remote_fetch.to_str().unwrap().to_owned(),
remote_ignore.to_str().unwrap().to_owned(),
b.clone()).await);
try_return_err!(cleaning_data(node.clone(),
remote_dir.to_str().unwrap().to_owned(),
remote_defl.to_str().unwrap().to_owned(),
script_folder.into(),
b.clone(),
l,
true).await);
try_return_err!(clean_data(node.clone(),
remote_dir.to_str().unwrap().to_owned(),
remote_defl.to_str().unwrap().to_owned(),
l).await);
let mut stdout_file = std::fs::File::create(b.join("stdout")).unwrap();
stdout_file.write_all(&out.stdout).unwrap();
let mut stderr_file = std::fs::File::create(b.join("stderr")).unwrap();
......@@ -498,6 +488,10 @@ fn batch(matches: &clap::ArgMatches) -> i32 {
let mut ecode_file = std::fs::File::create(b.join("ecode")).unwrap();
ecode_file.write_all(format!("{}", out.status.code().unwrap_or(911)).as_bytes()).unwrap();
if !leave_tars{
std::fs::remove_file(b.join(FETCH_ARCH_RPATH)).unwrap();
}
Ok(out.status.code().unwrap_or(911))
};
let handle = try_return_code!(executor.spawn_with_handle(future).map_err(|e| format!("{:?}", e)),
......@@ -518,6 +512,9 @@ fn batch(matches: &clap::ArgMatches) -> i32 {
.async_exec(format!("rm -rf {}", remote_dir.to_str().unwrap())))
.map_err(|e| error!("Failed to remove code."));
}
if !leave_tars{
std::fs::remove_file(script_folder.join(SEND_ARCH_RPATH)).unwrap();
}
if completed == len{
eprintln!("runaway: brought all jobs to completion.");
return 0;
......@@ -713,7 +710,7 @@ fn install_completion(application: clap::App) -> i32 {
}
Err(e) => {
eprintln!("runaway: shell {} is not available for completion. Use bash or zsh.", e);
std::process::exit(553);
return 553;
}
_ => unreachable!()
}
......@@ -802,15 +799,13 @@ fn main(){
.about("Install bash completion script"))
.subcommand(clap::SubCommand::with_name("exec")
.about("Runs a single execution on a remote host")
.arg(clap::Arg::with_name("SCRIPT")
.help("File name of the script to be executed")
.index(2)
.required(true))
.arg(clap::Arg::with_name("REMOTE")
.help("Name of remote profile to execute script with")
.index(1)
.possible_values(&profiles.iter().map(|a| a.as_str()).collect::<Vec<_>>()[..])
.required(true))
.arg(clap::Arg::with_name("SCRIPT")
.help("File name of the script to be executed")
.required(true))
.arg(clap::Arg::with_name("verbose")
.long("verbose")
.help("Print light logs"))
......@@ -820,6 +815,9 @@ fn main(){
.arg(clap::Arg::with_name("vvverbose")
.long("vvverbose")
.help("Print all logs"))
.arg(clap::Arg::with_name("leave-tars")
.long("leave-tars")
.help("Leave transfered tar files to debug .*ignore files."))
.arg(clap::Arg::with_name("leave")
.short("l")
.long("leave")
......@@ -827,28 +825,25 @@ fn main(){
.possible_value("nothing")
.possible_value("code")
.possible_value("everything")
.required(true)
.default_value("everything")
.default_value("nothing")
.help("What to leave on the remote host after execution"))
.arg(clap::Arg::with_name("parameters")
.help("Script parameters. In normal mode, it should be written as they would \
be for the program to execute. In batch mode, you can use a product \
parameters string.")
.multiple(true)
.allow_hyphen_values(true)
.last(true))
.arg(clap::Arg::with_name("parameters")
.help("Script parameters. In normal mode, it should be written as they would \
be for the program to execute. In batch mode, you can use a product \
parameters string.")
.multiple(true)
.allow_hyphen_values(true)
.last(true))
)
.subcommand(clap::SubCommand::with_name("batch")
.about("Runs a batch of executions on a remote host")
.arg(clap::Arg::with_name("SCRIPT")
.help("File name of the script to be executed")
.index(2)
.required(true))
.arg(clap::Arg::with_name("REMOTE")
.help("Name of remote profile to execute script with")
.index(1)
.possible_values(&profiles.iter().map(|a| a.as_str()).collect::<Vec<_>>()[..])
.required(true))
.arg(clap::Arg::with_name("SCRIPT")
.help("File name of the script to be executed")
.required(true))
.arg(clap::Arg::with_name("verbose")
.long("verbose")
.help("Print light logs"))
......@@ -861,6 +856,15 @@ fn main(){
.arg(clap::Arg::with_name("benchmark")
.long("benchmark")
.help("Print only allocations and executions messages for statistics purposes."))
.arg(clap::Arg::with_name("leave-tars")
.long("leave-tars")
.help("Leave transfered tar files to debug .*ignore files."))
.arg(clap::Arg::with_name("repeats")
.short("R")
.long("repeats")
.takes_value(true)
.default_value("1")
.help("The number of time every parameter must be repeated. Used with product string."))
.arg(clap::Arg::with_name("leave")
.short("l")
.long("leave")
......@@ -869,14 +873,8 @@ fn main(){
.possible_value("code")
.possible_value("everything")
.required(true)
.default_value("everything")
.default_value("nothing")
.help("What to leave on the remote host after execution"))
.arg(clap::Arg::with_name("repeats")
.short("R")
.long("repeats")
.takes_value(true)
.default_value("1")
.help("The number of time every parameter must be repeated. Used with product string."))
.arg(clap::Arg::with_name("parameters_file")
.short("f")
.long("parameters_file")
......@@ -893,11 +891,11 @@ fn main(){
.takes_value(true)
.default_value("batch")
.help("The output folder to put the executions result in."))
.arg(clap::Arg::with_name("parameters_string")
.help("Script parameters product string.")
.multiple(true)
.allow_hyphen_values(true)
.last(true))
.arg(clap::Arg::with_name("parameters_string")
.help("Script parameters product string.")
.multiple(true)
.allow_hyphen_values(true)
.last(true))
)
.subcommand(clap::SubCommand::with_name("test")
.about("Tests a remote profile")
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment