Some checks failed
Run Check Script / check (pull_request) Failing after 51s
121 lines
3.1 KiB
Rust
121 lines
3.1 KiB
Rust
use std::str::FromStr;
|
|
|
|
use harmony::{
|
|
inventory::Inventory,
|
|
modules::helm::chart::{HelmChartScore, HelmRepository, NonBlankString},
|
|
topology::{HelmCommand, K8sAnywhereConfig, K8sAnywhereTopology, TlsRouter, Topology},
|
|
};
|
|
use harmony_macros::hurl;
|
|
use log::info;
|
|
|
|
#[tokio::main]
|
|
async fn main() {
|
|
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<T: Topology + HelmCommand + TlsRouter + 'static>(
|
|
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:
|
|
enabled: true
|
|
replicas: 3
|
|
jetstream:
|
|
enabled: true
|
|
fileStorage:
|
|
enabled: true
|
|
size: 10Gi
|
|
storageDirectory: /data/jetstream
|
|
leafnodes:
|
|
enabled: false
|
|
# port: 7422
|
|
websocket:
|
|
enabled: true
|
|
ingress:
|
|
enabled: true
|
|
className: openshift-default
|
|
pathType: Prefix
|
|
hosts:
|
|
- nats-ws.{}
|
|
gateway:
|
|
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 {
|
|
namespace: Some(NonBlankString::from_str(namespace).unwrap()),
|
|
release_name: NonBlankString::from_str("nats").unwrap(),
|
|
chart_name: NonBlankString::from_str("nats/nats").unwrap(),
|
|
chart_version: None,
|
|
values_overrides: None,
|
|
values_yaml,
|
|
create_namespace: true,
|
|
install_only: false,
|
|
repository: Some(HelmRepository::new(
|
|
"nats".to_string(),
|
|
hurl!("https://nats-io.github.io/k8s/helm/charts/"),
|
|
true,
|
|
)),
|
|
};
|
|
|
|
harmony_cli::run(Inventory::autoload(), topology, vec![Box::new(nats)], None)
|
|
.await
|
|
.unwrap();
|
|
|
|
info!(
|
|
"Enjoy! You can test your nats cluster by running : `kubectl exec -n {namespace} -it deployment/nats-box -- nats pub test hi`"
|
|
);
|
|
}
|