issue #106: helpers.get_file(), command logging.

* Add helpers.get_file() that calls back up into FileService as
  necessary. This is a stopgap measure.

* Add logging to exec_args() to simplify debugging of binary runners.
pull/193/head
David Wilson 6 years ago
parent dbaca05ac8
commit 8fffb34752

@ -28,6 +28,7 @@
from __future__ import absolute_import
import json
import logging
import operator
import os
import pwd
@ -37,9 +38,18 @@ import stat
import subprocess
import tempfile
import threading
import zlib
import mitogen.core
import mitogen.service
import ansible_mitogen.runner
import ansible_mitogen.services
LOG = logging.getLogger(__name__)
#: Caching of fetched file data.
_file_cache = {}
#: Mapping of job_id<->result dict
_result_by_job_id = {}
@ -48,6 +58,32 @@ _result_by_job_id = {}
_thread_by_job_id = {}
def get_file(context, path):
"""
Basic in-memory caching module fetcher. This generates an one roundtrip for
every previously unseen module, so it is only temporary.
:param context:
Context we should direct FileService requests to. For now (and probably
forever) this is just the top-level Mitogen connection manager process.
:param path:
Path to fetch from FileService, must previously have been registered by
a privileged context using the `register` command.
:returns:
Bytestring file data.
"""
if path not in _file_cache:
_file_cache[path] = zlib.decompress(
mitogen.service.call(
context,
ansible_mitogen.services.FileService.handle,
('fetch', path)
)
)
return _file_cache[path]
def run_module(kwargs):
"""
Set up the process environment in preparation for running an Ansible
@ -145,14 +181,15 @@ def exec_args(args, in_data='', chdir=None, shell=None):
Run a command in a subprocess, emulating the argument handling behaviour of
SSH.
:param bytes cmd:
String command line, passed to user's shell.
:param list[str]:
Argument vector.
:param bytes in_data:
Optional standard input for the command.
:return:
(return code, stdout bytes, stderr bytes)
"""
assert isinstance(cmd, basestring)
LOG.debug('exec_args(%r, ..., chdir=%r)', args, chdir)
assert isinstance(args, list)
proc = subprocess.Popen(
args=args,

Loading…
Cancel
Save