2 Commits
1.0.4 ... 1.0.5

Author SHA1 Message Date
f67342de1a Bump version 2023-08-23 21:33:56 +03:00
98c48af331 Fixed brace expansion 2023-08-23 21:33:14 +03:00
3 changed files with 30 additions and 15 deletions

View File

@ -1,6 +1,6 @@
[package] [package]
name = "rexec" name = "rexec"
version = "1.0.4" version = "1.0.5"
readme = "https://github.com/house-of-vanity/rexec#readme" readme = "https://github.com/house-of-vanity/rexec#readme"
edition = "2021" edition = "2021"
description = "Parallel SSH executor" description = "Parallel SSH executor"

View File

@ -1,6 +1,6 @@
# Maintainer: AB <gh@hexor.ru> # Maintainer: AB <gh@hexor.ru>
pkgname=rexec pkgname=rexec
pkgver=1.0.1.r9.g0d95364 pkgver=1.0.4.r0.g3cf1e79
pkgrel=1 pkgrel=1
pkgdesc="Parallel SSH executor" pkgdesc="Parallel SSH executor"
url="https://github.com/house-of-vanity/rexec" url="https://github.com/house-of-vanity/rexec"

View File

@ -24,7 +24,11 @@ struct Args {
#[arg(short, long, default_value_t = whoami::username())] #[arg(short, long, default_value_t = whoami::username())]
username: String, username: String,
#[arg(short, long, help = "Use known_hosts to build servers list instead of string expansion.")] #[arg(
short,
long,
help = "Use known_hosts to build servers list instead of string expansion."
)]
known_hosts: bool, known_hosts: bool,
#[arg( #[arg(
@ -91,15 +95,21 @@ fn expand_string(s: &str) -> Vec<Host> {
while let Some(r) = result.iter().find(|s| s.contains('[')) { while let Some(r) = result.iter().find(|s| s.contains('[')) {
let r = r.clone(); let r = r.clone();
let start = r.find(']').unwrap(); let start = r.find('[').unwrap();
let end = match r.find(']') { let end = match r[start..].find(']') {
None => { None => {
error!("Error parsing host expression. Wrong range expansion '[a:b]'"); error!("Error parsing host expression. Wrong range expansion '[a:b]'");
process::exit(1); process::exit(1);
} }
Some(s) => s Some(s) => s + start,
};
let colon = match r[start..end].find(':') {
None => {
error!("Error parsing host expression. Missing colon in range expansion '[a:b]'");
process::exit(1);
}
Some(c) => c + start,
}; };
let colon = r.find(':').unwrap();
let low = r[start + 1..colon].parse::<i32>().unwrap(); let low = r[start + 1..colon].parse::<i32>().unwrap();
let high = r[colon + 1..end].parse::<i32>().unwrap(); let high = r[colon + 1..end].parse::<i32>().unwrap();
result.retain(|s| s != &r); result.retain(|s| s != &r);
@ -117,7 +127,7 @@ fn expand_string(s: &str) -> Vec<Host> {
error!("Error parsing host expression. Wrong range expansion '{{one,two}}'"); error!("Error parsing host expression. Wrong range expansion '{{one,two}}'");
process::exit(1); process::exit(1);
} }
Some(s) => s Some(s) => s,
}; };
let list = &r[start + 1..end]; let list = &r[start + 1..end];
result.retain(|s| s != &r); result.retain(|s| s != &r);
@ -136,7 +146,6 @@ fn expand_string(s: &str) -> Vec<Host> {
hosts hosts
} }
fn main() { fn main() {
env_logger::Builder::from_env(Env::default().default_filter_or("info")) env_logger::Builder::from_env(Env::default().default_filter_or("info"))
.format_timestamp(None) .format_timestamp(None)
@ -172,7 +181,13 @@ fn main() {
let mut massh_hosts: Vec<MasshHostConfig> = vec![]; let mut massh_hosts: Vec<MasshHostConfig> = vec![];
let mut hosts_and_ips: HashMap<IpAddr, String> = HashMap::new(); let mut hosts_and_ips: HashMap<IpAddr, String> = HashMap::new();
if args.parallel != 100 { if args.parallel != 100 {
warn!("Parallelism: {} thread{}", &args.parallel, {if args.parallel != 1 {"s."} else {"."}}); warn!("Parallelism: {} thread{}", &args.parallel, {
if args.parallel != 1 {
"s."
} else {
"."
}
});
} }
info!("Matched hosts:"); info!("Matched hosts:");