Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -21,4 +21,5 @@ regex = "1.10.4"
tempfile = "3.10.1"
ctrlc = "3.4"
cli-table = "0.4"
inquire = "0.7.5"
inquire = "0.7.5"
log = "0.4.22"
27 changes: 24 additions & 3 deletions src/groups_config.rs
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ pub fn unified_node_list(items: Vec<String>) -> Vec<String> {
sorted_vec
}

pub fn dump_groups_for_completion(){
pub fn dump_groups_for_completion() {
let groups_map = get_groups_and_nodes(vec!["all".to_string()]);
let groups: Vec<String> = groups_map.keys().cloned().collect();
println!("{}", groups.join(" "));
Expand Down Expand Up @@ -57,7 +57,7 @@ fn get_groups_and_nodes(items: Vec<String>) -> HashMap<String, Vec<String>> {
select_all = true;
}

let re = Regex::new(r"^([a-z0-9-]+)\s*:\s*([a-z0-9-,\s]+)(#.*)?").unwrap();
let re = Regex::new(r"^([a-z0-9-.]+)\s*:\s*([a-z0-9-.,%\s]+)(#.*)?").unwrap();

for cfg_file in &cfg_files {
if let Ok(lines) = utils::read_lines(cfg_file) {
Expand All @@ -82,5 +82,26 @@ fn get_groups_and_nodes(items: Vec<String>) -> HashMap<String, Vec<String>> {
}
}
}
groups_map
resolve_aliases_from_map(&mut groups_map)
}

fn resolve_aliases_from_map(groups_map: &mut HashMap<String, Vec<String>>) -> HashMap<String, Vec<String>> {
let mut groups_map_resolved = std::collections::HashMap::new();
for (group_name, unresolved_items) in groups_map.iter() {
let mut nodes_final = Vec::new();
for unresolved_item in unresolved_items {
if unresolved_item.starts_with("%") {
let group_alias = unresolved_item.strip_prefix('%').unwrap();
let nodes_resolved = groups_map.get(group_alias).unwrap();
nodes_final.append(&mut nodes_resolved.clone());
} else {
nodes_final.push(unresolved_item.clone());
}
}
let group = groups_map_resolved
.entry(group_name.to_string())
.or_insert(Vec::new());
group.extend(nodes_final);
}
groups_map_resolved
}
9 changes: 9 additions & 0 deletions src/parameters.rs
Original file line number Diff line number Diff line change
Expand Up @@ -44,6 +44,15 @@ use std::process::exit;

Default search order: ~/.hostctl/hostctl.conf, <HOSTCTL BINARY DIRECTORY>/hostctl.conf

The format of this file looks like this:

# <Goupname>: <Host>, <Host>, %<Group>, ...
private: vim.org, 256bit.org, blinky, vim.linetics.de
private-test: 213.95.54.132
# Combine the hosts of both of the previous groups
private-all: %private-test, %private


"###
)]
pub struct CommandLineArgs {
Expand Down
Loading