def load_configuration(f=None, interactive=sys.stdout.isatty()): error = None defaults = _Struct( docker=Docker(), index=DockerIndex(), containers=Containers(), uris=URIs(), state=State(), hooks=Hooks(), log=Log(console=(logging.DEBUG if interactive else None), syslog=(logging.INFO if not interactive else None)), ) parsed = None try: f = f if f else path() if f: parsed = parse(f) except Exception as e: error = e finally: confs = defaults.merge(parsed) if parsed else defaults deimos.logger.initialize(**dict(confs.log.items())) if error: pre = ("Error loading %s: " % f) if f else "" log.exception(pre + str(error)) sys.exit(16) if parsed: log.info("Loaded configuration from %s" % f) for _, conf in parsed.items(): log.debug("Found: %r", conf) return confs
def load_configuration(f=None, interactive=sys.stdout.isatty()): error = None defaults = _Struct(docker=Docker(), index=DockerIndex(), containers=Containers(), uris=URIs(), state=State(), log=Log( console=logging.DEBUG if interactive else None, syslog=logging.INFO if not interactive else None)) parsed = None try: f = f if f else path() if f: parsed = parse(f) except Exception as e: error = e finally: confs = defaults.merge(parsed) if parsed else defaults deimos.logger.initialize(**dict(confs.log.items())) if error: log.exception((("Error loading %s: " % f) if f else "") + str(error)) sys.exit(16) if parsed: log.info("Loaded configuration from %s" % f) for _, conf in parsed.items(): log.debug("Found: %r", conf) return confs
def cli(argv=None): deimos.sig.install(lambda _: None) if argv is None: argv = sys.argv sub = argv[1] if len(argv) > 1 else None if sub in ["-h", "--help", "help"]: print format_help() return 0 conf = deimos.config.load_configuration() if sub == "config": log.info("Final configuration:") for _, conf in conf.items(): print "%r" % conf return 0 if sub == "locks": deimos.flock.lock_browser(os.path.join(conf.state.root, "mesos")) return 0 if sub == "state": cleanup = deimos.cleanup.Cleanup(conf.state.root) t, rm = time.time(), False for arg in argv[2:]: if arg == "--rm": rm = True continue t = calendar.timegm(time.strptime(arg, "%Y-%m-%dT%H:%M:%SZ")) if rm: return cleanup.remove(t) else: for d in cleanup.dirs(t): sys.stdout.write(d + "\n") return 0 if sub not in deimos.containerizer.methods(): print >>sys.stderr, format_help() print >>sys.stderr, "** Please specify a subcommand **".center(79) log.error("Bad ARGV: %r" % argv[1:]) return 1 deimos.docker.options = conf.docker.argv() containerizer = deimos.containerizer.docker.Docker( container_settings=conf.containers, index_settings=conf.index, optimistic_unpack=conf.uris.unpack, state_root=conf.state.root ) deimos.usage.report() try: result = deimos.containerizer.stdio(containerizer, *argv[1:]) deimos.usage.report() if result is not None: if isinstance(result, bool): return 0 if result else 1 if isinstance(result, int): return result if isinstance(result, str): sys.stdout.write(result) else: for item in result: sys.stdout.write(str(item) + "\n") except Err as e: log.error("%s.%s: %s", type(e).__module__, type(e).__name__, str(e)) return 4 except subprocess.CalledProcessError as e: log.error(str(e)) return 4 except Exception: log.exception("Unhandled failure in %s", sub) return 8 return 0