From 930d8eae6fcc5b811861c41cd82368f8fe762082 Mon Sep 17 00:00:00 2001 From: shantanuduplo Date: Thu, 6 Feb 2025 00:45:13 +0530 Subject: [PATCH] enhancement sidecar container update_image --- CHANGELOG.md | 1 + src/duplo_resource/service.py | 16 +++++++++++----- src/duplocloud/args.py | 4 ++++ 3 files changed, 16 insertions(+), 5 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 62b6917..cf9e044 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## [Unreleased] - Added enhancements to the start/stop service to select all services or specific ones. +- Added enhancement to update_image service to also update the sidecar container image. ## [0.2.44] - 2025-01-22 diff --git a/src/duplo_resource/service.py b/src/duplo_resource/service.py index f3d5a7f..f8f678f 100644 --- a/src/duplo_resource/service.py +++ b/src/duplo_resource/service.py @@ -222,8 +222,9 @@ def update_replicas(self, @Command() def update_image(self, name: args.NAME, - container: args.CONTAINER = None, image: args.IMAGE = None, + container: args.CONTAINER = None, + container_image: args.CONTAINER_IMAGE = None, wait: args.WAIT = False) -> dict: """Update the image of a service. @@ -231,29 +232,34 @@ def update_image(self, Usage: Basic CLI Use ```sh - duploctl service update_image - duploctl service update_image --container + duploctl service update_image + duploctl service update_image --container --container-image ``` Args: name: The name of the service to update. image: The new image to use for the service. container: The name of the sidecar container to update image. + container_image: The new image of the sidecar container to update. + wait: Whether to wait for the update to complete. Returns: message: Success message """ + if (image and (container or container_image)) or (not image and (container is None or container_image is None)): + return {"error": "Provide either OR both --container and --container-image , but not both."} + service = self.find(name) data = {} - if container: + if container and container_image: other_docker_config = loads(service["Template"]["OtherDockerConfig"]) additional_containers = other_docker_config.get("additionalContainers", []) container_found = False for c in additional_containers: if c["name"] == container: - c["image"] = image + c["image"] = container_image container_found = True break diff --git a/src/duplocloud/args.py b/src/duplocloud/args.py index dd66160..8c6c8dd 100644 --- a/src/duplocloud/args.py +++ b/src/duplocloud/args.py @@ -153,6 +153,7 @@ help='The resource name') IMAGE = Arg("image", + nargs='?', help='The image to use') S3BUCKET = Arg("bucket", @@ -170,6 +171,9 @@ CONTAINER = Arg("container", "--container", "-C", help='The side-car container name') +CONTAINER_IMAGE = Arg("container-image", "--container-image", + help='The side-car container image') + EXTERNAL_PORT = Arg("external-port", "--external-port", help='The external port')