From d1a274b7054d1821d233bde5396339e7329d6e10 Mon Sep 17 00:00:00 2001 From: Willem Date: Fri, 15 Aug 2025 15:44:06 -0400 Subject: [PATCH] fix: checks deployment status ready replicas rather than pod name since the pod name is not necessarily matching the deployment name and often has a random generated number in it --- harmony/src/domain/topology/k8s.rs | 13 ++++++++++++ .../ceph/ceph_osd_replacement_score.rs | 20 ++++++++++++------- 2 files changed, 26 insertions(+), 7 deletions(-) diff --git a/harmony/src/domain/topology/k8s.rs b/harmony/src/domain/topology/k8s.rs index 1eae139..30b335f 100644 --- a/harmony/src/domain/topology/k8s.rs +++ b/harmony/src/domain/topology/k8s.rs @@ -52,6 +52,19 @@ impl K8sClient { }) } + pub async fn get_deployment( + &self, + name: &str, + namespace: Option<&str>, + ) -> Result, Error> { + let deps: Api = if let Some(ns) = namespace { + Api::namespaced(self.client.clone(), ns) + } else { + Api::default_namespaced(self.client.clone()) + }; + Ok(deps.get_opt(name).await?) + } + pub async fn get_pod(&self, name: &str, namespace: Option<&str>) -> Result, Error> { let pods: Api = if let Some(ns) = namespace { Api::namespaced(self.client.clone(), ns) diff --git a/harmony/src/modules/storage/ceph/ceph_osd_replacement_score.rs b/harmony/src/modules/storage/ceph/ceph_osd_replacement_score.rs index 0223e62..173cca4 100644 --- a/harmony/src/modules/storage/ceph/ceph_osd_replacement_score.rs +++ b/harmony/src/modules/storage/ceph/ceph_osd_replacement_score.rs @@ -50,13 +50,21 @@ impl Interpret for PrepCephOsdReplacementInterpret { 0, ) .await?; - client - .get_pod(&self.score.osd_name, Some(&self.score.rook_ceph_namespace)) + let dep = client + .get_deployment(&self.score.osd_name, Some(&self.score.rook_ceph_namespace)) .await?; - Ok(Outcome::success( - "Successfully prepared rook-ceph-cluster for disk replacement".to_string(), - )) + match dep.unwrap().status.and_then(|s| s.ready_replicas) { + Some(0) => Ok(Outcome::success( + "Successfully prepared rook-ceph-cluster for disk replacement".to_string(), + )), + Some(_) => Err(InterpretError::new({ + "Deployment still has ready replicas".to_string() + })), + None => Err(InterpretError::new({ + "Failed to get rook-ceph-cluster status".to_string() + })), + } } fn get_name(&self) -> InterpretName { @@ -75,5 +83,3 @@ impl Interpret for PrepCephOsdReplacementInterpret { todo!() } } - -impl PrepCephOsdReplacementInterpret {}