From eb179d1640e3d319eb8c1611c0559aaa65b30c1a Mon Sep 17 00:00:00 2001 From: andrussal Date: Sun, 7 Dec 2025 06:36:44 +0100 Subject: [PATCH] Compose: set prometheus platform for arm hosts --- .../runners/compose/assets/docker-compose.yml.tera | 3 ++- testing-framework/runners/compose/src/compose.rs | 12 ++++++++++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/testing-framework/runners/compose/assets/docker-compose.yml.tera b/testing-framework/runners/compose/assets/docker-compose.yml.tera index 2932567..69c7c5e 100644 --- a/testing-framework/runners/compose/assets/docker-compose.yml.tera +++ b/testing-framework/runners/compose/assets/docker-compose.yml.tera @@ -1,7 +1,8 @@ services: prometheus: image: prom/prometheus:v3.0.1 - command: +{% if prometheus.platform %} platform: {{ prometheus.platform }} +{% endif %} command: - --config.file=/etc/prometheus/prometheus.yml - --storage.tsdb.retention.time=7d - --web.enable-otlp-receiver diff --git a/testing-framework/runners/compose/src/compose.rs b/testing-framework/runners/compose/src/compose.rs index 4f3a455..9b44cd7 100644 --- a/testing-framework/runners/compose/src/compose.rs +++ b/testing-framework/runners/compose/src/compose.rs @@ -199,6 +199,11 @@ impl<'a> ComposeDescriptorBuilder<'a> { let (default_image, default_platform) = resolve_image(); let image = default_image; let platform = default_platform; + // Prometheus image is x86_64-only on some tags; set platform when on arm hosts. + let prometheus_platform = match std::env::consts::ARCH { + "aarch64" | "arm64" => Some(String::from("linux/arm64")), + _ => None, + }; let validators = build_nodes( self.topology.validators(), @@ -219,7 +224,7 @@ impl<'a> ComposeDescriptorBuilder<'a> { ); Ok(ComposeDescriptor { - prometheus: PrometheusTemplate::new(prometheus_host_port), + prometheus: PrometheusTemplate::new(prometheus_host_port, prometheus_platform), validators, executors, }) @@ -230,12 +235,15 @@ impl<'a> ComposeDescriptorBuilder<'a> { #[derive(Clone, Debug, Serialize)] pub struct PrometheusTemplate { host_port: String, + #[serde(skip_serializing_if = "Option::is_none")] + platform: Option, } impl PrometheusTemplate { - fn new(port: u16) -> Self { + fn new(port: u16, platform: Option) -> Self { Self { host_port: format!("127.0.0.1:{port}:9090"), + platform, } } }