diff options
| -rw-r--r-- | op-mode-definitions/containers.xml.in | 12 | ||||
| -rwxr-xr-x | src/op_mode/containers_op.py | 59 | ||||
| -rwxr-xr-x | src/op_mode/containers_op.sh | 60 | 
3 files changed, 65 insertions, 66 deletions
diff --git a/op-mode-definitions/containers.xml.in b/op-mode-definitions/containers.xml.in index a530bcff4..a22549dd9 100644 --- a/op-mode-definitions/containers.xml.in +++ b/op-mode-definitions/containers.xml.in @@ -11,7 +11,7 @@              <properties>                <help>Pull a new image for container</help>              </properties> -            <command>sudo ${vyos_op_scripts_dir}/containers_op.sh --pull "${4}"</command> +            <command>sudo ${vyos_op_scripts_dir}/containers_op.py --pull "${4}"</command>            </tagNode>          </children>        </node> @@ -28,7 +28,7 @@              <properties>                <help>Delete container image</help>              </properties> -            <command>sudo ${vyos_op_scripts_dir}/containers_op.sh --remove "${4}"</command> +            <command>sudo ${vyos_op_scripts_dir}/containers_op.py --remove "${4}"</command>            </tagNode>          </children>        </node> @@ -40,19 +40,19 @@          <properties>            <help>Show containers</help>          </properties> -        <command>sudo ${vyos_op_scripts_dir}/containers_op.sh --show-containers</command> +        <command>sudo ${vyos_op_scripts_dir}/containers_op.py --all</command>          <children>            <leafNode name="image">              <properties> -              <help>Show available container images</help> +              <help>Delete container image</help>              </properties> -            <command>sudo ${vyos_op_scripts_dir}/containers_op.sh --show-images</command> +            <command>sudo ${vyos_op_scripts_dir}/containers_op.py --image</command>            </leafNode>            <leafNode name="network">              <properties>                <help>Show available container networks</help>              </properties> -            <command>sudo ${vyos_op_scripts_dir}/containers_op.sh --show-networks</command> +            <command>sudo ${vyos_op_scripts_dir}/containers_op.py --networks</command>            </leafNode>          </children>        </node> diff --git a/src/op_mode/containers_op.py b/src/op_mode/containers_op.py new file mode 100755 index 000000000..1e3fc3a8f --- /dev/null +++ b/src/op_mode/containers_op.py @@ -0,0 +1,59 @@ +#!/usr/bin/env python3 +# +# Copyright (C) 2021 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 <http://www.gnu.org/licenses/>. + +import argparse +from vyos.configquery import query_context, ConfigQueryError +from vyos.util import cmd + +config, op = query_context() + +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") + +if not config.exists(['container']): +    print('Containers not configured') +    exit(0) + +if __name__ == '__main__': +    args = parser.parse_args() + +    if args.all: +        print(cmd('podman ps --all')) +        exit(0) +    if args.image: +        print(cmd('podman image ls')) +        exit(0) +    if args.networks: +        print(cmd('podman network ls')) +        exit(0) +    if args.pull: +        image = args.pull +        try: +            print(cmd(f'sudo podman image pull {image}')) +        except: +            print(f'Can\'t find or download image "{image}"') +        exit(0) +    if args.remove: +        image = args.remove +        try: +            print(cmd(f'sudo podman image rm {image}')) +        except: +            print(f'Can\'t delete image "{image}"') +        exit(0) diff --git a/src/op_mode/containers_op.sh b/src/op_mode/containers_op.sh deleted file mode 100755 index 9c410bd7f..000000000 --- a/src/op_mode/containers_op.sh +++ /dev/null @@ -1,60 +0,0 @@ -#!/usr/bin/env bash - -# Expect 2 args or "show-containers" or "show-images" -if [[ $# -ne 2 ]] && [[ $1 != "--show-containers" ]] && [[ $1 != "--show-images" ]] && [[ $1 != "--show-networks" ]] ; then -    echo "Image not set or not found" -    exit 1 -fi - -OPTION=$1 -IMAGE=$2 - -# Download image -pull_image() { -    sudo podman pull ${IMAGE} -} - -# Remove image -remove_image() { -    sudo podman image rm ${IMAGE} -} - -# Show containers -show_containers() { -    sudo podman ps -a -} - -# Show image -show_images() { -    sudo podman image ls -} - -# Show networks -show_networks() { -    sudo podman network ls -} - -if [ "$OPTION" = "--pull" ]; then -    pull_image -    exit 0 -fi - -if [ "$OPTION" = "--remove" ]; then -    remove_image -    exit 0 -fi - -if [ "$OPTION" = "--show-containers" ]; then -    show_containers -    exit 0 -fi - -if [ "$OPTION" = "--show-networks" ]; then -    show_networks -    exit 0 -fi - -if [ "$OPTION" = "--show-images" ]; then -    show_images -    exit 0 -fi  | 
