From 9e51a1661fac3e0d762cffdd28705e7e4bad76e9 Mon Sep 17 00:00:00 2001
From: Christian Breunig <christian@breunig.cc>
Date: Sat, 24 Feb 2024 09:25:42 +0100
Subject: container: T6060: support removing all container images at once via
 op-mode

cpo@LR1.wue3:~$ show container image
REPOSITORY                    TAG         IMAGE ID      CREATED       SIZE
docker.io/library/busybox     latest      3f57d9401f8d  5 weeks ago   4.5 MB
docker.io/jacobalberty/unifi  v7.5        f6df690d6c67  4 months ago  827 MB
docker.io/jacobalberty/unifi  v7.4        7838b75ef7b9  7 months ago  786 MB

cpo@LR1.wue3:~$ delete container image
Possible completions:
  3f57d9401f8d          Delete container image
  7838b75ef7b9
  all
  f6df690d6c67

cpo@LR1.wue3:~$ delete container image all

cpo@LR1.wue3:~$ show container image
REPOSITORY  TAG         IMAGE ID    CREATED     SIZE
---
 src/op_mode/container.py | 14 ++++++++------
 1 file changed, 8 insertions(+), 6 deletions(-)

(limited to 'src/op_mode')

diff --git a/src/op_mode/container.py b/src/op_mode/container.py
index 5a022d0c0..bcec9743e 100755
--- a/src/op_mode/container.py
+++ b/src/op_mode/container.py
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 #
-# Copyright (C) 2022 VyOS maintainers and contributors
+# Copyright (C) 2022-2024 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
@@ -29,7 +29,6 @@ def _get_json_data(command: str) -> list:
     """
     return cmd(f'{command} --format json')
 
-
 def _get_raw_data(command: str) -> list:
     json_data = _get_json_data(command)
     data = json.loads(json_data)
@@ -45,6 +44,13 @@ def add_image(name: str):
 def delete_image(name: str):
     from vyos.utils.process import rc_cmd
 
+    if name == 'all':
+        # gather list of all images and pass them to the removal list
+        name = cmd('sudo podman image ls --quiet')
+        # If there are no container images left, we can not delete them all
+        if not name: return
+        # replace newline with whitespace
+        name = name.replace('\n', ' ')
     rc, output = rc_cmd(f'podman image rm --force {name}')
     if rc != 0:
         raise vyos.opmode.InternalError(output)
@@ -57,7 +63,6 @@ def show_container(raw: bool):
     else:
         return cmd(command)
 
-
 def show_image(raw: bool):
     command = 'podman image ls'
     container_data = _get_raw_data('podman image ls')
@@ -66,7 +71,6 @@ def show_image(raw: bool):
     else:
         return cmd(command)
 
-
 def show_network(raw: bool):
     command = 'podman network ls'
     container_data = _get_raw_data(command)
@@ -75,7 +79,6 @@ def show_network(raw: bool):
     else:
         return cmd(command)
 
-
 def restart(name: str):
     from vyos.utils.process import rc_cmd
 
@@ -86,7 +89,6 @@ def restart(name: str):
     print(f'Container "{name}" restarted!')
     return output
 
-
 if __name__ == '__main__':
     try:
         res = vyos.opmode.run(sys.modules[__name__])
-- 
cgit v1.2.3