Help script to remove runtime images from datalist 75/100675/3
authorOndřej Šmalec <o.smalec@partner.samsung.com>
Thu, 23 Jan 2020 11:56:18 +0000 (12:56 +0100)
committerOndřej Šmalec <o.smalec@partner.samsung.com>
Fri, 24 Jan 2020 12:38:06 +0000 (12:38 +0000)
Issue-ID: OOM-2276
Signed-off-by: Ondřej Šmalec <o.smalec@partner.samsung.com>
Change-Id: I8f848dbb73747f0744a16fb5831627c20d9f8303

tools/remove_runtime_images.py [new file with mode: 0755]

diff --git a/tools/remove_runtime_images.py b/tools/remove_runtime_images.py
new file mode 100755 (executable)
index 0000000..67d732b
--- /dev/null
@@ -0,0 +1,79 @@
+#!/usr/bin/env python3
+import yaml
+import sys
+import argparse
+
+
+class ModifiedParser(argparse.ArgumentParser):
+    """
+    modified error handling to print help
+    """
+    def error(self, message):
+        sys.stderr.write('error: %s\n' % message)
+        self.print_help()
+        sys.exit(2)
+
+
+def create_blacklist(config_file):
+    """
+    Generate a list of images which needs to be excluded from docker_image_list
+    :param config_file: application_configuration file where images are.
+    :return:
+    """
+    with open(config_file, 'r') as f:
+        file = yaml.load(f, Loader=yaml.SafeLoader)
+
+        blacklist=[]
+        for name, _ in file['runtime_images'].items():
+            path = file['runtime_images'][name]['path']
+            blacklist.append(path[1:])
+    return blacklist
+
+
+def should_remove_line(line, blacklist):
+    """
+    Helping function to match image in blacklist
+    :param line: line in datalist file
+    :param blacklist: list of images to be removed
+    :return
+    """
+    return any([image in line for image in blacklist])
+
+
+def update_datalist(config_file, datalist):
+    """
+    remove local images from datalist.
+    :param config_file: application_configuration file where images are.
+    :param datalist: docker_image_list to be updated
+    :return:
+    """
+    blacklist = create_blacklist(config_file)
+    data = []
+    with open(datalist, 'r') as f:
+        for line in f:
+            if not should_remove_line(line, blacklist):
+                data.append(line)
+    with open(datalist, 'w') as f:
+        for line in data:
+            f.write(line)
+
+
+def run_cli():
+    """
+    Run as cli tool
+    """
+
+    parser = ModifiedParser(description='Remove runtime images from docker_image_list')
+
+    parser.add_argument('config_file',
+                        help='application_configuration file where images are')
+    parser.add_argument('datalist',
+                        help='docker_image_list from where images should be removed')
+    args = parser.parse_args()
+
+    update_datalist(args.config_file, args.datalist)
+
+
+if __name__ == '__main__':
+    run_cli()
+