diff --git a/Readme.md b/Readme.md index 9166071..fec3248 100644 --- a/Readme.md +++ b/Readme.md @@ -1,13 +1,28 @@ # Usage -## json config +## autodiscover + +usage: `python3 discover.py [-a ] [-l] service_dir [service_dir …]` + +add label "de.wie-ei.autostart=true" to any service in a docker-compose-file + +Examples: + +* start services (up -d) `python3 discover.py /srv/services/ /opt/docker/testing/` +* which services are configured for autostart? `python3 discover.py -l /srv/services/ /opt/docker/testing/` +* check status `python3 discover.py -a ps /opt/docker/testing/` +* stop services `python3 discover.py -a "down -v /srv/testing/` + +## manual config + +### json config * create config.json from sample.json * add `python3 /opt/docker-autostart/start.py /path/to/your/config.json -t json` to `/etc/rc.local` -## raw config +### raw config * create config.lst from sample.lst * add `python3 /opt/docker-autostart/start.py /path/to/your/config.lst` to `/etc/rc.local` -## other actions +### other actions * default action: up -d * add argument -a "" \ No newline at end of file diff --git a/discover.py b/discover.py new file mode 100644 index 0000000..92c8e4c --- /dev/null +++ b/discover.py @@ -0,0 +1,51 @@ +import argparse +import json +import os +import subprocess +import logging + +log = logging.getLogger(__name__) + +COMPOSE_FILE = "docker-compose.yml" +CONFIG_CMD = "docker-compose -f {path} config " +AUTOSTART_KEY = 'de.wie-ei.autostart: "true"' +AUTOSTART_KEY = 'de.wie-ei.autostart=true' + +def complete_compose(entry): + path = entry.path + if not path.endswith(COMPOSE_FILE): + return os.path.join(path, COMPOSE_FILE) + return path + +def has_compose(path): + return os.path.exists(path) + +def find_services(dirs): + entries = [entry for base in dirs for entry in os.scandir(base) if entry.is_dir()] + return filter(has_compose, map(complete_compose, entries)) + +def should_autostart(service): + #r = subprocess.run(CONFIG_CMD.format(path=service).split(), capture_output=True, encoding="utf8") + #return AUTOSTART_KEY in r.stdout + with open(service) as src: + return AUTOSTART_KEY in src.read() + +def find_autostart_services(services): + return list(filter(should_autostart, services)) + + +if __name__ == "__main__": + logging.basicConfig(format="%(message)s (status %(returncode)s)", level=logging.INFO) + parser = argparse.ArgumentParser(description="Docker-compose Autostart discovery") + parser.add_argument("service_dir", nargs="+") + parser.add_argument("--action", "-a", default="up -d") + parser.add_argument("--list", "-l", action="store_true", help="list autostart services only, no action") + args = parser.parse_args() + services = find_services(args.service_dir) + autostarts = find_autostart_services(services) + if args.list: + print("\n".join(autostarts)) + else: + import start + for service in autostarts: + start.change_service(service, args.action) \ No newline at end of file