Fix async interpreter parsing (#72636)

* Fix async interpreter parsing. Fixes #70690

* Target localhost instead of remote host

* Don't forget inventory

* Address shellcheck issue
This commit is contained in:
Matt Martz 2020-12-09 11:41:45 -06:00 committed by GitHub
parent 1b70260d5a
commit 83764ad506
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 29 additions and 8 deletions

View file

@ -0,0 +1,3 @@
bugfixes:
- async - Fix Python 3 interpreter parsing from module by comparing with bytes
(https://github.com/ansible/ansible/issues/70690)

View file

@ -21,7 +21,7 @@ import time
import syslog import syslog
import multiprocessing import multiprocessing
from ansible.module_utils._text import to_text from ansible.module_utils._text import to_text, to_bytes
PY3 = sys.version_info[0] == 3 PY3 = sys.version_info[0] == 3
@ -114,14 +114,11 @@ def _filter_non_json_lines(data):
def _get_interpreter(module_path): def _get_interpreter(module_path):
module_fd = open(module_path, 'rb') with open(module_path, 'rb') as module_fd:
try:
head = module_fd.read(1024) head = module_fd.read(1024)
if head[0:2] != '#!': if head[0:2] != b'#!':
return None return None
return head[2:head.index('\n')].strip().split(' ') return head[2:head.index(b'\n')].strip().split(b' ')
finally:
module_fd.close()
def _make_temp_dir(path): def _make_temp_dir(path):
@ -152,7 +149,7 @@ def _run_module(wrapped_cmd, jid, job_path):
filtered_outdata = '' filtered_outdata = ''
stderr = '' stderr = ''
try: try:
cmd = shlex.split(wrapped_cmd) cmd = [to_bytes(c, errors='surrogate_or_strict') for c in shlex.split(wrapped_cmd)]
# call the module interpreter directly (for non-binary modules) # call the module interpreter directly (for non-binary modules)
# this permits use of a script for an interpreter on non-Linux platforms # this permits use of a script for an interpreter on non-Linux platforms
interpreter = _get_interpreter(cmd[0]) interpreter = _get_interpreter(cmd[0])

View file

@ -0,0 +1,3 @@
shippable/posix/group2
skip/docker
skip/macos

View file

@ -0,0 +1 @@
not_empty # avoid empty empty hosts list warning without defining explicit localhost

View file

@ -0,0 +1,9 @@
#!/usr/bin/env bash
set -eux
trap 'umount "${OUTPUT_DIR}/ramdisk"' EXIT
mkdir "${OUTPUT_DIR}/ramdisk"
mount -t tmpfs -o size=32m,noexec,rw tmpfs "${OUTPUT_DIR}/ramdisk"
ANSIBLE_REMOTE_TMP="${OUTPUT_DIR}/ramdisk" ansible-playbook -i inventory "$@" test-noexec.yml

View file

@ -0,0 +1,8 @@
- hosts: localhost
gather_facts: false
tasks:
- ping:
- command: sleep 1
async: 2
poll: 1