From 14fc4345c1f15959f5cff280634d10d4537cbfcb Mon Sep 17 00:00:00 2001 From: Jean-Gabriel Gill-Couture Date: Sun, 8 Jun 2025 23:24:41 -0400 Subject: [PATCH] feat: Initialize k8s tenant properly --- harmony/src/domain/data/id.rs | 4 ++-- harmony/src/domain/topology/k8s_anywhere.rs | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+), 2 deletions(-) diff --git a/harmony/src/domain/data/id.rs b/harmony/src/domain/data/id.rs index 1f64054..2950324 100644 --- a/harmony/src/domain/data/id.rs +++ b/harmony/src/domain/data/id.rs @@ -1,7 +1,7 @@ -use std::time::SystemTime; -use std::time::UNIX_EPOCH; use rand::distr::Alphanumeric; use rand::distr::SampleString; +use std::time::SystemTime; +use std::time::UNIX_EPOCH; use serde::{Deserialize, Serialize}; diff --git a/harmony/src/domain/topology/k8s_anywhere.rs b/harmony/src/domain/topology/k8s_anywhere.rs index 369f030..bd2f261 100644 --- a/harmony/src/domain/topology/k8s_anywhere.rs +++ b/harmony/src/domain/topology/k8s_anywhere.rs @@ -170,6 +170,22 @@ impl K8sAnywhereTopology { Ok(Some(state)) } + async fn ensure_k8s_tenant_manager(&self) -> Result<(), String> { + if let Some(_) = self.tenant_manager.get() { + return Ok(()); + } + + self.tenant_manager + .get_or_try_init(async || -> Result { + let k8s_client = self.k8s_client().await?; + Ok(K8sTenantManager::new(k8s_client)) + }) + .await + .unwrap(); + + Ok(()) + } + fn get_k8s_tenant_manager(&self) -> Result<&K8sTenantManager, ExecutorError> { match self.tenant_manager.get() { Some(t) => Ok(t), @@ -217,6 +233,10 @@ impl Topology for K8sAnywhereTopology { "No K8s client could be found or installed".to_string(), ))?; + self.ensure_k8s_tenant_manager() + .await + .map_err(|e| InterpretError::new(e))?; + match self.is_helm_available() { Ok(()) => Ok(Outcome::success(format!( "{} + helm available",