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::{ | use harmony::{ | ||||||
|  |     hardware::{FirewallGroup, HostCategory, Location, PhysicalHost, SwitchGroup}, | ||||||
|  |     infra::opnsense::OPNSenseManagementInterface, | ||||||
|     inventory::Inventory, |     inventory::Inventory, | ||||||
|     maestro::Maestro, |     maestro::Maestro, | ||||||
|     modules::{dummy::{ErrorScore, PanicScore, SuccessScore}, k8s::deployment::K8sDeploymentScore}, |     modules::{ | ||||||
|     topology::HAClusterTopology, |         http::HttpScore, okd::{dhcp::OKDDhcpScore, dns::OKDDnsScore}, opnsense::OPNSenseLaunchUpgrade, tftp::TftpScore | ||||||
|  |     }, | ||||||
|  |     topology::{LogicalHost, UnmanagedRouter, Url}, | ||||||
| }; | }; | ||||||
|  | use harmony_macros::{ip, mac_address}; | ||||||
| 
 | 
 | ||||||
| #[tokio::main] | #[tokio::main] | ||||||
| async fn 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![ |     maestro.register_all(vec![ | ||||||
|         Box::new(SuccessScore {}), |         Box::new(dns_score), | ||||||
|         Box::new(ErrorScore {}), |         Box::new(dhcp_score), | ||||||
|         Box::new(PanicScore {}), |         Box::new(load_balancer_score), | ||||||
|  |         Box::new(tftp_score), | ||||||
|  |         Box::new(http_score), | ||||||
|     ]); |     ]); | ||||||
|     harmony_tui::init(maestro).await.unwrap(); |     harmony_tui::init(maestro).await.unwrap(); | ||||||
| } | } | ||||||
|  | |||||||
| @ -97,7 +97,8 @@ impl ManagementInterface for ManualManagementInterface { | |||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     fn get_supported_protocol_names(&self) -> String { |     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"); |         info!("Adding custom caddy config files"); | ||||||
|         config |         config | ||||||
|             .upload_files( |             .upload_files( | ||||||
|                 "../../../watchguard/caddy_config", |                 "./data/watchguard/caddy_config", | ||||||
|  | |||||||
|                 "/usr/local/etc/caddy/caddy.d/", |                 "/usr/local/etc/caddy/caddy.d/", | ||||||
|             ) |             ) | ||||||
|             .await |             .await | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	
Ca prendra une methode plus intelligente un jour que juste
./mais good for now.