Skip to content

Commit f36038a

Browse files
committed
Fix regex for EcsResource when image includes @sha256:<hash>
Fixes #1788
1 parent 2b31033 commit f36038a

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

aws-resources/src/main/java/io/opentelemetry/contrib/aws/resource/EcsResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -314,7 +314,7 @@ private static class DockerImage {
314314

315315
private static final Pattern imagePattern =
316316
Pattern.compile(
317-
"^(?<repository>([^/\\s]+/)?([^:\\s]+))(:(?<tag>[^@\\s]+))?(@sha256:(?<sha256>\\d+))?$");
317+
"^(?<repository>([^/\\s]+/)?([^:\\s]+))(:(?<tag>[^@\\s]+))?(@sha256:(?<sha256>\\p{XDigit}+))?$");
318318

319319
final String repository;
320320
final String tag;

aws-resources/src/test/java/io/opentelemetry/contrib/aws/resource/EcsResourceTest.java

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -162,4 +162,26 @@ void inServiceLoader() {
162162
String readResourceJson(String resourceName) throws IOException {
163163
return Resources.toString(Resources.getResource(resourceName), StandardCharsets.UTF_8);
164164
}
165+
166+
@Test
167+
void testImageWithSha256Digest() throws IOException {
168+
// Create a minimal JSON with just the Image field containing a SHA256 digest
169+
String json = "{\"Image\": \"111122223333.dkr.ecr.us-east-1.amazonaws.com/myapp:a635776144e10255377fa15957781eb11f59daa7@sha256:ca8528f563912012ee19777fad134b9abbe305c5d7fcf62c4c351a4eb8656dd8\"}";
170+
171+
Map<String, String> mockSysEnv = new HashMap<>();
172+
mockSysEnv.put(ECS_METADATA_KEY_V4, "ecs_metadata_uri");
173+
174+
when(mockHttpClient.fetchString("GET", "ecs_metadata_uri", Collections.emptyMap(), null))
175+
.thenReturn(json);
176+
when(mockHttpClient.fetchString("GET", "ecs_metadata_uri/task", Collections.emptyMap(), null))
177+
.thenReturn("{}");
178+
179+
Resource resource = EcsResource.buildResource(mockSysEnv, mockHttpClient);
180+
Attributes attributes = resource.getAttributes();
181+
182+
assertThat(attributes.get(CONTAINER_IMAGE_NAME))
183+
.isEqualTo("111122223333.dkr.ecr.us-east-1.amazonaws.com/myapp");
184+
assertThat(attributes.get(CONTAINER_IMAGE_TAGS))
185+
.isEqualTo(singletonList("a635776144e10255377fa15957781eb11f59daa7"));
186+
}
165187
}

0 commit comments

Comments
 (0)