From 1663881f94eee4dd74db6ccad5684fdc01e12c5b Mon Sep 17 00:00:00 2001 From: David Boreham Date: Tue, 27 Feb 2024 08:40:02 -0700 Subject: [PATCH 1/3] Fixes to fetch containers logic --- stack_orchestrator/build/fetch_containers.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/stack_orchestrator/build/fetch_containers.py b/stack_orchestrator/build/fetch_containers.py index 890cb94f..c857d4af 100644 --- a/stack_orchestrator/build/fetch_containers.py +++ b/stack_orchestrator/build/fetch_containers.py @@ -110,8 +110,11 @@ def _filter_for_platform(container: str, def _get_latest_image(container: str, registry_info: RegistryInfo): all_tags = _get_tags_for_container(container, registry_info) tags_for_platform = _filter_for_platform(container, registry_info, all_tags) - latest_tag = _find_latest(tags_for_platform) - return f"{container}:{latest_tag}" + if len(tags_for_platform) > 0: + latest_tag = _find_latest(tags_for_platform) + return f"{container}:{latest_tag}" + else: + return None def _fetch_image(tag: str, registry_info: RegistryInfo): @@ -148,6 +151,7 @@ def command(ctx, include, exclude, force_local_overwrite, image_registry, regist # Generate list of target containers stack = ctx.obj.stack containers_in_scope = get_containers_in_scope(stack) + all_containers_found = True for container in containers_in_scope: local_tag = _local_tag_for(container) if include_exclude_check(container, include, exclude): @@ -156,6 +160,10 @@ def command(ctx, include, exclude, force_local_overwrite, image_registry, regist # For each container, attempt to find the latest of a set of # images with the correct name and platform in the specified registry image_to_fetch = _get_latest_image(container, registry_info) + if not image_to_fetch: + print(f"Warning: no image found to fetch for container {container}") + all_containers_found = False + continue if opts.o.debug: print(f"Fetching: {image_to_fetch}") _fetch_image(image_to_fetch, registry_info) @@ -173,8 +181,11 @@ def command(ctx, include, exclude, force_local_overwrite, image_registry, regist if not opts.o.quiet: print(f"Skipping local tagging for this image: {container} because that would " "overwrite an existing :local tagged image, use --force-local-overwrite to do so.") + continue # Tag the fetched image with the :local tag _add_local_tag(image_to_fetch, image_registry, local_tag) else: if opts.o.verbose: print(f"Excluding: {container}") + if not all_containers_found: + print("Warning: couldn't find usable images for one or more containers, this stack will not deploy") -- 2.45.2 From 61dda7f6d94155ffe0f16a76b45821fe99bbbae2 Mon Sep 17 00:00:00 2001 From: David Boreham Date: Tue, 27 Feb 2024 08:49:32 -0700 Subject: [PATCH 2/3] Fixes for arm --- stack_orchestrator/build/fetch_containers.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/stack_orchestrator/build/fetch_containers.py b/stack_orchestrator/build/fetch_containers.py index c857d4af..4d4c4601 100644 --- a/stack_orchestrator/build/fetch_containers.py +++ b/stack_orchestrator/build/fetch_containers.py @@ -84,13 +84,14 @@ def _filter_for_platform(container: str, tag_list: List[str]) -> List[str] : filtered_tags = [] this_machine = platform.machine() - # Translate between Python platform names and docker + # Translate between Python and docker platform names if this_machine == "x86_64": this_machine = "amd64" + if this_machine == "aarch64": + this_machine = "arm64" if opts.o.debug: print(f"Python says the architecture is: {this_machine}") docker = DockerClient() - docker.login(registry_info.registry, registry_info.registry_username, registry_info.registry_token) for tag in tag_list: remote_tag = f"{registry_info.registry}/{container}:{tag}" manifest_cmd = ExtendedManifestCLI(docker.client_config) @@ -119,7 +120,6 @@ def _get_latest_image(container: str, registry_info: RegistryInfo): def _fetch_image(tag: str, registry_info: RegistryInfo): docker = DockerClient() - docker.login(registry_info.registry, registry_info.registry_username, registry_info.registry_token) remote_tag = f"{registry_info.registry}/{tag}" if opts.o.debug: print(f"Attempting to pull this image: {remote_tag}") @@ -148,6 +148,8 @@ def command(ctx, include, exclude, force_local_overwrite, image_registry, regist '''EXPERIMENTAL: fetch the images for a stack from remote registry''' registry_info = RegistryInfo(image_registry, registry_username, registry_token) + docker = DockerClient() + docker.login(registry_info.registry, registry_info.registry_username, registry_info.registry_token) # Generate list of target containers stack = ctx.obj.stack containers_in_scope = get_containers_in_scope(stack) @@ -161,7 +163,7 @@ def command(ctx, include, exclude, force_local_overwrite, image_registry, regist # images with the correct name and platform in the specified registry image_to_fetch = _get_latest_image(container, registry_info) if not image_to_fetch: - print(f"Warning: no image found to fetch for container {container}") + print(f"Warning: no image found to fetch for container: {container}") all_containers_found = False continue if opts.o.debug: -- 2.45.2 From 51f87c5f9d089332e2467a79b1063b7e19735e4d Mon Sep 17 00:00:00 2001 From: David Boreham Date: Tue, 27 Feb 2024 08:51:55 -0700 Subject: [PATCH 3/3] Add informative output --- stack_orchestrator/build/fetch_containers.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/stack_orchestrator/build/fetch_containers.py b/stack_orchestrator/build/fetch_containers.py index 4d4c4601..aeaf4d51 100644 --- a/stack_orchestrator/build/fetch_containers.py +++ b/stack_orchestrator/build/fetch_containers.py @@ -149,6 +149,8 @@ def command(ctx, include, exclude, force_local_overwrite, image_registry, regist registry_info = RegistryInfo(image_registry, registry_username, registry_token) docker = DockerClient() + if not opts.o.quiet: + print("Logging into container registry:") docker.login(registry_info.registry, registry_info.registry_username, registry_info.registry_token) # Generate list of target containers stack = ctx.obj.stack -- 2.45.2