diff options
author | Matt Clay <matt@mystile.com> | 2023-02-23 12:45:43 -0800 |
---|---|---|
committer | Matt Clay <matt@mystile.com> | 2023-03-14 17:50:02 -0700 |
commit | a5d7c73cc96b3203136aa0f4dd9b566eb4dd7c81 (patch) | |
tree | 2d786ee4d6358064f1268f751abd55e81d06dec8 /test/lib | |
parent | ef5842798d3bdf97d071202a7ec87a41b4dce223 (diff) | |
download | ansible-a5d7c73cc96b3203136aa0f4dd9b566eb4dd7c81.tar.gz |
[stable-2.13] ansible-test - Fix vendoring support (#80074)
- Support loading of vendored Python packages.
- Exclude vendored Python packages from payloads.
(cherry picked from commit 6bfe6b899a4881ebc065834a43a26e123d7fdab3)
Co-authored-by: Matt Clay <matt@mystile.com>
Diffstat (limited to 'test/lib')
-rw-r--r-- | test/lib/ansible_test/_internal/payload.py | 8 | ||||
-rw-r--r-- | test/lib/ansible_test/_internal/util.py | 17 |
2 files changed, 25 insertions, 0 deletions
diff --git a/test/lib/ansible_test/_internal/payload.py b/test/lib/ansible_test/_internal/payload.py index 9bb234faec..91937a1883 100644 --- a/test/lib/ansible_test/_internal/payload.py +++ b/test/lib/ansible_test/_internal/payload.py @@ -48,6 +48,14 @@ def create_payload(args, dst_path): # type: (CommonConfig, str) -> None permissions: dict[str, int] = {} filters: dict[str, t.Callable[[tarfile.TarInfo], t.Optional[tarfile.TarInfo]]] = {} + # Exclude vendored files from the payload. + # They may not be compatible with the delegated environment. + files = [ + (abs_path, rel_path) for abs_path, rel_path in files + if not rel_path.startswith('lib/ansible/_vendor/') + or rel_path == 'lib/ansible/_vendor/__init__.py' + ] + def apply_permissions(tar_info: tarfile.TarInfo, mode: int) -> t.Optional[tarfile.TarInfo]: """ Apply the specified permissions to the given file. diff --git a/test/lib/ansible_test/_internal/util.py b/test/lib/ansible_test/_internal/util.py index fb125200b0..6a427551f9 100644 --- a/test/lib/ansible_test/_internal/util.py +++ b/test/lib/ansible_test/_internal/util.py @@ -23,10 +23,14 @@ import time import functools import shlex import typing as t +import warnings from struct import unpack, pack from termios import TIOCGWINSZ +# CAUTION: Avoid third-party imports in this module whenever possible. +# Any third-party imports occurring here will result in an error if they are vendored by ansible-core. + try: from typing_extensions import TypeGuard # TypeGuard was added in Python 3.9 except ImportError: @@ -333,6 +337,17 @@ def get_ansible_version(): # type: () -> str return ansible_version +def _enable_vendoring() -> None: + """Enable support for loading Python packages vendored by ansible-core.""" + # Load the vendoring code by file path, since ansible may not be in our sys.path. + # Convert warnings into errors, to avoid problems from surfacing later. + + with warnings.catch_warnings(): + warnings.filterwarnings('error') + + load_module(os.path.join(ANSIBLE_LIB_ROOT, '_vendor', '__init__.py'), 'ansible_vendor') + + @cache def get_available_python_versions(): # type: () -> t.Dict[str, str] """Return a dictionary indicating which supported Python versions are available.""" @@ -1133,3 +1148,5 @@ def type_guard(sequence: t.Sequence[t.Any], guard_type: t.Type[C]) -> TypeGuard[ display = Display() # pylint: disable=locally-disabled, invalid-name + +_enable_vendoring() |