Example #1
0
def process_task(body):
    new_stdin = sys.stdin
    try:
        fileno = sys.stdin.fileno()
        if fileno is not None:
            try:
                new_stdin = os.fdopen(os.dup(fileno))
            except OSError, e:
                # couldn't dupe stdin, most likely because it's
                # not a valid file descriptor, so we just rely on
                # using the one that was passed in
                pass
    except ValueError:
        # couldn't get stdin's fileno, so we just carry on
        pass
    shared_loader_obj = SharedPluginLoaderObj()
    loader = DataLoader(vault_password=None)
    task_json = json.loads(body)
    loader.set_basedir(task_json['base_dir'])
    host = jsonpickle.decode(task_json['host'])
    task = jsonpickle.decode(task_json['task'])
    job_vars = jsonpickle.decode(task_json['task_vars'])
    connection_info  = jsonpickle.decode(task_json['conn_info'])
    task.set_loader(loader)
    new_connection_info = connection_info.set_task_and_host_override(task=task, host=host)
    executor_result = TaskExecutor(host, task, job_vars, new_connection_info, new_stdin, loader, shared_loader_obj).run()
    task_result = TaskResult(host, task, executor_result)
    task_pickled = jsonpickle.encode(task_result)
    return(json.dumps(task_pickled))