Some checks failed
		
		
	
	Run Check Script / check (pull_request) Failing after 37s
				
			
		
			
				
	
	
		
			153 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
			
		
		
	
	
			153 lines
		
	
	
		
			5.2 KiB
		
	
	
	
		
			Rust
		
	
	
	
	
	
| use std::{
 | |
|     net::{IpAddr, Ipv4Addr},
 | |
|     sync::Arc,
 | |
| };
 | |
| 
 | |
| use cidr::Ipv4Cidr;
 | |
| use harmony::{
 | |
|     hardware::{FirewallGroup, HostCategory, Location, PhysicalHost, SwitchGroup},
 | |
|     infra::opnsense::OPNSenseManagementInterface,
 | |
|     inventory::Inventory,
 | |
|     modules::{
 | |
|         http::StaticFilesHttpScore,
 | |
|         ipxe::IpxeScore,
 | |
|         okd::{
 | |
|             bootstrap_dhcp::OKDBootstrapDhcpScore,
 | |
|             bootstrap_load_balancer::OKDBootstrapLoadBalancerScore, dhcp::OKDDhcpScore,
 | |
|             dns::OKDDnsScore,
 | |
|         },
 | |
|         tftp::TftpScore,
 | |
|     },
 | |
|     topology::{LogicalHost, UnmanagedRouter, Url},
 | |
| };
 | |
| use harmony_macros::{ip, mac_address};
 | |
| 
 | |
| #[tokio::main]
 | |
| async fn main() {
 | |
|     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(), // TODO this must be set manually correctly
 | |
|         // when setting up the opnsense firewall
 | |
|         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![
 | |
|             LogicalHost {
 | |
|                 ip: ip!("192.168.33.30"),
 | |
|                 name: "wk0".to_string(),
 | |
|             },
 | |
|             LogicalHost {
 | |
|                 ip: ip!("192.168.33.31"),
 | |
|                 name: "wk1".to_string(),
 | |
|             },
 | |
|             LogicalHost {
 | |
|                 ip: ip!("192.168.33.32"),
 | |
|                 name: "wk2".to_string(),
 | |
|             },
 | |
|         ],
 | |
|         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![
 | |
|             PhysicalHost::empty(HostCategory::Server)
 | |
|                 .mac_address(mac_address!("C4:62:37:02:61:0F")),
 | |
|             PhysicalHost::empty(HostCategory::Server)
 | |
|                 .mac_address(mac_address!("C4:62:37:02:61:26")),
 | |
|             // thisone
 | |
|             // Then create the ipxe file
 | |
|             // set the dns static leases
 | |
|             // bootstrap nodes
 | |
|             // start ceph cluster
 | |
|             // try installation of lampscore
 | |
|             // bingo?
 | |
|             PhysicalHost::empty(HostCategory::Server)
 | |
|                 .mac_address(mac_address!("C4:62:37:02:61:70")),
 | |
|         ],
 | |
|         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 bootstrap_dhcp_score = OKDBootstrapDhcpScore::new(&topology, &inventory);
 | |
|     let bootstrap_load_balancer_score = OKDBootstrapLoadBalancerScore::new(&topology);
 | |
|     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 = StaticFilesHttpScore {
 | |
|         folder_to_serve: Some(Url::LocalFolder(
 | |
|             "./data/watchguard/pxe-http-files".to_string(),
 | |
|         )),
 | |
|         files: vec![],
 | |
|     };
 | |
|     let ipxe_score = IpxeScore::new();
 | |
| 
 | |
|     harmony_tui::run(
 | |
|         inventory,
 | |
|         topology,
 | |
|         vec![
 | |
|             Box::new(dns_score),
 | |
|             Box::new(bootstrap_dhcp_score),
 | |
|             Box::new(bootstrap_load_balancer_score),
 | |
|             Box::new(load_balancer_score),
 | |
|             Box::new(tftp_score),
 | |
|             Box::new(http_score),
 | |
|             Box::new(ipxe_score),
 | |
|             Box::new(dhcp_score),
 | |
|         ],
 | |
|     )
 | |
|     .await
 | |
|     .unwrap();
 | |
| }
 |