From b9e04d21dad4ff9ee93fc068cd576c30f81d9916 Mon Sep 17 00:00:00 2001 From: Ian Letourneau Date: Tue, 9 Sep 2025 09:46:00 -0400 Subject: [PATCH] get domain for a service --- examples/try_rust_webapp/src/main.rs | 7 +++---- harmony/src/domain/topology/ingress.rs | 2 +- harmony/src/domain/topology/k8s_anywhere.rs | 4 ++-- .../modules/application/features/continuous_delivery.rs | 5 ++++- .../modules/application/features/helm_argocd_score.rs | 3 +-- harmony/src/modules/application/features/monitoring.rs | 4 ++-- harmony/src/modules/prometheus/rhob_alerting_score.rs | 9 +++++---- 7 files changed, 18 insertions(+), 16 deletions(-) diff --git a/examples/try_rust_webapp/src/main.rs b/examples/try_rust_webapp/src/main.rs index 84fe19b..8a76602 100644 --- a/examples/try_rust_webapp/src/main.rs +++ b/examples/try_rust_webapp/src/main.rs @@ -1,5 +1,3 @@ -use std::{path::PathBuf, sync::Arc}; - use harmony::{ inventory::Inventory, modules::{ @@ -11,7 +9,8 @@ use harmony::{ }, topology::K8sAnywhereTopology, }; -use harmony_types::net::Url; +use harmony_macros::hurl; +use std::{path::PathBuf, sync::Arc}; #[tokio::main] async fn main() { @@ -24,7 +23,7 @@ async fn main() { let discord_receiver = DiscordWebhook { name: "test-discord".to_string(), - url: Url::Url(url::Url::parse("https://discord.doesnt.exist.com").unwrap()), + url: hurl!("https://discord.doesnt.exist.com"), }; let app = ApplicationScore { diff --git a/harmony/src/domain/topology/ingress.rs b/harmony/src/domain/topology/ingress.rs index 8ef3502..6d2a5d6 100644 --- a/harmony/src/domain/topology/ingress.rs +++ b/harmony/src/domain/topology/ingress.rs @@ -3,5 +3,5 @@ use async_trait::async_trait; #[async_trait] pub trait Ingress { - async fn get_domain(&self) -> Result; + async fn get_domain(&self, service: String) -> Result; } diff --git a/harmony/src/domain/topology/k8s_anywhere.rs b/harmony/src/domain/topology/k8s_anywhere.rs index 0f46eca..582e0f7 100644 --- a/harmony/src/domain/topology/k8s_anywhere.rs +++ b/harmony/src/domain/topology/k8s_anywhere.rs @@ -576,7 +576,7 @@ impl TenantManager for K8sAnywhereTopology { #[async_trait] impl Ingress for K8sAnywhereTopology { //TODO this is specifically for openshift/okd which violates the k8sanywhere idea - async fn get_domain(&self) -> Result { + async fn get_domain(&self, service: String) -> Result { let client = self.k8s_client().await?; if let Some(Some(k8s_state)) = self.k8s_state.get() { @@ -602,7 +602,7 @@ impl Ingress for K8sAnywhereTopology { })?; match ic.data["status"]["domain"].as_str() { - Some(domain) => Ok(domain.to_string()), + Some(domain) => Ok(format!("{service}.{domain}")), None => Err(PreparationError::new("Could not find domain".to_string())), } } diff --git a/harmony/src/modules/application/features/continuous_delivery.rs b/harmony/src/modules/application/features/continuous_delivery.rs index d6b65db..27b64f3 100644 --- a/harmony/src/modules/application/features/continuous_delivery.rs +++ b/harmony/src/modules/application/features/continuous_delivery.rs @@ -143,7 +143,10 @@ impl< { async fn ensure_installed(&self, topology: &T) -> Result<(), String> { let image = self.application.image_name(); - let domain = topology.get_domain().await.map_err(|e| e.to_string())?; + let domain = topology + .get_domain(self.application.name()) + .await + .map_err(|e| e.to_string())?; // TODO Write CI/CD workflow files // we can autotedect the CI type using the remote url (default to github action for github diff --git a/harmony/src/modules/application/features/helm_argocd_score.rs b/harmony/src/modules/application/features/helm_argocd_score.rs index 944eedc..7dcc2f2 100644 --- a/harmony/src/modules/application/features/helm_argocd_score.rs +++ b/harmony/src/modules/application/features/helm_argocd_score.rs @@ -55,8 +55,7 @@ impl Interpret for ArgoInter topology: &T, ) -> Result { let k8s_client = topology.k8s_client().await?; - let domain = topology.get_domain().await?; - let domain = format!("argo.{domain}"); + let domain = topology.get_domain("argo".into()).await?; let helm_score = argo_helm_chart_score(&self.score.namespace, self.score.openshift, &domain); diff --git a/harmony/src/modules/application/features/monitoring.rs b/harmony/src/modules/application/features/monitoring.rs index fa3a6a3..80b4a04 100644 --- a/harmony/src/modules/application/features/monitoring.rs +++ b/harmony/src/modules/application/features/monitoring.rs @@ -50,7 +50,7 @@ impl< .await .map(|ns| ns.name.clone()) .unwrap_or_else(|| self.application.name()); - let domain = topology.get_domain().await.unwrap(); + let domain = topology.get_domain("ntfy".into()).await.unwrap(); let mut alerting_score = ApplicationMonitoringScore { sender: CRDPrometheus { @@ -62,7 +62,7 @@ impl< }; let ntfy = NtfyScore { namespace: namespace.clone(), - host: format!("ntfy.{domain}"), + host: domain, }; ntfy.interpret(&Inventory::empty(), topology) .await diff --git a/harmony/src/modules/prometheus/rhob_alerting_score.rs b/harmony/src/modules/prometheus/rhob_alerting_score.rs index 83e41dd..2c8b5a4 100644 --- a/harmony/src/modules/prometheus/rhob_alerting_score.rs +++ b/harmony/src/modules/prometheus/rhob_alerting_score.rs @@ -275,13 +275,13 @@ impl RHOBAlertingInterpret { .await .map_err(|e| InterpretError::new(e.to_string()))?; - let domain = topology.get_domain().await?; + let alert_manager_domain = topology.get_domain("alert-manager".into()).await?; let name = format!("{}-alert-manager", self.sender.namespace.clone()); let backend_service = format!("{}-alert-manager", self.sender.namespace.clone()); let namespace = self.sender.namespace.clone(); let alert_manager_ingress = K8sIngressScore { name: fqdn!(&name), - host: fqdn!(&domain), + host: fqdn!(&alert_manager_domain), backend_service: fqdn!(&backend_service), port: 9093, path: Some("/".to_string()), @@ -290,11 +290,12 @@ impl RHOBAlertingInterpret { ingress_class_name: Some("openshift-default".to_string()), }; + let prometheus_domain = topology.get_domain("prometheus".into()).await?; let name = format!("{}-prometheus", self.sender.namespace.clone()); let backend_service = format!("{}-prometheus", self.sender.namespace.clone()); let prometheus_ingress = K8sIngressScore { name: fqdn!(&name), - host: fqdn!(&domain), + host: fqdn!(&prometheus_domain), backend_service: fqdn!(&backend_service), port: 9090, path: Some("/".to_string()), @@ -510,7 +511,7 @@ impl RHOBAlertingInterpret { .apply(&grafana, Some(&self.sender.namespace.clone())) .await .map_err(|e| InterpretError::new(e.to_string()))?; - let domain = topology.get_domain().await?; + let domain = topology.get_domain("grafana".into()).await?; let name = format!("{}-grafana", self.sender.namespace.clone()); let backend_service = format!("{}-grafana", self.sender.namespace.clone()); let grafana_ingress = K8sIngressScore {