Skip to content

Commit 987fb3a

Browse files
committed
Add docker label with original docker image tag if interpolated
1 parent 2b3a154 commit 987fb3a

2 files changed

Lines changed: 29 additions & 9 deletions

File tree

ecs_composex/compose/compose_services/__init__.py

Lines changed: 12 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -130,6 +130,8 @@ def __init__(
130130
import_env_variables(self.environment) if self.environment else NoValue
131131
)
132132
self.depends_on = set_else_none("depends_on", self.definition, [], False)
133+
self.docker_labels: dict = {}
134+
self.import_docker_labels(self._definition)
133135

134136
if not keyisset("image", self.definition):
135137
raise KeyError("You must specify the image to use for", self.name)
@@ -877,21 +879,22 @@ def define_port_mappings(self) -> list:
877879
self.handle_expose_ports(service_port_mappings)
878880
return service_port_mappings
879881

880-
def import_docker_labels(self):
882+
def import_docker_labels(self, definition: dict):
881883
"""
882884
Import the Docker labels if defined
883885
"""
884886
labels = {}
885-
if not keyisset("labels", self.definition):
887+
if not keyisset("labels", definition):
886888
return labels
887889
else:
888-
if isinstance(self.definition["labels"], dict):
889-
return self.definition["labels"]
890-
elif isinstance(self.definition["labels"], list):
891-
for label in self.definition["labels"]:
890+
if isinstance(definition["labels"], dict):
891+
self.docker_labels.update(definition["labels"])
892+
elif isinstance(definition["labels"], list):
893+
for label in definition["labels"]:
892894
splits = label.split("=")
893-
labels.update({splits[0]: splits[1] if len(splits) == 2 else ""})
894-
return labels
895+
self.docker_labels.update(
896+
{splits[0]: splits[1] if len(splits) == 2 else ""}
897+
)
895898

896899
def set_container_definition(self):
897900
"""
@@ -929,7 +932,7 @@ def set_container_definition(self):
929932
If(USE_WINDOWS_OS_T, NoValue, keyisset("Privileged", self.definition)),
930933
),
931934
WorkingDirectory=self.working_dir,
932-
DockerLabels=self.import_docker_labels(),
935+
DockerLabels=self.docker_labels,
933936
ReadonlyRootFilesystem=If(
934937
USE_WINDOWS_OS_T, NoValue, keyisset("read_only", self.definition)
935938
),

ecs_composex/compose/compose_services/service_image/__init__.py

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from __future__ import annotations
66

7+
import copy
78
import re
89
from typing import TYPE_CHECKING, Union
910

@@ -129,6 +130,10 @@ def private_ecr_digest(self, settings: ComposeXSettings):
129130
)
130131
else:
131132
self.service.definition["image"] = self.image_uri
133+
LOG.debug("ECR - ADDING IMAGE TAG TO LABELS")
134+
self.service.docker_labels.update(
135+
{"com.docker.image_tag": service_image["imageTag"]}
136+
)
132137

133138
def interpolate_image_digest(self, settings: ComposeXSettings = None):
134139
"""
@@ -165,6 +170,7 @@ def retrieve_image_digest(self):
165170
"application/vnd.docker.distribution.manifest.list.v2+json",
166171
]
167172
try:
173+
original_image = self.image
168174
dkr_client = docker.APIClient()
169175
image_details = dkr_client.inspect_distribution(self.image)
170176
if not keyisset("Descriptor", image_details):
@@ -192,6 +198,17 @@ def retrieve_image_digest(self):
192198
)
193199
else:
194200
self.service.definition["image"] = self.image_uri
201+
try:
202+
image_tag_re = re.compile(r"(?<=[:@])(?P<tag_digest>[\w.\-_]+$)")
203+
original_tag_digest = image_tag_re.search(original_image).group(
204+
"tag_digest"
205+
)
206+
self.service.docker_labels.update(
207+
{"com.compose.image_tag": original_tag_digest}
208+
)
209+
except AttributeError:
210+
pass
211+
195212
else:
196213
LOG.warning(
197214
"No digest found. This might be due to Registry API prior to V2"

0 commit comments

Comments
 (0)