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/testing/config.rs b/vdev/src/testing/config.rs index 23f4580df5187..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().join("-"); + let key = product + .iter() + .map(|v| v.replace("@", "-").replace(":", "-")) + .join("-"); let config: Environment = self .matrix .keys() diff --git a/vdev/src/utils/environment.rs b/vdev/src/utils/environment.rs index d2c00320c7445..d0842a11a1d69 100644 --- a/vdev/src/utils/environment.rs +++ b/vdev/src/utils/environment.rs @@ -12,15 +12,28 @@ 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") + && 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()); + } + result } pub(crate) fn extract_present(environment: &Environment) -> BTreeMap {