summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorsever-sever <v.gletenko@vyos.io>2021-04-21 17:20:27 +0000
committersever-sever <v.gletenko@vyos.io>2021-04-21 18:41:58 +0000
commitd657e65d66c14c007c235779ecb73ef5b8cfa327 (patch)
tree14f1ce76aa28f8a25b93a4128820277474983a09
parent255216b4470b0a25dded0edc1e8acd8e0fbf34b5 (diff)
downloadvyos-1x-d657e65d66c14c007c235779ecb73ef5b8cfa327.tar.gz
vyos-1x-d657e65d66c14c007c235779ecb73ef5b8cfa327.zip
container: T2216: Rewrite op-mode to python
-rw-r--r--op-mode-definitions/containers.xml.in12
-rwxr-xr-xsrc/op_mode/containers_op.py59
-rwxr-xr-xsrc/op_mode/containers_op.sh60
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