8000 Docker registry customisation (#12590) · localstack/localstack@715d118 · GitHub
[go: up one dir, main page]

Skip to content
8000

Commit 715d118

Browse files
authored
Docker registry customisation (#12590)
1 parent 02ad74e commit 715d118

File tree

4 files changed

+21
-0
lines changed

4 files changed

+21
-0
lines changed

localstack-core/localstack/config.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1007,6 +1007,7 @@ def populate_edge_configuration(
10071007
# b) json dict mapping the <runtime> to an image, e.g. {"python3.9": "custom-repo/lambda-py:thon3.9"}
10081008
LAMBDA_RUNTIME_IMAGE_MAPPING = os.environ.get("LAMBDA_RUNTIME_IMAGE_MAPPING", "").strip()
10091009

1010+
10101011
# PUBLIC: 0 (default)
10111012
# Whether to disable usage of deprecated runtimes
10121013
LAMBDA_RUNTIME_VALIDATION = int(os.environ.get("LAMBDA_RUNTIME_VALIDATION") or 0)

localstack-core/localstack/utils/container_utils/container_client.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,9 +589,20 @@ class DockerRunFlags:
589589
dns: Optional[List[str]]
590590

591591

592+
class RegistryResolverStrategy(Protocol):
593+
def resolve(self, image_name: str) -> str: ...
594+
595+
596+
class HardCodedResolver:
597+
def resolve(self, image_name: str) -> str: # noqa
598+
return image_name
599+
600+
592601
# TODO: remove Docker/Podman compatibility switches (in particular strip_wellknown_repo_prefixes=...)
593602
# from the container client base interface and introduce derived Podman client implementations instead!
594603
class ContainerClient(metaclass=ABCMeta):
604+
registry_resolver_strategy: RegistryResolverStrategy = HardCodedResolver()
605+
595606
@abstractmethod
596607
def get_system_info(self) -> dict:
597608
"""Returns the docker system-wide information as dictionary (``docker info``)."""

localstack-core/localstack/utils/container_utils/docker_cmd_client.py

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -356,6 +356,7 @@ def copy_from_container(
356356

357357
def pull_image(self, docker_image: str, platform: Optional[DockerPlatform] = None) -> None:
358358
cmd = self._docker_cmd()
359+
docker_image = self.registry_resolver_strategy.resolve(docker_image)
359360
cmd += ["pull", docker_image]
360361
if platform:
361362
cmd += ["--platform", platform]
@@ -518,6 +519,7 @@ def inspect_image(
518519
pull: bool = True,
519520
strip_wellknown_repo_prefixes: bool = True,
520521
) -> Dict[str, Union[dict, list, str]]:
522+
image_name = self.registry_resolver_strategy.resolve(image_name)
521523
try:
522524
result = self._inspect_object(image_name)
523525
if strip_wellknown_repo_prefixes:
@@ -656,6 +658,7 @@ def has_docker(self) -> bool:
656658
return False
657659

658660
def create_container(self, image_name: str, **kwargs) -> str:
661+
image_name = self.registry_resolver_strategy.resolve(image_name)
659662
cmd, env_file = self._build_run_create_cmd("create", image_name, **kwargs)
660663
LOG.debug("Create container with cmd: %s", cmd)
661664
try:
@@ -674,6 +677,7 @@ def create_container(self, image_name: str, **kwargs) -> str:
674677
Util.rm_env_vars_file(env_file)
675678

676679
def run_container(self, image_name: str, stdin=None, **kwargs) -> Tuple[bytes, bytes]:
680+
image_name = self.registry_resolver_strategy.resolve(image_name)
677681
cmd, env_file = self._build_run_create_cmd("run", image_name, **kwargs)
678682
LOG.debug("Run container with cmd: %s", cmd)
679683
try:

localstack-core/localstack/utils/container_utils/docker_sdk_client.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,6 +337,8 @@ def copy_from_container(
337337
def pull_image(self, docker_image: str, platform: Optional[DockerPlatform] = None) -> None:
338338
LOG.debug("Pulling Docker image: %s", docker_image)
339339
# some path in the docker image string indicates a custom repository
340+
341+
docker_image = self.registry_resolver_strategy.resolve(docker_image)
340342
try:
341343
self.client().images.pull(docker_image, platform=platform)
342344
except ImageNotFound:
@@ -465,6 +467,7 @@ def inspect_image(
465467
pull: bool = True,
466468
strip_wellknown_repo_prefixes: bool = True,
467469
) -> Dict[str, Union[dict, list, str]]:
470+
image_name = self.registry_resolver_strategy.resolve(image_name)
468471
try:
469472
result = self.client().images.get(image_name).attrs
470473
if strip_wellknown_repo_prefixes:
@@ -778,6 +781,8 @@ def create_container(
778781
if volumes:
779782
mounts = Util.convert_mount_list_to_dict(volumes)
780783

784+
image_name = self.registry_resolver_strategy.resolve(image_name)
785+
781786
def create_container():
782787
return self.client().containers.create(
783788
image=image_name,

0 commit comments

Comments
 (0)
0