summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBrian Coca <bcoca@users.noreply.github.com>2017-04-18 11:39:49 -0400
committerBrian Coca <brian.coca+git@gmail.com>2017-04-18 11:41:46 -0400
commit7b6557a23b6f82f2669c5902e9a17ddab30d6622 (patch)
tree0ce8b206a1c00e211372284907b151f06f8d94d4
parent7cc351a2372f4a1e67de2dc6bae8d37866c4c595 (diff)
downloadansible-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.py34
-rw-r--r--lib/ansible/plugins/action/pause.py5
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):