| #!/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() |