From 902d8b7238ae8698707ad4a13f630c8801269ba8 Mon Sep 17 00:00:00 2001 From: Jarl Gullberg Date: Sat, 11 Jan 2025 20:32:27 +0100 Subject: [PATCH] Cache sys.stdout instead of assuming it is equal to sys.__stdout__ When running under Mitogen, ipa_server and ipa_replica breaks execution by overwriting sys.stdout with sys.stdout. With Mitogen, sys.stdout != sys.stdout at this point in the code, and changing it in this manner results in access to closed file descriptors for future invocations. Generally, it is recommended not to use sys.stdout and instead explicitly cache the current value of sys.stdout. --- roles/ipareplica/module_utils/ansible_ipa_replica.py | 4 +++- roles/ipaserver/module_utils/ansible_ipa_server.py | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/roles/ipareplica/module_utils/ansible_ipa_replica.py b/roles/ipareplica/module_utils/ansible_ipa_replica.py index c5efa8da..4bde61a5 100644 --- a/roles/ipareplica/module_utils/ansible_ipa_replica.py +++ b/roles/ipareplica/module_utils/ansible_ipa_replica.py @@ -208,11 +208,13 @@ def setup_logging(): @contextlib_contextmanager def redirect_stdout(stream): + old_stdout = sys.stdout + sys.stdout = stream try: yield stream finally: - sys.stdout = sys.__stdout__ + sys.stdout = old_stdout class AnsibleModuleLog(): diff --git a/roles/ipaserver/module_utils/ansible_ipa_server.py b/roles/ipaserver/module_utils/ansible_ipa_server.py index f3c95b95..80100c58 100644 --- a/roles/ipaserver/module_utils/ansible_ipa_server.py +++ b/roles/ipaserver/module_utils/ansible_ipa_server.py @@ -241,11 +241,13 @@ def setup_logging(): @contextlib_contextmanager def redirect_stdout(stream): + old_stdout = sys.stdout + sys.stdout = stream try: yield stream finally: - sys.stdout = sys.__stdout__ + sys.stdout = old_stdout class AnsibleModuleLog():