feat: started to prepare inventory / topoplogy for NCD #1
| @ -1,20 +1,108 @@ | ||||
| use std::{ | ||||
|     net::{IpAddr, Ipv4Addr}, | ||||
|     sync::Arc, | ||||
| }; | ||||
| 
 | ||||
| use cidr::Ipv4Cidr; | ||||
| use harmony::{ | ||||
|     hardware::{FirewallGroup, HostCategory, Location, PhysicalHost, SwitchGroup}, | ||||
|     infra::opnsense::OPNSenseManagementInterface, | ||||
|     inventory::Inventory, | ||||
|     maestro::Maestro, | ||||
|     modules::{dummy::{ErrorScore, PanicScore, SuccessScore}, k8s::deployment::K8sDeploymentScore}, | ||||
|     topology::HAClusterTopology, | ||||
|     modules::{ | ||||
|         http::HttpScore, okd::{dhcp::OKDDhcpScore, dns::OKDDnsScore}, opnsense::OPNSenseLaunchUpgrade, tftp::TftpScore | ||||
|     }, | ||||
|     topology::{LogicalHost, UnmanagedRouter, Url}, | ||||
| }; | ||||
| use harmony_macros::{ip, mac_address}; | ||||
| 
 | ||||
| #[tokio::main] | ||||
| async fn main() { | ||||
|     let inventory = Inventory::autoload(); | ||||
|     let topology = HAClusterTopology::autoload(); | ||||
|     let mut maestro = Maestro::new(inventory, topology); | ||||
| 
 | ||||
|     let firewall = harmony::topology::LogicalHost { | ||||
|         ip: ip!("192.168.33.1"), | ||||
|         name: String::from("fw0"), | ||||
|     }; | ||||
| 
 | ||||
|     let opnsense = Arc::new( | ||||
|         harmony::infra::opnsense::OPNSenseFirewall::new(firewall, None, "root", "opnsense").await, | ||||
|     ); | ||||
|     let lan_subnet = Ipv4Addr::new(192, 168, 33, 0); | ||||
|     let gateway_ipv4 = Ipv4Addr::new(192, 168, 33, 1); | ||||
|     let gateway_ip = IpAddr::V4(gateway_ipv4); | ||||
|     let topology = harmony::topology::HAClusterTopology { | ||||
|         domain_name: "ncd0.harmony.mcd".to_string(), | ||||
|         router: Arc::new(UnmanagedRouter::new( | ||||
|             gateway_ip, | ||||
|             Ipv4Cidr::new(lan_subnet, 24).unwrap(), | ||||
|         )), | ||||
|         load_balancer: opnsense.clone(), | ||||
|         firewall: opnsense.clone(), | ||||
|         tftp_server: opnsense.clone(), | ||||
|         http_server: opnsense.clone(), | ||||
|         dhcp_server: opnsense.clone(), | ||||
|         dns_server: opnsense.clone(), | ||||
|         control_plane: vec![ | ||||
|             LogicalHost { | ||||
|                 ip: ip!("192.168.33.20"), | ||||
|                 name: "cp0".to_string(), | ||||
|             }, | ||||
|             LogicalHost { | ||||
|                 ip: ip!("192.168.33.21"), | ||||
|                 name: "cp1".to_string(), | ||||
|             }, | ||||
|             LogicalHost { | ||||
|                 ip: ip!("192.168.33.22"), | ||||
|                 name: "cp2".to_string(), | ||||
|             }, | ||||
|         ], | ||||
|         bootstrap_host: LogicalHost { | ||||
|             ip: ip!("192.168.33.66"), | ||||
|             name: "bootstrap".to_string(), | ||||
|         }, | ||||
|         workers: vec![], | ||||
|         switch: vec![], | ||||
|     }; | ||||
| 
 | ||||
|     let inventory = Inventory { | ||||
|         location: Location::new( | ||||
|             "I am mobile".to_string(), | ||||
|             "earth".to_string(), | ||||
|         ), | ||||
|         switch: SwitchGroup::from([]), | ||||
|         firewall: FirewallGroup::from([PhysicalHost::empty(HostCategory::Firewall) | ||||
|             .management(Arc::new(OPNSenseManagementInterface::new()))]), | ||||
|         storage_host: vec![], | ||||
|         worker_host: vec![], | ||||
|         control_plane_host: vec![ | ||||
|             PhysicalHost::empty(HostCategory::Server) | ||||
|                 .mac_address(mac_address!("C4:62:37:02:60:FA")), | ||||
|             PhysicalHost::empty(HostCategory::Server) | ||||
|                 .mac_address(mac_address!("C4:62:37:02:61:1A")), | ||||
|             PhysicalHost::empty(HostCategory::Server) | ||||
|                 .mac_address(mac_address!("C4:62:37:01:BC:68")), | ||||
|         ], | ||||
|     }; | ||||
| 
 | ||||
|     // TODO regroup smaller scores in a larger one such as this
 | ||||
|     // let okd_boostrap_preparation();
 | ||||
| 
 | ||||
|     let dhcp_score = OKDDhcpScore::new(&topology, &inventory); | ||||
|     let dns_score = OKDDnsScore::new(&topology); | ||||
|     let load_balancer_score = | ||||
|         harmony::modules::okd::load_balancer::OKDLoadBalancerScore::new(&topology); | ||||
| 
 | ||||
|     let tftp_score = TftpScore::new(Url::LocalFolder("./data/watchguard/tftpboot".to_string())); | ||||
|     let http_score = HttpScore::new(Url::LocalFolder( | ||||
|         "./data/watchguard/pxe-http-files".to_string(), | ||||
|     )); | ||||
|     let mut maestro = Maestro::new(inventory, topology); | ||||
|     maestro.register_all(vec![ | ||||
|         Box::new(SuccessScore {}), | ||||
|         Box::new(ErrorScore {}), | ||||
|         Box::new(PanicScore {}), | ||||
|         Box::new(dns_score), | ||||
|         Box::new(dhcp_score), | ||||
|         Box::new(load_balancer_score), | ||||
|         Box::new(tftp_score), | ||||
|         Box::new(http_score), | ||||
|     ]); | ||||
|     harmony_tui::init(maestro).await.unwrap(); | ||||
| } | ||||
|  | ||||
| @ -97,7 +97,8 @@ impl ManagementInterface for ManualManagementInterface { | ||||
|     } | ||||
| 
 | ||||
|     fn get_supported_protocol_names(&self) -> String { | ||||
|         todo!() | ||||
|         // todo!()
 | ||||
|         "none".to_string() | ||||
|     } | ||||
| } | ||||
| 
 | ||||
|  | ||||
| @ -61,7 +61,7 @@ impl HttpServer for OPNSenseFirewall { | ||||
|         info!("Adding custom caddy config files"); | ||||
|         config | ||||
|             .upload_files( | ||||
|                 "../../../watchguard/caddy_config", | ||||
|                 "./data/watchguard/caddy_config", | ||||
|  | ||||
|                 "/usr/local/etc/caddy/caddy.d/", | ||||
|             ) | ||||
|             .await | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	
Ca prendra une methode plus intelligente un jour que juste
./mais good for now.