From ed00808e8bc372b2fd3f6ea1d1b17044ff052d3c Mon Sep 17 00:00:00 2001 From: Clemens Klug Date: Fri, 5 Apr 2019 14:35:17 +0200 Subject: [PATCH] add reading from stdin --- start.py | 36 +++++++++++++++++++++--------------- 1 file changed, 21 insertions(+), 15 deletions(-) diff --git a/start.py b/start.py index d3c2d4a..2772fc8 100644 --- a/start.py +++ b/start.py @@ -3,11 +3,15 @@ import json import os import subprocess import logging +import sys log = logging.getLogger(__name__) -def change_service(path, cmd): +def change_service(path, action): + cmd = ["docker-compose"] + action.split() + if path.endswith("/docker-compose.yml"): + path = path[:-len("/docker-compose.yml")] r = subprocess.run(cmd, cwd=path) log.info(f"processed {path}", extra={"path": path, "cmd": cmd, "returncode": r.returncode}) @@ -17,30 +21,32 @@ def load_json(config_file): data = json.load(src) return [os.path.join(base, service) for base in data for service in data[base]] - def load_raw(config_file): with open(config_file) as src: return [line.strip() for line in src] +def load_stdin(_): + for line in sys.stdin: + yield line.strip() -config_types = { - "json": load_json, - "raw": load_raw -} +def get_loader(config_file): + if config_file.endswith(".json"): + return load_json + if "-" == config_file: + return load_stdin + return load_raw - -def apply(config_file, action, type): - cmd = ["docker-compose"] + action.split() - for path in config_types[type](config_file): - change_service(path, cmd) +def apply(config_file, action): + load = get_loader(config_file) + for path in load(config_file): + change_service(path, action) if __name__ == "__main__": logging.basicConfig(format="%(message)s (status %(returncode)s)", level=logging.INFO) parser = argparse.ArgumentParser(description="Docker-compose Autostart") - parser.add_argument("config_file") - parser.add_argument("--type", "-t", default="raw", choices=config_types) - parser.add_argument("--action", "-a", default="up -d") + parser.add_argument("config_file", default="-", help="json file, plain text list or - for stdin") + parser.add_argument("--action", "-a", default="up -d", help="docker-compose action to apply, default: up -d") args = parser.parse_args() - apply(args.config_file, args.action, args.type) + apply(args.config_file, args.action)