diff --git a/src/bin/proxmox-backup-manager.rs b/src/bin/proxmox-backup-manager.rs index d3e08ccb..756d3763 100644 --- a/src/bin/proxmox-backup-manager.rs +++ b/src/bin/proxmox-backup-manager.rs @@ -365,6 +365,8 @@ fn network_commands() -> CommandLineInterface { .fixed_param("node", String::from("localhost")) .arg_param(&["iface"]) .completion_cb("iface", config::network::complete_interface_name) + .completion_cb("bridge_ports", config::network::complete_port_list) + .completion_cb("slaves", config::network::complete_port_list) ) .insert( "update", @@ -372,6 +374,8 @@ fn network_commands() -> CommandLineInterface { .fixed_param("node", String::from("localhost")) .arg_param(&["iface"]) .completion_cb("iface", config::network::complete_interface_name) + .completion_cb("bridge_ports", config::network::complete_port_list) + .completion_cb("slaves", config::network::complete_port_list) ) .insert( "remove", diff --git a/src/config/network.rs b/src/config/network.rs index 59d81e91..ba97a71c 100644 --- a/src/config/network.rs +++ b/src/config/network.rs @@ -532,6 +532,25 @@ pub fn complete_interface_name(_arg: &str, _param: &HashMap) -> } } + +pub fn complete_port_list(arg: &str, _param: &HashMap) -> Vec { + let mut ports = Vec::new(); + match config() { + Ok((data, _digest)) => { + for (iface, interface) in data.interfaces.iter() { + if interface.interface_type == NetworkInterfaceType::Eth { + ports.push(iface.to_string()); + } + } + } + Err(_) => return vec![], + }; + + let arg = arg.clone().trim(); + let prefix = if let Some(idx) = arg.rfind(",") { &arg[..idx+1] } else { "" }; + ports.iter().map(|port| format!("{}{}", prefix, port)).collect() +} + #[cfg(test)] mod test {