Instead of using the FrrConfigBuilder, derive bon::Builder on FrrConfig and directly build the FrrConfig there. Update the tests accordingly.
Signed-off-by: Gabriel Goller <[email protected]> --- proxmox-ve-config/src/sdn/frr.rs | 42 ---------- proxmox-ve-config/src/sdn/mod.rs | 2 - proxmox-ve-config/tests/fabric/main.rs | 101 +++++++++++++++---------- 3 files changed, 61 insertions(+), 84 deletions(-) delete mode 100644 proxmox-ve-config/src/sdn/frr.rs diff --git a/proxmox-ve-config/src/sdn/frr.rs b/proxmox-ve-config/src/sdn/frr.rs deleted file mode 100644 index 5d4e4b2ebdbd..000000000000 --- a/proxmox-ve-config/src/sdn/frr.rs +++ /dev/null @@ -1,42 +0,0 @@ -use std::collections::{BTreeMap, BTreeSet}; - -use proxmox_frr::ser::FrrConfig; - -use crate::common::valid::Valid; -use crate::sdn::fabric::{section_config::node::NodeId, FabricConfig}; - -/// Builder that helps constructing the FrrConfig. -/// -/// The goal is to have one struct collect all the rust-based configurations and then construct the -/// [`FrrConfig`] from it using the build method. In the future the controller configuration will -/// be added here as well. -#[derive(Default)] -pub struct FrrConfigBuilder { - fabrics: Valid<FabricConfig>, -} - -impl FrrConfigBuilder { - /// Add fabric configuration to the builder - pub fn add_fabrics(mut self, fabric: Valid<FabricConfig>) -> FrrConfigBuilder { - self.fabrics = fabric; - self - } - - /// Build the complete [`FrrConfig`] from this builder configuration given the hostname of the - /// node for which we want to build the config. We also inject the common fabric-level options - /// into the interfaces here. (e.g. the fabric-level "hello-interval" gets added to every - /// interface if there isn't a more specific one.) - pub fn build(self, current_node: NodeId) -> Result<FrrConfig, anyhow::Error> { - let mut frr_config = FrrConfig { - router: BTreeMap::new(), - interfaces: BTreeMap::new(), - access_lists: Vec::new(), - routemaps: Vec::new(), - protocol_routemaps: BTreeSet::new(), - }; - - crate::sdn::fabric::frr::build_fabric(current_node, self.fabrics, &mut frr_config)?; - - Ok(frr_config) - } -} diff --git a/proxmox-ve-config/src/sdn/mod.rs b/proxmox-ve-config/src/sdn/mod.rs index 4586c56358ef..86dcd938c92c 100644 --- a/proxmox-ve-config/src/sdn/mod.rs +++ b/proxmox-ve-config/src/sdn/mod.rs @@ -1,7 +1,5 @@ pub mod config; pub mod fabric; -#[cfg(feature = "frr")] -pub mod frr; pub mod ipam; use std::{error::Error, fmt::Display, str::FromStr}; diff --git a/proxmox-ve-config/tests/fabric/main.rs b/proxmox-ve-config/tests/fabric/main.rs index 09629d406449..755592ff7482 100644 --- a/proxmox-ve-config/tests/fabric/main.rs +++ b/proxmox-ve-config/tests/fabric/main.rs @@ -1,8 +1,7 @@ #![cfg(feature = "frr")] -use proxmox_frr::ser::serializer::dump; -use proxmox_ve_config::sdn::{ - fabric::{section_config::node::NodeId, FabricConfig}, - frr::FrrConfigBuilder, +use proxmox_frr::ser::{serializer::dump, FrrConfig}; +use proxmox_ve_config::sdn::fabric::{ + frr::build_fabric, section_config::node::NodeId, FabricConfig, }; mod helper; @@ -17,20 +16,25 @@ mod helper; #[test] fn openfabric_default() { let config = FabricConfig::parse_section_config(helper::get_fabrics_config!()).unwrap(); - - let mut frr_config = FrrConfigBuilder::default() - .add_fabrics(config.clone()) - .build(NodeId::from_string("pve".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); + let mut frr_config = FrrConfig::default(); + build_fabric( + NodeId::from_string("pve".to_owned()).expect("invalid nodeid"), + config.clone(), + &mut frr_config, + ) + .unwrap(); let mut output = dump(&frr_config).expect("error dumping stuff"); insta::assert_snapshot!(helper::reference_name!("pve"), output); - frr_config = FrrConfigBuilder::default() - .add_fabrics(config.clone()) - .build(NodeId::from_string("pve1".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); + frr_config = FrrConfig::default(); + build_fabric( + NodeId::from_string("pve1".to_owned()).expect("invalid nodeid"), + config, + &mut frr_config, + ) + .unwrap(); output = dump(&frr_config).expect("error dumping stuff"); @@ -40,20 +44,26 @@ fn openfabric_default() { #[test] fn ospf_default() { let config = FabricConfig::parse_section_config(helper::get_fabrics_config!()).unwrap(); + let mut frr_config = FrrConfig::default(); - let mut frr_config = FrrConfigBuilder::default() - .add_fabrics(config.clone()) - .build(NodeId::from_string("pve".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); + build_fabric( + NodeId::from_string("pve".to_owned()).expect("invalid nodeid"), + config.clone(), + &mut frr_config, + ) + .unwrap(); let mut output = dump(&frr_config).expect("error dumping stuff"); insta::assert_snapshot!(helper::reference_name!("pve"), output); - frr_config = FrrConfigBuilder::default() - .add_fabrics(config) - .build(NodeId::from_string("pve1".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); + frr_config = FrrConfig::default(); + build_fabric( + NodeId::from_string("pve1".to_owned()).expect("invalid nodeid"), + config, + &mut frr_config, + ) + .unwrap(); output = dump(&frr_config).expect("error dumping stuff"); @@ -87,11 +97,14 @@ fn ospf_loopback_prefix_fail() { #[test] fn openfabric_multi_fabric() { let config = FabricConfig::parse_section_config(helper::get_fabrics_config!()).unwrap(); + let mut frr_config = FrrConfig::default(); - let frr_config = FrrConfigBuilder::default() - .add_fabrics(config) - .build(NodeId::from_string("pve1".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); + build_fabric( + NodeId::from_string("pve1".to_owned()).expect("invalid nodeid"), + config, + &mut frr_config, + ) + .unwrap(); let output = dump(&frr_config).expect("error dumping stuff"); @@ -101,12 +114,14 @@ fn openfabric_multi_fabric() { #[test] fn ospf_multi_fabric() { let config = FabricConfig::parse_section_config(helper::get_fabrics_config!()).unwrap(); - - let frr_config = FrrConfigBuilder::default() - .add_fabrics(config) - .build(NodeId::from_string("pve1".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); - + let mut frr_config = FrrConfig::default(); + + build_fabric( + NodeId::from_string("pve1".to_owned()).expect("invalid nodeid"), + config, + &mut frr_config, + ) + .unwrap(); let output = dump(&frr_config).expect("error dumping stuff"); insta::assert_snapshot!(helper::reference_name!("pve1"), output); @@ -115,11 +130,14 @@ fn ospf_multi_fabric() { #[test] fn openfabric_dualstack() { let config = FabricConfig::parse_section_config(helper::get_fabrics_config!()).unwrap(); + let mut frr_config = FrrConfig::default(); - let frr_config = FrrConfigBuilder::default() - .add_fabrics(config) - .build(NodeId::from_string("pve".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); + build_fabric( + NodeId::from_string("pve".to_owned()).expect("invalid nodeid"), + config, + &mut frr_config, + ) + .unwrap(); let output = dump(&frr_config).expect("error dumping stuff"); @@ -129,11 +147,14 @@ fn openfabric_dualstack() { #[test] fn openfabric_ipv6_only() { let config = FabricConfig::parse_section_config(helper::get_fabrics_config!()).unwrap(); - - let frr_config = FrrConfigBuilder::default() - .add_fabrics(config) - .build(NodeId::from_string("pve".to_owned()).expect("invalid nodeid")) - .expect("error building frr config"); + let mut frr_config = FrrConfig::default(); + + build_fabric( + NodeId::from_string("pve".to_owned()).expect("invalid nodeid"), + config, + &mut frr_config, + ) + .unwrap(); let output = dump(&frr_config).expect("error dumping stuff"); -- 2.47.3
