コード例 #1
0
def main(_):
    """Main"""
    zkconn = kazoo_client.TwitterKazooClient(FLAGS.zk)
    zkconn.start()

    soa_data = SOAData(ttl=FLAGS.soa_ttl,
                       ns1=FLAGS.soa_nameserver or socket.getfqdn(),
                       email=FLAGS.soa_email or 'root.%s' % FLAGS.domain,
                       refresh=FLAGS.soa_refresh,
                       retry=FLAGS.soa_retry,
                       expire=FLAGS.soa_expire,
                       nxdomain_ttl=FLAGS.soa_nxdomain_ttl)

    server = ZknsServer(zk_handle=zkconn,
                        domain=FLAGS.domain,
                        ttl=FLAGS.ttl,
                        soa_data=soa_data)

    thread = ExceptionalThread(
        target=lambda: server.run(FLAGS.listen,
                                  FLAGS.port,
                                  server='cherrypy'))
    thread.daemon = True
    thread.start()

    try:
        wait_forever()
    except KeyboardInterrupt:
        log.fatal('KeyboardInterrupt! Shutting down.')
コード例 #2
0
ファイル: thermos_observer.py プロジェクト: dabaitu/aurora
def main(_, options):
  observer = initialize(options)
  observer.start()
  root_server = configure_server(observer)

  thread = ExceptionalThread(target=lambda: root_server.run('0.0.0.0', options.port, 'cherrypy'))
  thread.daemon = True
  thread.start()

  sleep_forever()
コード例 #3
0
ファイル: thermos_observer.py プロジェクト: songaal/aurora
    def main(_, opts):
        path_detector = FixedPathDetector(opts.root)
        task_observer = TaskObserver(path_detector)
        task_observer.start()
        server = configure_server(task_observer)

        thread = ExceptionalThread(
            target=lambda: server.run('0.0.0.0', opts.port, 'cherrypy'))
        thread.daemon = True
        thread.start()

        sleep_forever()
コード例 #4
0
ファイル: __main__.py プロジェクト: thinker0/aurora-jobhopper
    def main(args, opts):
        """Main"""
        server = RedirServer(opts.zk_basepath,
                             opts.subdomain,
                             opts.base_domain)
        thread = ExceptionalThread(
            target=lambda: server.run(opts.listen,
                                      opts.port,
                                      server='cherrypy'))
        thread.daemon = True
        thread.start()

        wait_forever()
コード例 #5
0
def test_quitquitquit():
    def main():
        app.wait_forever()

    def wait_and_quit():
        time.sleep(0.5)
        app.quitquitquit()

    stop_thread = ExceptionalThread(target=wait_and_quit)
    stop_thread.start()

    app = TestApplication(main)
    app.main()

    assert app.exited_rc == 0
コード例 #6
0
ファイル: thermos_observer.py プロジェクト: songaal/aurora
def main(_, options):
    path_detector = ChainedPathDetector(
        FixedPathDetector(options.root),
        MesosPathDetector(options.mesos_root),
    )
    observer = TaskObserver(path_detector)
    observer.start()
    root_server = configure_server(observer)

    thread = ExceptionalThread(
        target=lambda: root_server.run('0.0.0.0', options.port, 'cherrypy'))
    thread.daemon = True
    thread.start()

    sleep_forever()
コード例 #7
0
    def main(args, opts):
        if args:
            print("ERROR: unrecognized arguments: %s\n" % (" ".join(args)),
                  file=sys.stderr)
            app.help()
            sys.exit(1)

        root_server = HttpServer()
        root_server.mount_routes(DiagnosticsEndpoints())

        task_observer = TaskObserver(opts.root)
        task_observer.start()

        bottle_wrapper = BottleObserver(task_observer)

        root_server.mount_routes(bottle_wrapper)

        def run():
            root_server.run('0.0.0.0', opts.port, 'cherrypy')

        et = ExceptionalThread(target=run)
        et.daemon = True
        et.start()
        et.join()
コード例 #8
0
    def main(args, options):
        log.info("Options in use: %s", options)

        if not options.api_port:
            app.error('Must specify --port')

        if not options.mesos_master:
            app.error('Must specify --mesos_master')

        if not options.framework_user:
            app.error('Must specify --framework_user')

        if not options.executor_uri:
            app.error('Must specify --executor_uri')

        if not options.executor_cmd:
            app.error('Must specify --executor_cmd')

        if not options.zk_url:
            app.error('Must specify --zk_url')

        if not options.admin_keypath:
            app.error('Must specify --admin_keypath')

        try:
            election_timeout = parse_time(options.election_timeout)
            framework_failover_timeout = parse_time(
                options.framework_failover_timeout)
        except InvalidTime as e:
            app.error(e.message)

        try:
            _, zk_servers, zk_root = zookeeper.parse(options.zk_url)
        except Exception as e:
            app.error("Invalid --zk_url: %s" % e.message)

        web_assets_dir = os.path.join(options.work_dir, "web")
        pkgutil.unpack_assets(web_assets_dir, MYSOS_MODULE, ASSET_RELPATH)
        log.info("Extracted web assets into %s" % options.work_dir)

        fw_principal = None
        fw_secret = None
        if options.framework_authentication_file:
            try:
                with open(options.framework_authentication_file, "r") as f:
                    cred = yaml.load(f)
                fw_principal = cred["principal"]
                fw_secret = cred["secret"]
                log.info(
                    "Loaded credential (principal=%s) for framework authentication"
                    % fw_principal)
            except IOError as e:
                app.error(
                    "Unable to read the framework authentication key file: %s"
                    % e)
            except (KeyError, yaml.YAMLError) as e:
                app.error(
                    "Invalid framework authentication key file format %s" % e)

        log.info("Starting Mysos scheduler")

        kazoo = KazooClient(zk_servers)
        kazoo.start()

        if options.state_storage == 'zk':
            log.info("Using ZooKeeper (path: %s) for state storage" % zk_root)
            state_provider = ZooKeeperStateProvider(kazoo, zk_root)
        else:
            log.info("Using local disk for state storage")
            state_provider = LocalStateProvider(options.work_dir)

        try:
            state = state_provider.load_scheduler_state()
        except StateProvider.Error as e:
            app.error(e.message)

        if state:
            log.info("Successfully restored scheduler state")
            framework_info = state.framework_info
            if framework_info.HasField('id'):
                log.info("Recovered scheduler's FrameworkID is %s" %
                         framework_info.id.value)
        else:
            log.info("No scheduler state to restore")
            framework_info = FrameworkInfo(
                user=options.framework_user,
                name=FRAMEWORK_NAME,
                checkpoint=True,
                failover_timeout=framework_failover_timeout.as_(Time.SECONDS),
                role=options.framework_role)
            if fw_principal:
                framework_info.principal = fw_principal
            state = Scheduler(framework_info)
            state_provider.dump_scheduler_state(state)

        scheduler = MysosScheduler(state,
                                   state_provider,
                                   options.framework_user,
                                   options.executor_uri,
                                   options.executor_cmd,
                                   kazoo,
                                   options.zk_url,
                                   election_timeout,
                                   options.admin_keypath,
                                   installer_args=options.installer_args,
                                   backup_store_args=options.backup_store_args,
                                   executor_environ=options.executor_environ,
                                   framework_role=options.framework_role)

        if fw_principal and fw_secret:
            cred = Credential(principal=fw_principal, secret=fw_secret)
            scheduler_driver = mesos.native.MesosSchedulerDriver(
                scheduler, framework_info, options.mesos_master, cred)
        else:
            scheduler_driver = mesos.native.MesosSchedulerDriver(
                scheduler, framework_info, options.mesos_master)

        scheduler_driver.start()

        server = HttpServer()
        server.mount_routes(MysosServer(scheduler, web_assets_dir))

        et = ExceptionalThread(target=server.run,
                               args=('0.0.0.0', options.api_port, 'cherrypy'))
        et.daemon = True
        et.start()

        try:
            # Wait for the scheduler to stop.
            # The use of 'stopped' event instead of scheduler_driver.join() is necessary to stop the
            # process with SIGINT.
            while not scheduler.stopped.wait(timeout=0.5):
                pass
        except KeyboardInterrupt:
            log.info('Interrupted, exiting.')
        else:
            log.info('Scheduler exited.')

        app.shutdown(
            1
        )  # Mysos scheduler is supposed to be long-running thus the use of exit status 1.