From 7e7c6a5f120f317e3e4555939a099f48cf0b27e0 Mon Sep 17 00:00:00 2001 From: Christian Poessinger Date: Sun, 8 May 2022 21:52:51 +0200 Subject: container: op-mode: T3852: use XML inline podman commands Reduce bloat of containers_op.py wrapper script. All commands can be passed directly to podman via the XML script. This also makes the execution faster, as no Python environment needs to be build up. --- op-mode-definitions/container.xml.in | 176 ++++++++++++++++++++++++++++++++++ op-mode-definitions/containers.xml.in | 176 ---------------------------------- src/op_mode/containers_op.py | 80 ---------------- 3 files changed, 176 insertions(+), 256 deletions(-) create mode 100644 op-mode-definitions/container.xml.in delete mode 100644 op-mode-definitions/containers.xml.in delete mode 100755 src/op_mode/containers_op.py diff --git a/op-mode-definitions/container.xml.in b/op-mode-definitions/container.xml.in new file mode 100644 index 000000000..fa66402dc --- /dev/null +++ b/op-mode-definitions/container.xml.in @@ -0,0 +1,176 @@ + + + + + + + Add container image + + + + + Pull a new image for container + + sudo podman image pull "${4}" + + + + + + + + + + Attach to a running container + + container name + + + sudo podman exec --interactive --tty "$3" /bin/sh + + + + + + + + Delete container image + + + + + Delete container image + + + + + sudo podman image rm --force "${4}" + + + + + + + + + + Generate Container Image + + + + + Name of container image (tag) + + + + + Path to Dockerfile + + <filename> + + + sudo podman build --layers --force-rm --tag "$4" $6 + + + + + + + + + + + + + + Monitor last lines of container logs + + container name + + + sudo podman logs --follow --names "$4" + + + + + + + + + + Show containers + + sudo podman ps --all + + + + Show container image + + sudo podman image ls + + + + Show logs from a given container + + container name + + + sudo podman logs --names "$4" + + + + Show available container networks + + sudo podman network ls + + + + + + + + Show logs from a given container + + container name + + + sudo podman logs --names "$4" + + + + + + + + + + Restart a given container + + container name + + + sudo podman restart "$3" + + + + + + + + Update a container image + + + + + Update container image + + container name + + + if cli-shell-api existsActive container name "$4"; then sudo podman pull $(cli-shell-api returnActiveValue container name "$4" image); else echo "Container $4 does not exist"; fi + + + + + + diff --git a/op-mode-definitions/containers.xml.in b/op-mode-definitions/containers.xml.in deleted file mode 100644 index 48501bd84..000000000 --- a/op-mode-definitions/containers.xml.in +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - - Add container image - - - - - Pull a new image for container - - sudo ${vyos_op_scripts_dir}/containers_op.py --pull "${4}" - - - - - - - - - - Attach to a running container - - container name - - - sudo podman exec --interactive --tty "$3" /bin/sh - - - - - - - - Delete container image - - - - - Delete container image - - - - - sudo ${vyos_op_scripts_dir}/containers_op.py --remove "${4}" - - - - - - - - - - Generate Container Image - - - - - Name of container image (tag) - - - - - Path to Dockerfile - - <filename> - - - sudo podman build --layers --force-rm --tag "$4" $6 - - - - - - - - - - - - - - Monitor last lines of container logs - - container name - - - sudo podman logs --follow --names "$4" - - - - - - - - - - Show containers - - sudo ${vyos_op_scripts_dir}/containers_op.py --all - - - - Show container image - - sudo ${vyos_op_scripts_dir}/containers_op.py --image - - - - Show logs from a given container - - container name - - - sudo podman logs --names "$4" - - - - Show available container networks - - sudo ${vyos_op_scripts_dir}/containers_op.py --networks - - - - - - - - Show logs from a given container - - container name - - - sudo podman logs --names "$4" - - - - - - - - - - Restart a given container - - container name - - - sudo podman restart "$3" - - - - - - - - Update a container image - - - - - Update container image - - container name - - - sudo ${vyos_op_scripts_dir}/containers_op.py --update "${4}" - - - - - - diff --git a/src/op_mode/containers_op.py b/src/op_mode/containers_op.py deleted file mode 100755 index c55a48b3c..000000000 --- a/src/op_mode/containers_op.py +++ /dev/null @@ -1,80 +0,0 @@ -#!/usr/bin/env python3 -# -# Copyright (C) 2021-2022 VyOS maintainers and contributors -# -# This program is free software; you can redistribute it and/or modify -# it under the terms of the GNU General Public License version 2 or later as -# published by the Free Software Foundation. -# -# This program is distributed in the hope that it will be useful, -# but WITHOUT ANY WARRANTY; without even the implied warranty of -# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -# GNU General Public License for more details. -# -# You should have received a copy of the GNU General Public License -# along with this program. If not, see . - -import os -import argparse - -from getpass import getuser -from vyos.configquery import ConfigTreeQuery -from vyos.base import Warning -from vyos.util import cmd -from subprocess import STDOUT - -parser = argparse.ArgumentParser() -parser.add_argument("-a", "--all", action="store_true", help="Show all containers") -parser.add_argument("-i", "--image", action="store_true", help="Show container images") -parser.add_argument("-n", "--networks", action="store_true", help="Show container images") -parser.add_argument("-p", "--pull", action="store", help="Pull image for container") -parser.add_argument("-d", "--remove", action="store", help="Delete container image") -parser.add_argument("-u", "--update", action="store", help="Update given container image") - -config = ConfigTreeQuery() -base = ['container'] - -if getuser() != 'root': - raise OSError('This functions needs to be run as root to return correct results!') - -if __name__ == '__main__': - args = parser.parse_args() - - if args.all: - print(cmd('podman ps --all')) - elif args.image: - print(cmd('podman image ls')) - elif args.networks: - print(cmd('podman network ls')) - - elif args.pull: - image = args.pull - registry_config = '/etc/containers/registries.conf' - if not os.path.exists(registry_config): - Warning('No container registry configured. Please use full URL when '\ - 'adding an image. E.g. prefix with docker.io/image-name.') - try: - print(os.system(f'podman image pull {image}')) - except Exception as e: - print(f'Unable to download image "{image}". {e}') - - elif args.remove: - image = args.remove - try: - print(os.system(f'podman image rm {image}')) - except FileNotFoundError as e: - print(f'Unable to delete image "{image}". {e}') - - elif args.update: - tmp = config.get_config_dict(base + ['name', args.update], - key_mangling=('-', '_'), get_first_key=True) - try: - image = tmp['image'] - print(cmd(f'podman image pull {image}')) - except Exception as e: - print(f'Unable to download image "{image}". {e}') - else: - parser.print_help() - exit(1) - - exit(0) -- cgit v1.2.3