From d02e81c2895cccbb57ef28ec245697e0a8a2d5f9 Mon Sep 17 00:00:00 2001 From: Bogdan Tintor Date: Wed, 21 Aug 2024 13:54:55 +0200 Subject: [PATCH 1/3] CTX-6321: coretex version command "improvements" -> coretex --version (lib version) coretex node --version (image version by digest). --- coretex/cli/commands/node.py | 3 ++- coretex/cli/main.py | 8 +------- coretex/cli/modules/node.py | 23 +++++++++++++++++++++++ coretex/utils/docker.py | 5 +++++ 4 files changed, 31 insertions(+), 8 deletions(-) diff --git a/coretex/cli/commands/node.py b/coretex/cli/commands/node.py index f5b2dcdd..d771e8f9 100644 --- a/coretex/cli/commands/node.py +++ b/coretex/cli/commands/node.py @@ -157,7 +157,7 @@ def config(advanced: bool) -> None: nodeConfig = NodeConfiguration.load() node_module.stop(nodeConfig.id) except (ConfigurationNotFound, InvalidConfiguration): - node_module.stop() + node_module.stop(nodeConfig.id) try: nodeConfig = NodeConfiguration.load() @@ -184,6 +184,7 @@ def config(advanced: bool) -> None: @onBeforeCommandExecute(initializeUserSession) @onBeforeCommandExecute(node_module.checkResourceLimitations) @onBeforeCommandExecute(checkEnvironment) +@click.version_option(node_module.getNodeVersion(), "--version", "-v", message = "Coretex Node version %(version)s") def node() -> None: pass diff --git a/coretex/cli/main.py b/coretex/cli/main.py index 96da0e0b..3c0a2ada 100644 --- a/coretex/cli/main.py +++ b/coretex/cli/main.py @@ -30,12 +30,6 @@ from ..utils.process import CommandException -@click.command() -def version() -> None: - version = getLibraryVersion("coretex") - ui.stdEcho(f"Coretex {version}") - - @click.command() def update() -> None: currentVersion = utils.fetchCurrentVersion() @@ -60,6 +54,7 @@ def update() -> None: @click.group(cls = ClickExceptionInterceptor) @utils.onBeforeCommandExecute(utils.checkLibVersion, excludeSubcommands = ["update"]) +@click.version_option(getLibraryVersion("coretex"), "--version", "-v", message = "Coretex %(version)s") def cli() -> None: pass @@ -68,5 +63,4 @@ def cli() -> None: cli.add_command(project) cli.add_command(node) cli.add_command(run) -cli.add_command(version) cli.add_command(update) diff --git a/coretex/cli/modules/node.py b/coretex/cli/modules/node.py index ad2af94d..e49eb01f 100644 --- a/coretex/cli/modules/node.py +++ b/coretex/cli/modules/node.py @@ -484,3 +484,26 @@ def initializeNodeConfiguration() -> None: nodeConfig = configureNode(advanced = False) nodeConfig.save() + + +def getNodeVersion() -> Optional[str]: + try: + nodeConfig = NodeConfiguration.load() + imageName = nodeConfig.image + if isRunning(): + imageName = docker.getContainerImageName(config_defaults.DOCKER_CONTAINER_NAME) + + image_info = docker.imageInspect(imageName) + repo_digests = image_info.get("RepoDigests", []) + if not isinstance(repo_digests, list): + return 'Unknown version' + + digest = repo_digests[0] + if not isinstance(digest, str): + # Assuming the format is "image_name@sha256:" + return "Unknown version" + else: + return digest.split("@")[1].split(":")[1][:12] if "@" in repo_digests[0] else "Unknown version" + + except Exception as ex: + return f"Unable to retrieve version of Node. Reason: {ex}." diff --git a/coretex/utils/docker.py b/coretex/utils/docker.py index f7d6785d..42fcef1c 100644 --- a/coretex/utils/docker.py +++ b/coretex/utils/docker.py @@ -184,3 +184,8 @@ def getDockerSwapLimit() -> int: return getTotalSwapMemory() return int(swapLimit / 1024) + + +def getContainerImageName(containerName: str) -> str: + _, output, _ = command(["docker", "inspect", "--format", "{{.Config.Image}}", containerName], ignoreStdout = True, ignoreStderr = True) + return output.strip() From 9566215f9eb6f1c7d28ec9d6986e87e420fa5899 Mon Sep 17 00:00:00 2001 From: Bogdan Tintor Date: Mon, 26 Aug 2024 16:29:54 +0200 Subject: [PATCH 2/3] CTX-6321: Discussion changes --- coretex/cli/commands/node.py | 2 +- coretex/cli/modules/node.py | 22 ++++++++++++++-------- 2 files changed, 15 insertions(+), 9 deletions(-) diff --git a/coretex/cli/commands/node.py b/coretex/cli/commands/node.py index d47ccd49..fe795597 100644 --- a/coretex/cli/commands/node.py +++ b/coretex/cli/commands/node.py @@ -158,7 +158,7 @@ def config(advanced: bool) -> None: nodeConfig = NodeConfiguration.load() node_module.stop(nodeConfig.id) except (ConfigurationNotFound, InvalidConfiguration): - node_module.stop(nodeConfig.id) + node_module.stop() try: nodeConfig = NodeConfiguration.load() diff --git a/coretex/cli/modules/node.py b/coretex/cli/modules/node.py index b88272f7..530f3b0c 100644 --- a/coretex/cli/modules/node.py +++ b/coretex/cli/modules/node.py @@ -497,17 +497,23 @@ def getNodeVersion() -> Optional[str]: if isRunning(): imageName = docker.getContainerImageName(config_defaults.DOCKER_CONTAINER_NAME) - image_info = docker.imageInspect(imageName) - repo_digests = image_info.get("RepoDigests", []) - if not isinstance(repo_digests, list): - return 'Unknown version' + imageInfo = docker.imageInspect(imageName) + repoDigests = imageInfo.get("RepoDigests", []) + if not isinstance(repoDigests, list) and len(repoDigests) > 0: + return "Unknown version" - digest = repo_digests[0] + digest = repoDigests[0] if not isinstance(digest, str): # Assuming the format is "image_name@sha256:" return "Unknown version" else: - return digest.split("@")[1].split(":")[1][:12] if "@" in repo_digests[0] else "Unknown version" + return digest.split("@")[1].split(":")[1][:12] if "@" in repoDigests[0] else "Unknown version" + + except ConfigurationNotFound: + ui.errorEcho("Node configuration not found.") + + except InvalidConfiguration as ex: + for error in ex.errors: + ui.errorEcho(error) - except Exception as ex: - return f"Unable to retrieve version of Node. Reason: {ex}." + return f"Unable to retrieve version of Node" \ No newline at end of file From 7f223aa048d935c25e60b82bb96be29b614969b2 Mon Sep 17 00:00:00 2001 From: Bogdan Tintor Date: Tue, 27 Aug 2024 09:53:07 +0200 Subject: [PATCH 3/3] CTX-6321: Discussion changes. --- coretex/cli/commands/node.py | 1 - coretex/cli/main.py | 7 +++++++ coretex/cli/modules/node.py | 29 ----------------------------- 3 files changed, 7 insertions(+), 30 deletions(-) diff --git a/coretex/cli/commands/node.py b/coretex/cli/commands/node.py index fe795597..bf425b71 100644 --- a/coretex/cli/commands/node.py +++ b/coretex/cli/commands/node.py @@ -211,7 +211,6 @@ def logs(tail: Optional[int], follow: bool, timestamps: bool) -> None: @onBeforeCommandExecute(initializeUserSession) @onBeforeCommandExecute(node_module.checkResourceLimitations) @onBeforeCommandExecute(checkEnvironment) -@click.version_option(node_module.getNodeVersion(), "--version", "-v", message = "Coretex Node version %(version)s") def node() -> None: pass diff --git a/coretex/cli/main.py b/coretex/cli/main.py index 3c0a2ada..54d277f2 100644 --- a/coretex/cli/main.py +++ b/coretex/cli/main.py @@ -30,6 +30,12 @@ from ..utils.process import CommandException +@click.command() +def version() -> None: + version = getLibraryVersion("coretex") + ui.stdEcho(f"Coretex {version}") + + @click.command() def update() -> None: currentVersion = utils.fetchCurrentVersion() @@ -63,4 +69,5 @@ def cli() -> None: cli.add_command(project) cli.add_command(node) cli.add_command(run) +cli.add_command(version) cli.add_command(update) diff --git a/coretex/cli/modules/node.py b/coretex/cli/modules/node.py index 530f3b0c..4d11a062 100644 --- a/coretex/cli/modules/node.py +++ b/coretex/cli/modules/node.py @@ -488,32 +488,3 @@ def initializeNodeConfiguration() -> None: nodeConfig = configureNode(advanced = False) nodeConfig.save() - - -def getNodeVersion() -> Optional[str]: - try: - nodeConfig = NodeConfiguration.load() - imageName = nodeConfig.image - if isRunning(): - imageName = docker.getContainerImageName(config_defaults.DOCKER_CONTAINER_NAME) - - imageInfo = docker.imageInspect(imageName) - repoDigests = imageInfo.get("RepoDigests", []) - if not isinstance(repoDigests, list) and len(repoDigests) > 0: - return "Unknown version" - - digest = repoDigests[0] - if not isinstance(digest, str): - # Assuming the format is "image_name@sha256:" - return "Unknown version" - else: - return digest.split("@")[1].split(":")[1][:12] if "@" in repoDigests[0] else "Unknown version" - - except ConfigurationNotFound: - ui.errorEcho("Node configuration not found.") - - except InvalidConfiguration as ex: - for error in ex.errors: - ui.errorEcho(error) - - return f"Unable to retrieve version of Node" \ No newline at end of file