From 6b482037cf9644cb760f30e30b13c39296cf261c Mon Sep 17 00:00:00 2001 From: Thomas Date: Tue, 10 Mar 2026 16:47:45 -0400 Subject: [PATCH 1/4] chore(tests): pin otel collector images by digest --- .../opentelemetry-common/collector.Dockerfile | 3 +- .../opentelemetry-logs/config/compose.yaml | 3 +- tests/e2e/opentelemetry-logs/config/test.yaml | 2 +- .../opentelemetry-metrics/config/compose.yaml | 3 +- .../opentelemetry-metrics/config/test.yaml | 2 +- vdev/src/utils/environment.rs | 32 +++++++++++++------ 6 files changed, 31 insertions(+), 14 deletions(-) diff --git a/tests/e2e/opentelemetry-common/collector.Dockerfile b/tests/e2e/opentelemetry-common/collector.Dockerfile index c073deb76fd0c..071b2a7e1e5ff 100644 --- a/tests/e2e/opentelemetry-common/collector.Dockerfile +++ b/tests/e2e/opentelemetry-common/collector.Dockerfile @@ -1,6 +1,7 @@ # Wrapper around the official OpenTelemetry Collector image which lacks all basic utils which we want for debugging. ARG CONFIG_COLLECTOR_VERSION=latest -FROM otel/opentelemetry-collector-contrib:${CONFIG_COLLECTOR_VERSION} AS upstream +ARG CONFIG_COLLECTOR_DIGEST +FROM otel/opentelemetry-collector-contrib:${CONFIG_COLLECTOR_VERSION}@${CONFIG_COLLECTOR_DIGEST} AS upstream FROM alpine:3.20 AS base COPY --from=upstream /otelcol-contrib /otelcol-contrib diff --git a/tests/e2e/opentelemetry-logs/config/compose.yaml b/tests/e2e/opentelemetry-logs/config/compose.yaml index 62b3d48c44aa6..c91fd18f21ec0 100644 --- a/tests/e2e/opentelemetry-logs/config/compose.yaml +++ b/tests/e2e/opentelemetry-logs/config/compose.yaml @@ -2,7 +2,7 @@ name: opentelemetry-vector-e2e services: otel-collector-source: container_name: otel-collector-source - image: otel/opentelemetry-collector-contrib:${CONFIG_COLLECTOR_VERSION} + image: otel/opentelemetry-collector-contrib:${CONFIG_COLLECTOR_VERSION}@${CONFIG_COLLECTOR_DIGEST} init: true volumes: - type: bind @@ -47,6 +47,7 @@ services: dockerfile: ./tests/e2e/opentelemetry-common/collector.Dockerfile args: CONFIG_COLLECTOR_VERSION: ${CONFIG_COLLECTOR_VERSION} + CONFIG_COLLECTOR_DIGEST: ${CONFIG_COLLECTOR_DIGEST} init: true user: "0:0" # test only, override special user with root command: [ "--config", "/etc/otelcol-contrib/config.yaml" ] diff --git a/tests/e2e/opentelemetry-logs/config/test.yaml b/tests/e2e/opentelemetry-logs/config/test.yaml index 54aa7063e632c..3156c7c65df9f 100644 --- a/tests/e2e/opentelemetry-logs/config/test.yaml +++ b/tests/e2e/opentelemetry-logs/config/test.yaml @@ -14,7 +14,7 @@ runner: matrix: # Determines which `otel/opentelemetry-collector-contrib` version to use - collector_version: [ 'latest' ] + collector_version: [ 'latest@sha256:e7c92c715f28ff142f3bcaccd4fc5603cf4c71276ef09954a38eb4038500a5a5' ] vector_config: [ 'vector_default.yaml', 'vector_otlp.yaml' ] # Only trigger this integration test if relevant OTEL source/sink files change diff --git a/tests/e2e/opentelemetry-metrics/config/compose.yaml b/tests/e2e/opentelemetry-metrics/config/compose.yaml index fba9c2a19b247..fd9fb22746cf4 100644 --- a/tests/e2e/opentelemetry-metrics/config/compose.yaml +++ b/tests/e2e/opentelemetry-metrics/config/compose.yaml @@ -2,7 +2,7 @@ name: opentelemetry-vector-e2e services: otel-collector-source: container_name: otel-collector-source - image: otel/opentelemetry-collector-contrib:${CONFIG_COLLECTOR_VERSION} + image: otel/opentelemetry-collector-contrib:${CONFIG_COLLECTOR_VERSION}@${CONFIG_COLLECTOR_DIGEST} init: true volumes: - type: bind @@ -84,6 +84,7 @@ services: dockerfile: ./tests/e2e/opentelemetry-common/collector.Dockerfile args: CONFIG_COLLECTOR_VERSION: ${CONFIG_COLLECTOR_VERSION} + CONFIG_COLLECTOR_DIGEST: ${CONFIG_COLLECTOR_DIGEST} init: true user: "0:0" # test only, override special user with root command: [ "--config", "/etc/otelcol-contrib/config.yaml" ] diff --git a/tests/e2e/opentelemetry-metrics/config/test.yaml b/tests/e2e/opentelemetry-metrics/config/test.yaml index 507cddfd2b21d..5d4840f0dd753 100644 --- a/tests/e2e/opentelemetry-metrics/config/test.yaml +++ b/tests/e2e/opentelemetry-metrics/config/test.yaml @@ -14,7 +14,7 @@ runner: matrix: # Determines which `otel/opentelemetry-collector-contrib` version to use - collector_version: [ 'latest' ] + collector_version: [ 'latest@sha256:e7c92c715f28ff142f3bcaccd4fc5603cf4c71276ef09954a38eb4038500a5a5' ] # Only trigger this integration test if relevant OTEL source/sink files change paths: diff --git a/vdev/src/utils/environment.rs b/vdev/src/utils/environment.rs index d2c00320c7445..3239412150705 100644 --- a/vdev/src/utils/environment.rs +++ b/vdev/src/utils/environment.rs @@ -12,15 +12,29 @@ cfg_if! { pub type Environment = BTreeMap>; pub(crate) fn rename_environment_keys(environment: &Environment) -> Environment { - environment - .iter() - .map(|(var, value)| { - ( - format!("CONFIG_{}", var.replace('-', "_").to_uppercase()), - value.clone(), - ) - }) - .collect() + let mut result = Environment::new(); + for (var, value) in environment { + let normalized = var.replace('-', "_"); + let config_key = format!("CONFIG_{}", normalized.to_uppercase()); + + // If the key contains "version" and the value contains `@`, split into version and digest. + if normalized.contains("version") { + if let Some(val) = value { + if let Some((version_part, digest_part)) = val.split_once('@') { + let digest_key = format!( + "CONFIG_{}", + normalized.replace("version", "digest").to_uppercase() + ); + result.insert(config_key, Some(version_part.to_string())); + result.insert(digest_key, Some(digest_part.to_string())); + continue; + } + } + } + + result.insert(config_key, value.clone()); + } + result } pub(crate) fn extract_present(environment: &Environment) -> BTreeMap { From 559c059fc9a83c2ede2eb5a071f813a6b95db2ce Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 11 Mar 2026 09:47:13 -0400 Subject: [PATCH 2/4] chore(vdev): apply vdev rust check fixes --- vdev/src/utils/environment.rs | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/vdev/src/utils/environment.rs b/vdev/src/utils/environment.rs index 3239412150705..d0842a11a1d69 100644 --- a/vdev/src/utils/environment.rs +++ b/vdev/src/utils/environment.rs @@ -18,18 +18,17 @@ pub(crate) fn rename_environment_keys(environment: &Environment) -> Environment let config_key = format!("CONFIG_{}", normalized.to_uppercase()); // If the key contains "version" and the value contains `@`, split into version and digest. - if normalized.contains("version") { - if let Some(val) = value { - if let Some((version_part, digest_part)) = val.split_once('@') { - let digest_key = format!( - "CONFIG_{}", - normalized.replace("version", "digest").to_uppercase() - ); - result.insert(config_key, Some(version_part.to_string())); - result.insert(digest_key, Some(digest_part.to_string())); - continue; - } - } + if normalized.contains("version") + && let Some(val) = value + && let Some((version_part, digest_part)) = val.split_once('@') + { + let digest_key = format!( + "CONFIG_{}", + normalized.replace("version", "digest").to_uppercase() + ); + result.insert(config_key, Some(version_part.to_string())); + result.insert(digest_key, Some(digest_part.to_string())); + continue; } result.insert(config_key, value.clone()); From 64d65a1b02ae90c8facc58d707ab5ed703a594cf Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 11 Mar 2026 11:28:11 -0400 Subject: [PATCH 3/4] Replace @ with - --- vdev/src/testing/config.rs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/vdev/src/testing/config.rs b/vdev/src/testing/config.rs index 23f4580df5187..8be3ed40c7e38 100644 --- a/vdev/src/testing/config.rs +++ b/vdev/src/testing/config.rs @@ -202,7 +202,7 @@ impl ComposeTestConfig { .values() .multi_cartesian_product() .map(|product| { - let key = product.iter().join("-"); + let key = product.iter().map(|v| v.replace("@", "-")).join("-"); let config: Environment = self .matrix .keys() From fc6e775634a08be30c202bc3d25ae90e754fa7ba Mon Sep 17 00:00:00 2001 From: Thomas Date: Wed, 11 Mar 2026 11:32:21 -0400 Subject: [PATCH 4/4] Also replace : --- vdev/src/testing/config.rs | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/vdev/src/testing/config.rs b/vdev/src/testing/config.rs index 8be3ed40c7e38..a6ec57774a26b 100644 --- a/vdev/src/testing/config.rs +++ b/vdev/src/testing/config.rs @@ -202,7 +202,10 @@ impl ComposeTestConfig { .values() .multi_cartesian_product() .map(|product| { - let key = product.iter().map(|v| v.replace("@", "-")).join("-"); + let key = product + .iter() + .map(|v| v.replace("@", "-").replace(":", "-")) + .join("-"); let config: Environment = self .matrix .keys()