From 8cccede0d435c799385828ce55521c910dc69b13 Mon Sep 17 00:00:00 2001 From: Abhijeet Kasurde <akasurde@redhat.com> Date: Wed, 22 Jul 2020 09:18:21 +0530 Subject: [PATCH] basic: use PollSelector implementation (#70352) Some platform such as ESXi does not implement EpollSelector, which is selected by DefaultSelector. Use SelectSelector which is based upon 'select' implementation. This works perfectly with a platform like VMware ESXi. Fixes: #70238 Signed-off-by: Abhijeet Kasurde <akasurde@redhat.com> --- changelogs/fragments/70238_selector.yml | 2 ++ lib/ansible/module_utils/basic.py | 8 +++++++- 2 files changed, 9 insertions(+), 1 deletion(-) create mode 100644 changelogs/fragments/70238_selector.yml diff --git a/changelogs/fragments/70238_selector.yml b/changelogs/fragments/70238_selector.yml new file mode 100644 index 00000000000..3a0193d0387 --- /dev/null +++ b/changelogs/fragments/70238_selector.yml @@ -0,0 +1,2 @@ +bugfixes: +- basic - use PollSelector implementation when DefaultSelector fails (https://github.com/ansible/ansible/issues/70238). diff --git a/lib/ansible/module_utils/basic.py b/lib/ansible/module_utils/basic.py index 232c4873890..608f39017de 100644 --- a/lib/ansible/module_utils/basic.py +++ b/lib/ansible/module_utils/basic.py @@ -2613,7 +2613,13 @@ class AnsibleModule(object): stdout = b'' stderr = b'' - selector = selectors.DefaultSelector() + try: + selector = selectors.DefaultSelector() + except OSError: + # Failed to detect default selector for the given platform + # Select PollSelector which is supported by major platforms + selector = selectors.PollSelector() + selector.register(cmd.stdout, selectors.EVENT_READ) selector.register(cmd.stderr, selectors.EVENT_READ) if os.name == 'posix':