コード例 #1
0
ファイル: common.py プロジェクト: isabella232/client-3
def really_run(task,
               root,
               sandbox,
               task_id=None,
               user=None,
               prebound_ports=None,
               chroot=None,
               daemon=False):

    prebound_ports = prebound_ports or {}
    missing_ports = set(task.ports()) - set(prebound_ports.keys())
    if missing_ports:
        app.error('ERROR!  Unbound ports: %s' %
                  ' '.join(port for port in missing_ports))
    task_runner = TaskRunner(task.task,
                             root,
                             sandbox,
                             task_id=task_id,
                             user=user,
                             portmap=prebound_ports,
                             chroot=chroot)
    if daemon:
        print('Daemonizing and starting runner.')
        try:
            log.teardown_stderr_logging()
            daemonize()
        except Exception as e:
            print("Failed to daemonize: %s" % e)
            sys.exit(1)
    try:
        task_runner.run()
    except KeyboardInterrupt:
        print('Got keyboard interrupt, killing job!')
        task_runner.close_ckpt()
        task_runner.kill()
コード例 #2
0
def proxy_main(args, opts):
    assert opts.thermos_json and os.path.exists(opts.thermos_json)
    assert opts.sandbox
    assert opts.checkpoint_root

    thermos_task = get_task_from_options(opts)
    prebound_ports = opts.prebound_ports
    missing_ports = set(thermos_task.ports()) - set(prebound_ports)

    if missing_ports:
        app.error('ERROR!  Unbound ports: %s' %
                  ' '.join(port for port in missing_ports))

    task_runner = TaskRunner(thermos_task.task,
                             opts.checkpoint_root,
                             opts.sandbox,
                             task_id=opts.task_id,
                             user=opts.setuid,
                             portmap=prebound_ports,
                             chroot=opts.chroot,
                             planner_class=CappedTaskPlanner)

    for sig in (signal.SIGUSR1, signal.SIGUSR2):
        signal.signal(sig, functools.partial(runner_teardown, task_runner))

    try:
        task_runner.run()
    except TaskRunner.InternalError as err:
        app.error('Internal error: %s' % err)
    except TaskRunner.InvalidTask as err:
        app.error(str(err))
    except TaskRunner.StateError:
        app.error('Task appears to already be in a terminal state.')
    except KeyboardInterrupt:
        runner_teardown(task_runner)
コード例 #3
0
def _really_run(task, root, sandbox, task_id=None, user=None, prebound_ports=None, chroot=None,
                daemon=False):
  prebound_ports = prebound_ports or {}
  missing_ports = set(task.ports()) - set(prebound_ports.keys())
  if missing_ports:
    app.error('ERROR!  Unbound ports: %s' % ' '.join(port for port in missing_ports))
  task_runner = TaskRunner(task.task, root, sandbox, task_id=task_id,
                           user=user, portmap=prebound_ports, chroot=chroot)
  if daemon:
    print('Daemonizing and starting runner.')
    try:
      log.teardown_stderr_logging()
      daemonize()
    except Exception as e:
      print("Failed to daemonize: %s" % e)
      sys.exit(1)
  try:
    task_runner.run()
  except KeyboardInterrupt:
    print('Got keyboard interrupt, killing job!')
    task_runner.close_ckpt()
    task_runner.kill()
コード例 #4
0
def proxy_main(args, opts):
  assert opts.thermos_json and os.path.exists(opts.thermos_json)
  assert opts.sandbox
  assert opts.checkpoint_root

  thermos_task = get_task_from_options(opts)
  prebound_ports = opts.prebound_ports
  missing_ports = set(thermos_task.ports()) - set(prebound_ports)

  if missing_ports:
    app.error('ERROR!  Unbound ports: %s' % ' '.join(port for port in missing_ports))

  task_runner = TaskRunner(
      thermos_task.task,
      opts.checkpoint_root,
      opts.sandbox,
      task_id=opts.task_id,
      user=opts.setuid,
      portmap=prebound_ports,
      chroot=opts.chroot,
      planner_class=CappedTaskPlanner
  )

  for sig in (signal.SIGUSR1, signal.SIGUSR2):
    signal.signal(sig, functools.partial(runner_teardown, task_runner))

  try:
    task_runner.run()
  except TaskRunner.InternalError as err:
    app.error('Internal error: %s' % err)
  except TaskRunner.InvalidTask as err:
    app.error(str(err))
  except TaskRunner.StateError:
    app.error('Task appears to already be in a terminal state.')
  except KeyboardInterrupt:
    runner_teardown(task_runner)
コード例 #5
0
def proxy_main(args, opts):
  assert opts.thermos_json and os.path.exists(opts.thermos_json)
  assert opts.sandbox
  assert opts.checkpoint_root

  thermos_task = get_task_from_options(opts)
  prebound_ports = opts.prebound_ports
  missing_ports = set(thermos_task.ports()) - set(prebound_ports)

  if missing_ports:
    log.error('ERROR!  Unbound ports: %s' % ' '.join(port for port in missing_ports))
    sys.exit(INTERNAL_ERROR)

  if opts.setuid:
    user = opts.setuid
  else:
    user = getpass.getuser()

  # if we cannot get the uid, this is an unknown user and we should fail
  try:
    pwd.getpwnam(user).pw_uid
  except KeyError:
    log.error('Unknown user: %s' % user)
    sys.exit(UNKNOWN_USER)

  task_runner = TaskRunner(
      thermos_task.task,
      opts.checkpoint_root,
      opts.sandbox,
      task_id=opts.task_id,
      user=opts.setuid,
      portmap=prebound_ports,
      chroot=opts.chroot,
      planner_class=CappedTaskPlanner
  )

  for sig in (signal.SIGUSR1, signal.SIGUSR2):
    signal.signal(sig, functools.partial(runner_teardown, task_runner))

  try:
    task_runner.run()
  except TaskRunner.InternalError as err:
    log.error('Internal error: %s' % err)
    sys.exit(INTERNAL_ERROR)
  except TaskRunner.InvalidTask as err:
    log.error('Invalid task: %s' % err)
    sys.exit(INVALID_TASK)
  except TaskRunner.StateError as err:
    log.error('Checkpoint error: %s' % err)
    sys.exit(TERMINAL_TASK)
  except Process.UnknownUserError as err:
    log.error('User ceased to exist: %s' % err)
    sys.exit(UNKNOWN_USER)
  except KeyboardInterrupt:
    log.info('Caught ^C, tearing down runner.')
    runner_teardown(task_runner)
  except Exception as e:
    log.error('Unknown exception: %s' % e)
    for line in traceback.format_exc().splitlines():
      log.error(line)
    sys.exit(UNKNOWN_ERROR)
コード例 #6
0
def proxy_main(args, opts):
    assert opts.thermos_json and os.path.exists(opts.thermos_json)
    assert opts.sandbox
    assert opts.checkpoint_root

    thermos_task = get_task_from_options(opts)
    prebound_ports = opts.prebound_ports
    missing_ports = set(thermos_task.ports()) - set(prebound_ports)

    if missing_ports:
        log.error('ERROR!  Unbound ports: %s' %
                  ' '.join(port for port in missing_ports))
        sys.exit(INTERNAL_ERROR)

    if opts.setuid:
        user = opts.setuid
    else:
        user = getpass.getuser()

    # if we cannot get the uid, this is an unknown user and we should fail
    try:
        pwd.getpwnam(user).pw_uid
    except KeyError:
        log.error('Unknown user: %s' % user)
        sys.exit(UNKNOWN_USER)

    task_runner = TaskRunner(
        thermos_task.task,
        opts.checkpoint_root,
        opts.sandbox,
        task_id=opts.task_id,
        user=opts.setuid,
        portmap=prebound_ports,
        chroot=opts.chroot,
        planner_class=CappedTaskPlanner,
        hostname=opts.hostname,
        process_logger_destination=opts.process_logger_destination,
        process_logger_mode=opts.process_logger_mode,
        rotate_log_size_mb=opts.rotate_log_size_mb,
        rotate_log_backups=opts.rotate_log_backups,
        preserve_env=opts.preserve_env,
        mesos_containerizer_path=opts.mesos_containerizer_path,
        container_sandbox=opts.container_sandbox)

    for sig in (signal.SIGUSR1, signal.SIGUSR2):
        signal.signal(sig, functools.partial(runner_teardown, task_runner))

    try:
        task_runner.run()
    except TaskRunner.InternalError as err:
        log.error('Internal error: %s' % err)
        sys.exit(INTERNAL_ERROR)
    except TaskRunner.InvalidTask as err:
        log.error('Invalid task: %s' % err)
        sys.exit(INVALID_TASK)
    except TaskRunner.StateError as err:
        log.error('Checkpoint error: %s' % err)
        sys.exit(TERMINAL_TASK)
    except Process.UnknownUserError as err:
        log.error('User ceased to exist: %s' % err)
        sys.exit(UNKNOWN_USER)
    except KeyboardInterrupt:
        log.info('Caught ^C, tearing down runner.')
        runner_teardown(task_runner)
    except Exception as e:
        log.error('Unknown exception: %s' % e)
        for line in traceback.format_exc().splitlines():
            log.error(line)
        sys.exit(UNKNOWN_ERROR)