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::from_str("test-tenant-id"), name: "testtenant".to_string(), ..Default::default() }, }; let mut maestro = Maestro::::initialize( Inventory::autoload(), K8sAnywhereTopology::from_env(), ) .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