TenantManager_impl_k8s_anywhere #47
							
								
								
									
										18
									
								
								examples/tenant/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										18
									
								
								examples/tenant/Cargo.toml
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,18 @@
 | 
				
			|||||||
 | 
					[package]
 | 
				
			||||||
 | 
					name = "example-tenant"
 | 
				
			||||||
 | 
					edition = "2024"
 | 
				
			||||||
 | 
					version.workspace = true
 | 
				
			||||||
 | 
					readme.workspace = true
 | 
				
			||||||
 | 
					license.workspace = true
 | 
				
			||||||
 | 
					publish = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					[dependencies]
 | 
				
			||||||
 | 
					harmony = { path = "../../harmony" }
 | 
				
			||||||
 | 
					harmony_cli = { path = "../../harmony_cli" }
 | 
				
			||||||
 | 
					harmony_types = { path = "../../harmony_types" }
 | 
				
			||||||
 | 
					cidr = { workspace = true }
 | 
				
			||||||
 | 
					tokio = { workspace = true }
 | 
				
			||||||
 | 
					harmony_macros = { path = "../../harmony_macros" }
 | 
				
			||||||
 | 
					log = { workspace = true }
 | 
				
			||||||
 | 
					env_logger = { workspace = true }
 | 
				
			||||||
 | 
					url = { workspace = true }
 | 
				
			||||||
							
								
								
									
										41
									
								
								examples/tenant/src/main.rs
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								examples/tenant/src/main.rs
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					use harmony::{
 | 
				
			||||||
 | 
					    data::Id,
 | 
				
			||||||
 | 
					    inventory::Inventory,
 | 
				
			||||||
 | 
					    maestro::Maestro,
 | 
				
			||||||
 | 
					    modules::tenant::TenantScore,
 | 
				
			||||||
 | 
					    topology::{K8sAnywhereTopology, tenant::TenantConfig},
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					#[tokio::main]
 | 
				
			||||||
 | 
					async fn main() {
 | 
				
			||||||
 | 
					    let tenant = TenantScore {
 | 
				
			||||||
 | 
					        config: TenantConfig {
 | 
				
			||||||
 | 
					            id: Id::default(),
 | 
				
			||||||
 | 
					            name: "TestTenant".to_string(),
 | 
				
			||||||
 | 
					            ..Default::default()
 | 
				
			||||||
 | 
					        },
 | 
				
			||||||
 | 
					    };
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    let mut maestro = Maestro::<K8sAnywhereTopology>::initialize(
 | 
				
			||||||
 | 
					        Inventory::autoload(),
 | 
				
			||||||
 | 
					        K8sAnywhereTopology::new(),
 | 
				
			||||||
 | 
					    )
 | 
				
			||||||
 | 
					    .await
 | 
				
			||||||
 | 
					    .unwrap();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    maestro.register_all(vec![Box::new(tenant)]);
 | 
				
			||||||
 | 
					    harmony_cli::init(maestro, None).await.unwrap();
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// TODO write tests
 | 
				
			||||||
 | 
					// - Create Tenant with default config mostly, make sure namespace is created
 | 
				
			||||||
 | 
					// - deploy sample client/server app with nginx unprivileged and a service
 | 
				
			||||||
 | 
					// - exec in the client pod and validate the following
 | 
				
			||||||
 | 
					//  - can reach internet
 | 
				
			||||||
 | 
					//  - can reach server pod
 | 
				
			||||||
 | 
					//  - can resolve dns queries to internet
 | 
				
			||||||
 | 
					//  - can resolve dns queries to services
 | 
				
			||||||
 | 
					//  - cannot reach services and pods in other namespaces
 | 
				
			||||||
 | 
					// - Create Tenant with specific cpu/ram/storage requests / limits and make sure they are enforced by trying to
 | 
				
			||||||
 | 
					// deploy a pod with lower requests/limits (accepted) and higher requests/limits (rejected)
 | 
				
			||||||
 | 
					// - Create TenantCredentials and make sure they give only access to the correct tenant
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user