5 Commits
async ... 1.0.4

Author SHA1 Message Date
3cf1e79883 Added pkgbuild 2023-08-14 19:19:00 +03:00
0d95364e50 Added pkgbuild 2023-08-14 19:10:34 +03:00
48635fc091 Added PKGBUILD 2023-08-14 18:23:12 +03:00
5ed62d9323 Fix some error handling 2023-08-02 16:29:37 +03:00
c635ed0dd0 Fix some error handling 2023-07-31 12:10:36 +03:00
6 changed files with 57 additions and 7 deletions

2
.gitignore vendored
View File

@ -1 +1,3 @@
target
pkg
*zst

View File

@ -6,6 +6,12 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
## [1.0.4] - 2023-08-14
### Changed
- Expansion host strings.
## [1.0.1] - 2023-06-20
### Changed

2
Cargo.lock generated
View File

@ -1043,7 +1043,7 @@ checksum = "436b050e76ed2903236f032a59761c1eb99e1b0aead2c257922771dab1fc8c78"
[[package]]
name = "rexec"
version = "1.0.2"
version = "1.0.4"
dependencies = [
"brace-expand",
"clap 4.3.4",

View File

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

25
PKGBUILD Normal file
View File

@ -0,0 +1,25 @@
# Maintainer: AB <gh@hexor.ru>
pkgname=rexec
pkgver=1.0.1.r9.g0d95364
pkgrel=1
pkgdesc="Parallel SSH executor"
url="https://github.com/house-of-vanity/rexec"
license=("WTFPL")
arch=("x86_64")
makedepends=("cargo")
pkgver() {
(git describe --long --tags || echo "$pkgver") | sed 's/^v//;s/\([^-]*-g\)/r\1/;s/-/./g'
}
build() {
return 0
}
package() {
cd ..
usrdir="$pkgdir/usr"
mkdir -p $usrdir
cargo install --no-track --path . --root "$usrdir"
}

View File

@ -24,13 +24,13 @@ struct Args {
#[arg(short, long, default_value_t = whoami::username())]
username: String,
#[arg(short, long, help = "Use known_hosts to build servers list")]
#[arg(short, long, help = "Use known_hosts to build servers list instead of string expansion.")]
known_hosts: bool,
#[arg(
short,
long,
help = "Expression to build server list. List and range expansion available. Example: 'web-[1:12]-io-{prod,dev}'"
help = "Expression to build server list. List and range expansion are supported. Example: 'web-[1:12]-io-{prod,dev}'"
)]
expression: String,
@ -91,8 +91,14 @@ fn expand_string(s: &str) -> Vec<Host> {
while let Some(r) = result.iter().find(|s| s.contains('[')) {
let r = r.clone();
let start = r.find('[').unwrap();
let end = r.find(']').unwrap();
let start = r.find(']').unwrap();
let end = match r.find(']') {
None => {
error!("Error parsing host expression. Wrong range expansion '[a:b]'");
process::exit(1);
}
Some(s) => s
};
let colon = r.find(':').unwrap();
let low = r[start+1..colon].parse::<i32>().unwrap();
let high = r[colon+1..end].parse::<i32>().unwrap();
@ -106,7 +112,13 @@ fn expand_string(s: &str) -> Vec<Host> {
while let Some(r) = result.iter().find(|s| s.contains('{')) {
let r = r.clone();
let start = r.find('{').unwrap();
let end = r.find('}').unwrap();
let end = match r.find('}') {
None => {
error!("Error parsing host expression. Wrong range expansion '{{one,two}}'");
process::exit(1);
}
Some(s) => s
};
let list = &r[start+1..end];
result.retain(|s| s != &r);
for val in expand_list(list) {
@ -159,6 +171,10 @@ fn main() {
// Build MasshHostConfig hostnames list
let mut massh_hosts: Vec<MasshHostConfig> = vec![];
let mut hosts_and_ips: HashMap<IpAddr, String> = HashMap::new();
if args.parallel != 100 {
warn!("Parallelism: {} thread{}", &args.parallel, {if args.parallel != 1 {"s."} else {"."}});
}
info!("Matched hosts:");
for host in matched_hosts.iter() {
let ip = match lookup_host(&host.name) {