use std::net::{IpAddr, Ipv4Addr}; use brocade::BrocadeOptions; use harmony_secret::{Secret, SecretManager}; use harmony_types::switch::PortLocation; use serde::{Deserialize, Serialize}; #[derive(Secret, Clone, Debug, Serialize, Deserialize)] struct BrocadeSwitchAuth { username: String, password: String, } #[tokio::main] async fn main() { env_logger::Builder::from_env(env_logger::Env::default().default_filter_or("info")).init(); // let ip = IpAddr::V4(Ipv4Addr::new(10, 0, 0, 250)); // old brocade @ ianlet let ip = IpAddr::V4(Ipv4Addr::new(192, 168, 55, 101)); // brocade @ sto1 // let ip = IpAddr::V4(Ipv4Addr::new(192, 168, 4, 11)); // brocade @ st let switch_addresses = vec![ip]; let config = SecretManager::get_or_prompt::() .await .unwrap(); let brocade = brocade::init( &switch_addresses, 22, &config.username, &config.password, Some(BrocadeOptions { dry_run: true, ..Default::default() }), ) .await .expect("Brocade client failed to connect"); let entries = brocade.get_stack_topology().await.unwrap(); println!("Stack topology: {entries:#?}"); let entries = brocade.get_interfaces().await.unwrap(); println!("Interfaces: {entries:#?}"); let version = brocade.version().await.unwrap(); println!("Version: {version:?}"); println!("--------------"); let mac_adddresses = brocade.get_mac_address_table().await.unwrap(); println!("VLAN\tMAC\t\t\tPORT"); for mac in mac_adddresses { println!("{}\t{}\t{}", mac.vlan, mac.mac_address, mac.port); } println!("--------------"); let channel_name = "1"; brocade.clear_port_channel(channel_name).await.unwrap(); println!("--------------"); let channel_id = brocade.find_available_channel_id().await.unwrap(); println!("--------------"); let channel_name = "HARMONY_LAG"; let ports = [PortLocation(2, 0, 35)]; brocade .create_port_channel(channel_id, channel_name, &ports) .await .unwrap(); }