From 270b6b87df7de838996d2ded6ca6b83f99c90ff4 Mon Sep 17 00:00:00 2001 From: Jean-Gabriel Gill-Couture Date: Fri, 9 Jan 2026 17:30:51 -0500 Subject: [PATCH] wip nats supercluster --- examples/nats/src/main.rs | 62 +++++++++++++++++++++++++++++++-------- 1 file changed, 50 insertions(+), 12 deletions(-) diff --git a/examples/nats/src/main.rs b/examples/nats/src/main.rs index 7cdb3eb..7595584 100644 --- a/examples/nats/src/main.rs +++ b/examples/nats/src/main.rs @@ -10,19 +10,50 @@ use log::info; #[tokio::main] async fn main() { - deploy_nats(K8sAnywhereTopology::with_config( - K8sAnywhereConfig::remote_k8s_from_env_var("HARMONY_NATS_SITE_1"), - )) - .await; - deploy_nats(K8sAnywhereTopology::with_config( - K8sAnywhereConfig::remote_k8s_from_env_var("HARMONY_NATS_SITE_2"), - )) - .await; + let site1_topo = K8sAnywhereTopology::with_config(K8sAnywhereConfig::remote_k8s_from_env_var( + "HARMONY_NATS_SITE_1", + )); + let site2_topo = K8sAnywhereTopology::with_config(K8sAnywhereConfig::remote_k8s_from_env_var( + "HARMONY_NATS_SITE_2", + )); + + let site1_domain = site1_topo.get_internal_domain().await.unwrap().unwrap(); + let site2_domain = site2_topo.get_internal_domain().await.unwrap().unwrap(); + + let site1_gateway = format!("nats-gateway.{}", site1_domain); + let site2_gateway = format!("nats-gateway.{}", site2_domain); + + tokio::join!( + deploy_nats( + site1_topo, + "site-1", + vec![("site-2".to_string(), site2_gateway)] + ), + deploy_nats( + site2_topo, + "site-2", + vec![("site-1".to_string(), site1_gateway)] + ), + ); } -async fn deploy_nats(topology: T) { +async fn deploy_nats( + topology: T, + cluster_name: &str, + remote_gateways: Vec<(String, String)>, +) { topology.ensure_ready().await.unwrap(); + let mut gateway_gateways = String::new(); + for (name, url) in remote_gateways { + gateway_gateways.push_str(&format!( + r#" + - name: {name} + urls: + - nats://{url}:7222"# + )); + } + let values_yaml = Some(format!( r#"config: cluster: @@ -46,14 +77,21 @@ async fn deploy_nats(topology: hosts: - nats-ws.{} gateway: - enabled: false - # name: my-gateway - # port: 7522 + enabled: true + name: {} + port: 7222 + gateways: {} +service: + ports: + gateway: + enabled: true natsBox: container: image: tag: nonroot"#, topology.get_internal_domain().await.unwrap().unwrap(), + cluster_name, + gateway_gateways, )); let namespace = "nats"; let nats = HelmChartScore {