summaryrefslogtreecommitdiff
path: root/src/op_mode
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 /src/op_mode
parent255216b4470b0a25dded0edc1e8acd8e0fbf34b5 (diff)
downloadvyos-1x-d657e65d66c14c007c235779ecb73ef5b8cfa327.tar.gz
vyos-1x-d657e65d66c14c007c235779ecb73ef5b8cfa327.zip
container: T2216: Rewrite op-mode to python
Diffstat (limited to 'src/op_mode')
-rwxr-xr-xsrc/op_mode/containers_op.py59
-rwxr-xr-xsrc/op_mode/containers_op.sh60
2 files changed, 59 insertions, 60 deletions
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