diff --git a/harmony/src/domain/topology/k8s_anywhere.rs b/harmony/src/domain/topology/k8s_anywhere.rs index bcd95bc..9153b73 100644 --- a/harmony/src/domain/topology/k8s_anywhere.rs +++ b/harmony/src/domain/topology/k8s_anywhere.rs @@ -6,6 +6,7 @@ use log::{info, warn}; use tokio::sync::OnceCell; use crate::{ + executors::ExecutorError, interpret::{InterpretError, Outcome}, inventory::Inventory, maestro::Maestro, @@ -13,7 +14,11 @@ use crate::{ topology::LocalhostTopology, }; -use super::{HelmCommand, K8sclient, Topology, k8s::K8sClient}; +use super::{ + HelmCommand, K8sclient, Topology, + k8s::K8sClient, + tenant::{ResourceLimits, TenantConfig, TenantManager, TenantNetworkPolicy}, +}; struct K8sState { client: Arc, @@ -21,6 +26,7 @@ struct K8sState { message: String, } +#[derive(Debug)] enum K8sSource { LocalK3d, Kubeconfig, @@ -209,3 +215,81 @@ impl Topology for K8sAnywhereTopology { } impl HelmCommand for K8sAnywhereTopology {} + +impl TenantManager for K8sAnywhereTopology { + fn provision_tenant<'life0, 'life1, 'async_trait>( + &'life0 self, + config: &'life1 TenantConfig, + ) -> ::core::pin::Pin< + Box< + dyn ::core::future::Future> + + ::core::marker::Send + + 'async_trait, + >, + > + where + 'life0: 'async_trait, + 'life1: 'async_trait, + Self: 'async_trait, + { + todo!() + } + + fn update_tenant_resource_limits<'life0, 'life1, 'life2, 'async_trait>( + &'life0 self, + tenant_name: &'life1 str, + new_limits: &'life2 ResourceLimits, + ) -> ::core::pin::Pin< + Box< + dyn ::core::future::Future> + + ::core::marker::Send + + 'async_trait, + >, + > + where + 'life0: 'async_trait, + 'life1: 'async_trait, + 'life2: 'async_trait, + Self: 'async_trait, + { + todo!() + } + + fn update_tenant_network_policy<'life0, 'life1, 'life2, 'async_trait>( + &'life0 self, + tenant_name: &'life1 str, + new_policy: &'life2 TenantNetworkPolicy, + ) -> ::core::pin::Pin< + Box< + dyn ::core::future::Future> + + ::core::marker::Send + + 'async_trait, + >, + > + where + 'life0: 'async_trait, + 'life1: 'async_trait, + 'life2: 'async_trait, + Self: 'async_trait, + { + todo!() + } + + fn deprovision_tenant<'life0, 'life1, 'async_trait>( + &'life0 self, + tenant_name: &'life1 str, + ) -> ::core::pin::Pin< + Box< + dyn ::core::future::Future> + + ::core::marker::Send + + 'async_trait, + >, + > + where + 'life0: 'async_trait, + 'life1: 'async_trait, + Self: 'async_trait, + { + todo!() + } +} diff --git a/harmony/src/domain/topology/tenant/manager.rs b/harmony/src/domain/topology/tenant/manager.rs index b1b7eb3..4166261 100644 --- a/harmony/src/domain/topology/tenant/manager.rs +++ b/harmony/src/domain/topology/tenant/manager.rs @@ -4,7 +4,7 @@ use async_trait::async_trait; use crate::executors::ExecutorError; #[async_trait] -pub trait TenantManager: Send + Sync + std::fmt::Debug { +pub trait TenantManager { /// Provisions a new tenant based on the provided configuration. /// This operation should be idempotent; if a tenant with the same `config.name` /// already exists and matches the config, it will succeed without changes.