diff options
author | Brian Coca <bcoca@users.noreply.github.com> | 2017-04-18 11:39:49 -0400 |
---|---|---|
committer | Brian Coca <brian.coca+git@gmail.com> | 2017-04-18 11:41:46 -0400 |
commit | 7b6557a23b6f82f2669c5902e9a17ddab30d6622 (patch) | |
tree | 0ce8b206a1c00e211372284907b151f06f8d94d4 | |
parent | 7cc351a2372f4a1e67de2dc6bae8d37866c4c595 (diff) | |
download | ansible-7b6557a23b6f82f2669c5902e9a17ddab30d6622.tar.gz |
tolerate 'batch' systems that mess with stdin (#23596)
* tolerate 'batch' systems taht mess with stdin
fixes #23541
* have pause on windows tolerate devnull
* tuplie
(cherry picked from commit 586fcae3981ce3d4c805051338ac6bd2df9a95c6)
-rw-r--r-- | lib/ansible/executor/process/worker.py | 34 | ||||
-rw-r--r-- | lib/ansible/plugins/action/pause.py | 5 |
2 files changed, 22 insertions, 17 deletions
diff --git a/lib/ansible/executor/process/worker.py b/lib/ansible/executor/process/worker.py index 0647c59b41..04f0c9c035 100644 --- a/lib/ansible/executor/process/worker.py +++ b/lib/ansible/executor/process/worker.py @@ -68,21 +68,25 @@ class WorkerProcess(multiprocessing.Process): self._variable_manager = variable_manager self._shared_loader_obj = shared_loader_obj - # dupe stdin, if we have one - self._new_stdin = sys.stdin - try: - fileno = sys.stdin.fileno() - if fileno is not None: - try: - self._new_stdin = os.fdopen(os.dup(fileno)) - except OSError: - # 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 (AttributeError, ValueError): - # couldn't get stdin's fileno, so we just carry on - pass + if sys.stdin.isatty(): + # dupe stdin, if we have one + self._new_stdin = sys.stdin + try: + fileno = sys.stdin.fileno() + if fileno is not None: + try: + self._new_stdin = os.fdopen(os.dup(fileno)) + except OSError: + # 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 (AttributeError, ValueError): + # couldn't get stdin's fileno, so we just carry on + pass + else: + # set to /dev/null + self._new_stdin = os.devnull def run(self): ''' diff --git a/lib/ansible/plugins/action/pause.py b/lib/ansible/plugins/action/pause.py index 2391951215..5a70e550b1 100644 --- a/lib/ansible/plugins/action/pause.py +++ b/lib/ansible/plugins/action/pause.py @@ -125,8 +125,9 @@ class ActionModule(ActionBase): fd = None try: fd = self._connection._new_stdin.fileno() - except ValueError: - # someone is using a closed file descriptor as stdin + except (ValueError, AttributeError): + # ValueError: someone is using a closed file descriptor as stdin + # AttributeError: someone is using a null file descriptor as stdin on windoez pass if fd is not None: if isatty(fd): |