Esempio n. 1
0
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
Esempio n. 2
0
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
Esempio n. 3
0
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