From cde15f3c8158467a96023a9cffcba4bc0a207b0f Mon Sep 17 00:00:00 2001 From: Martin Krizek Date: Thu, 15 Jun 2023 03:16:28 +0200 Subject: [PATCH] Add test support for Python 3.11 on RHEL 8.8/9.2 (#80990) Fixes #80412 Fixes #80413 --- .azure-pipelines/azure-pipelines.yml | 22 +++++---- .../ansible-test-rhel-9.2-python-3.11.yml | 5 ++ .../targets/setup_rpm_repo/tasks/main.yml | 12 +++-- .../ansible_test/_data/completion/remote.txt | 3 +- .../_util/target/setup/bootstrap.sh | 48 +++++++++++++++++-- 5 files changed, 71 insertions(+), 19 deletions(-) create mode 100644 changelogs/fragments/ansible-test-rhel-9.2-python-3.11.yml diff --git a/.azure-pipelines/azure-pipelines.yml b/.azure-pipelines/azure-pipelines.yml index e7ad248f571..9c3281b55e9 100644 --- a/.azure-pipelines/azure-pipelines.yml +++ b/.azure-pipelines/azure-pipelines.yml @@ -83,12 +83,14 @@ stages: test: macos/13.2 - name: RHEL 7.9 test: rhel/7.9 - - name: RHEL 8.7 py36 - test: rhel/8.7@3.6 - - name: RHEL 8.7 py39 - test: rhel/8.7@3.9 - - name: RHEL 9.2 - test: rhel/9.2 + - name: RHEL 8.8 py36 + test: rhel/8.8@3.6 + - name: RHEL 8.8 py311 + test: rhel/8.8@3.11 + - name: RHEL 9.2 py39 + test: rhel/9.2@3.9 + - name: RHEL 9.2 py311 + test: rhel/9.2@3.11 - name: FreeBSD 12.4 test: freebsd/12.4 - name: FreeBSD 13.1 @@ -103,8 +105,8 @@ stages: targets: - name: macOS 13.2 test: macos/13.2 - - name: RHEL 8.7 - test: rhel/8.7 + - name: RHEL 8.8 + test: rhel/8.8 - name: RHEL 9.2 test: rhel/9.2 - name: FreeBSD 13.1 @@ -122,8 +124,8 @@ stages: test: alpine/3.17 - name: Fedora 37 test: fedora/37 - - name: RHEL 8.7 - test: rhel/8.7 + - name: RHEL 8.8 + test: rhel/8.8 - name: RHEL 9.2 test: rhel/9.2 - name: Ubuntu 20.04 diff --git a/changelogs/fragments/ansible-test-rhel-9.2-python-3.11.yml b/changelogs/fragments/ansible-test-rhel-9.2-python-3.11.yml new file mode 100644 index 00000000000..717b56d9978 --- /dev/null +++ b/changelogs/fragments/ansible-test-rhel-9.2-python-3.11.yml @@ -0,0 +1,5 @@ +minor_changes: + - ansible-test - Add support for RHEL 8.8 remotes. + - ansible-test - RHEL 8.8 provisioning can now be used with the ``--python 3.11`` option. + - ansible-test - RHEL 9.2 provisioning can now be used with the ``--python 3.11`` option. + - ansible-test - Remove Python 3.8 and 3.9 from RHEL 8.8. diff --git a/test/integration/targets/setup_rpm_repo/tasks/main.yml b/test/integration/targets/setup_rpm_repo/tasks/main.yml index be20078f1bd..55580bc035e 100644 --- a/test/integration/targets/setup_rpm_repo/tasks/main.yml +++ b/test/integration/targets/setup_rpm_repo/tasks/main.yml @@ -24,9 +24,15 @@ args: name: "{{ rpm_repo_packages }}" - - name: Install rpmfluff via pip - pip: - name: rpmfluff + - name: Install rpmfluff via pip, ensure it is installed with default python as python3-rpm may not exist for other versions + block: + - action: "{{ ansible_facts.pkg_mgr }}" + args: + name: "python3-pip" + + - pip: + name: rpmfluff + executable: pip3 when: ansible_facts.os_family == 'RedHat' and ansible_distribution_major_version is version('9', '==') - set_fact: diff --git a/test/lib/ansible_test/_data/completion/remote.txt b/test/lib/ansible_test/_data/completion/remote.txt index a0063446fab..b317d8595c1 100644 --- a/test/lib/ansible_test/_data/completion/remote.txt +++ b/test/lib/ansible_test/_data/completion/remote.txt @@ -10,8 +10,9 @@ macos/13.2 python=3.11 python_dir=/usr/local/bin become=sudo provider=parallels macos python_dir=/usr/local/bin become=sudo provider=parallels arch=x86_64 rhel/7.9 python=2.7 become=sudo provider=aws arch=x86_64 rhel/8.7 python=3.6,3.8,3.9 become=sudo provider=aws arch=x86_64 +rhel/8.8 python=3.6,3.11 become=sudo provider=aws arch=x86_64 rhel/9.1 python=3.9 become=sudo provider=aws arch=x86_64 -rhel/9.2 python=3.9 become=sudo provider=aws arch=x86_64 +rhel/9.2 python=3.9,3.11 become=sudo provider=aws arch=x86_64 rhel become=sudo provider=aws arch=x86_64 ubuntu/20.04 python=3.8,3.9 become=sudo provider=aws arch=x86_64 ubuntu/22.04 python=3.10 become=sudo provider=aws arch=x86_64 diff --git a/test/lib/ansible_test/_util/target/setup/bootstrap.sh b/test/lib/ansible_test/_util/target/setup/bootstrap.sh index ea17dad3875..cbbe59466ca 100644 --- a/test/lib/ansible_test/_util/target/setup/bootstrap.sh +++ b/test/lib/ansible_test/_util/target/setup/bootstrap.sh @@ -261,7 +261,7 @@ bootstrap_remote_rhel_8() if [ "${python_version}" = "3.6" ]; then py_pkg_prefix="python3" else - py_pkg_prefix="python${python_package_version}" + py_pkg_prefix="python${python_version}" fi packages=" @@ -269,6 +269,14 @@ bootstrap_remote_rhel_8() ${py_pkg_prefix}-devel " + # pip isn't included in the Python devel package under Python 3.11 + if [ "${python_version}" != "3.6" ]; then + packages=" + ${packages} + ${py_pkg_prefix}-pip + " + fi + # Jinja2 is not installed with an OS package since the provided version is too old. # Instead, ansible-test will install it using pip. if [ "${controller}" ]; then @@ -278,9 +286,19 @@ bootstrap_remote_rhel_8() " fi + # Python 3.11 isn't a module like the earlier versions + if [ "${python_version}" = "3.6" ]; then + while true; do + # shellcheck disable=SC2086 + yum module install -q -y "python${python_package_version}" \ + && break + echo "Failed to install packages. Sleeping before trying again..." + sleep 10 + done + fi + while true; do # shellcheck disable=SC2086 - yum module install -q -y "python${python_package_version}" && \ yum install -q -y ${packages} \ && break echo "Failed to install packages. Sleeping before trying again..." @@ -292,23 +310,43 @@ bootstrap_remote_rhel_8() bootstrap_remote_rhel_9() { - py_pkg_prefix="python3" + if [ "${python_version}" = "3.9" ]; then + py_pkg_prefix="python3" + else + py_pkg_prefix="python${python_version}" + fi packages=" gcc ${py_pkg_prefix}-devel " + # pip is not included in the Python devel package under Python 3.11 + if [ "${python_version}" != "3.9" ]; then + packages=" + ${packages} + ${py_pkg_prefix}-pip + " + fi + # Jinja2 is not installed with an OS package since the provided version is too old. # Instead, ansible-test will install it using pip. if [ "${controller}" ]; then packages=" ${packages} ${py_pkg_prefix}-cryptography - ${py_pkg_prefix}-packaging ${py_pkg_prefix}-pyyaml - ${py_pkg_prefix}-resolvelib " + + # The following OS packages are missing for 3.11 (and possibly later) so we just + # skip them and let ansible-test install them from PyPI. + if [ "${python_version}" = "3.9" ]; then + packages=" + ${packages} + ${py_pkg_prefix}-packaging + ${py_pkg_prefix}-resolvelib + " + fi fi while true; do