Set ansible-test min controller Python to 3.8. (#74395)

- Version neutral sanity tests now require Python 3.8 or later.
- Unit tests for controller-only code now require Python 3.8 or later.
pull/74426/head
Matt Clay 5 years ago committed by GitHub
parent f541c0af23
commit 6cfe36fa1f
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -0,0 +1,3 @@
major_changes:
- ansible-test - Version neutral sanity tests now require Python 3.8 or later.
- ansible-test - Unit tests for controller-only code now require Python 3.8 or later.

@ -7,8 +7,8 @@ cd "${WORK_DIR}/ansible_collections/ns/col"
# rename the sanity ignore file to match the current ansible version and update import ignores with the python version # rename the sanity ignore file to match the current ansible version and update import ignores with the python version
ansible_version="$(python -c 'import ansible.release; print(".".join(ansible.release.__version__.split(".")[:2]))')" ansible_version="$(python -c 'import ansible.release; print(".".join(ansible.release.__version__.split(".")[:2]))')"
if [ "${ANSIBLE_TEST_PYTHON_VERSION}" == "2.6" ]; then if [[ "${ANSIBLE_TEST_PYTHON_VERSION}" =~ ^2\. ]] || [[ "${ANSIBLE_TEST_PYTHON_VERSION}" =~ ^3\.[567] ]]; then
# Non-module/module_utils plugins are not checked on this remote-only Python versions # Non-module/module_utils plugins are not checked on these remote-only Python versions
sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" | grep -v 'plugins/[^m].* import' > "tests/sanity/ignore-${ansible_version}.txt" sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" | grep -v 'plugins/[^m].* import' > "tests/sanity/ignore-${ansible_version}.txt"
else else
sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" > "tests/sanity/ignore-${ansible_version}.txt" sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" > "tests/sanity/ignore-${ansible_version}.txt"

@ -7,8 +7,8 @@ cd "${WORK_DIR}/ansible_collections/ns/col"
# rename the sanity ignore file to match the current ansible version and update import ignores with the python version # rename the sanity ignore file to match the current ansible version and update import ignores with the python version
ansible_version="$(python -c 'import ansible.release; print(".".join(ansible.release.__version__.split(".")[:2]))')" ansible_version="$(python -c 'import ansible.release; print(".".join(ansible.release.__version__.split(".")[:2]))')"
if [ "${ANSIBLE_TEST_PYTHON_VERSION}" == "2.6" ]; then if [[ "${ANSIBLE_TEST_PYTHON_VERSION}" =~ ^2\. ]] || [[ "${ANSIBLE_TEST_PYTHON_VERSION}" =~ ^3\.[567] ]]; then
# Non-module/module_utils plugins are not checked on this remote-only Python versions # Non-module/module_utils plugins are not checked on these remote-only Python versions
sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" | grep -v 'plugins/[^m].* import' > "tests/sanity/ignore-${ansible_version}.txt" sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" | grep -v 'plugins/[^m].* import' > "tests/sanity/ignore-${ansible_version}.txt"
else else
sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" > "tests/sanity/ignore-${ansible_version}.txt" sed "s/ import$/ import-${ANSIBLE_TEST_PYTHON_VERSION}/;" < "tests/sanity/ignore.txt" > "tests/sanity/ignore-${ansible_version}.txt"

@ -31,6 +31,8 @@ from ..util import (
paths_to_dirs, paths_to_dirs,
get_ansible_version, get_ansible_version,
str_to_version, str_to_version,
SUPPORTED_PYTHON_VERSIONS,
CONTROLLER_PYTHON_VERSIONS,
) )
from ..util_common import ( from ..util_common import (
@ -54,7 +56,6 @@ from ..executor import (
AllTargetsSkipped, AllTargetsSkipped,
Delegate, Delegate,
install_command_requirements, install_command_requirements,
SUPPORTED_PYTHON_VERSIONS,
) )
from ..config import ( from ..config import (
@ -659,7 +660,7 @@ class SanityTest(ABC):
@property @property
def supported_python_versions(self): # type: () -> t.Optional[t.Tuple[str, ...]] def supported_python_versions(self): # type: () -> t.Optional[t.Tuple[str, ...]]
"""A tuple of supported Python versions or None if the test does not depend on specific Python versions.""" """A tuple of supported Python versions or None if the test does not depend on specific Python versions."""
return tuple(python_version for python_version in SUPPORTED_PYTHON_VERSIONS if str_to_version(python_version) >= (3, 6)) return CONTROLLER_PYTHON_VERSIONS
def filter_targets(self, targets): # type: (t.List[TestTarget]) -> t.List[TestTarget] # pylint: disable=unused-argument def filter_targets(self, targets): # type: (t.List[TestTarget]) -> t.List[TestTarget] # pylint: disable=unused-argument
"""Return the given list of test targets, filtered to include only those relevant for the test.""" """Return the given list of test targets, filtered to include only those relevant for the test."""

@ -87,6 +87,10 @@ class ImportTest(SanityMultipleVersion):
:type python_version: str :type python_version: str
:rtype: TestResult :rtype: TestResult
""" """
settings = self.load_processor(args, python_version)
paths = [target.path for target in targets.include]
capture_pip = args.verbosity < 2 capture_pip = args.verbosity < 2
python = find_python(python_version) python = find_python(python_version)
@ -97,10 +101,6 @@ class ImportTest(SanityMultipleVersion):
pip = generate_pip_command(python) pip = generate_pip_command(python)
run_command(args, generate_pip_install(pip, '', packages=['virtualenv']), capture=capture_pip) run_command(args, generate_pip_install(pip, '', packages=['virtualenv']), capture=capture_pip)
settings = self.load_processor(args, python_version)
paths = [target.path for target in targets.include]
env = ansible_environment(args, color=False) env = ansible_environment(args, color=False)
temp_root = os.path.join(ResultType.TMP.path, 'sanity', 'import') temp_root = os.path.join(ResultType.TMP.path, 'sanity', 'import')

@ -17,9 +17,10 @@ from ..util import (
is_subdir, is_subdir,
SubprocessError, SubprocessError,
SUPPORTED_PYTHON_VERSIONS, SUPPORTED_PYTHON_VERSIONS,
CONTROLLER_MIN_PYTHON_VERSION,
CONTROLLER_PYTHON_VERSIONS,
REMOTE_ONLY_PYTHON_VERSIONS,
ANSIBLE_LIB_ROOT, ANSIBLE_LIB_ROOT,
str_to_version,
version_to_str,
) )
from ..util_common import ( from ..util_common import (
@ -91,15 +92,13 @@ def command_units(args):
TestContext.controller: controller_paths, TestContext.controller: controller_paths,
} }
# temporary definition of "remote" python versions until the full split controller/remote implementation is in place
controller_min_python_version = (3, 8)
remote_only_python_versions = tuple(version for version in SUPPORTED_PYTHON_VERSIONS if str_to_version(version) < controller_min_python_version)
if not paths: if not paths:
raise AllTargetsSkipped() raise AllTargetsSkipped()
if args.python and args.python in remote_only_python_versions and not remote_paths: if args.python and args.python in REMOTE_ONLY_PYTHON_VERSIONS:
raise AllTargetsSkipped() if not remote_paths:
display.warning('Python %s is only supported by module and module_utils unit tests, but none were selected.' % args.python)
raise AllTargetsSkipped()
if args.delegate: if args.delegate:
raise Delegate(require=changes, exclude=args.exclude) raise Delegate(require=changes, exclude=args.exclude)
@ -116,8 +115,9 @@ def command_units(args):
test_candidates = [] test_candidates = []
for test_context, paths in test_context_paths.items(): for test_context, paths in test_context_paths.items():
if test_context == TestContext.controller and version in remote_only_python_versions: if test_context == TestContext.controller:
continue if version not in CONTROLLER_PYTHON_VERSIONS:
continue
if not paths: if not paths:
continue continue
@ -126,7 +126,7 @@ def command_units(args):
env.update( env.update(
PYTHONPATH=get_units_ansible_python_path(args, test_context), PYTHONPATH=get_units_ansible_python_path(args, test_context),
ANSIBLE_CONTROLLER_MIN_PYTHON_VERSION=version_to_str(controller_min_python_version), ANSIBLE_CONTROLLER_MIN_PYTHON_VERSION=CONTROLLER_MIN_PYTHON_VERSION,
) )
test_candidates.append((test_context, version, paths, env)) test_candidates.append((test_context, version, paths, env))

@ -113,9 +113,7 @@ MODE_FILE_WRITE = MODE_FILE | stat.S_IWUSR | stat.S_IWGRP | stat.S_IWOTH
MODE_DIRECTORY = MODE_READ | stat.S_IWUSR | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH MODE_DIRECTORY = MODE_READ | stat.S_IWUSR | stat.S_IXUSR | stat.S_IXGRP | stat.S_IXOTH
MODE_DIRECTORY_WRITE = MODE_DIRECTORY | stat.S_IWGRP | stat.S_IWOTH MODE_DIRECTORY_WRITE = MODE_DIRECTORY | stat.S_IWGRP | stat.S_IWOTH
REMOTE_ONLY_PYTHON_VERSIONS = ( CONTROLLER_MIN_PYTHON_VERSION = '3.8'
'2.6',
)
SUPPORTED_PYTHON_VERSIONS = ( SUPPORTED_PYTHON_VERSIONS = (
'2.6', '2.6',
@ -904,3 +902,6 @@ def get_host_ip():
display = Display() # pylint: disable=locally-disabled, invalid-name display = Display() # pylint: disable=locally-disabled, invalid-name
CONTROLLER_PYTHON_VERSIONS = tuple(version for version in SUPPORTED_PYTHON_VERSIONS if str_to_version(version) >= str_to_version(CONTROLLER_MIN_PYTHON_VERSION))
REMOTE_ONLY_PYTHON_VERSIONS = tuple(version for version in SUPPORTED_PYTHON_VERSIONS if str_to_version(version) < str_to_version(CONTROLLER_MIN_PYTHON_VERSION))

Loading…
Cancel
Save