From e28bd5df1c0762c457d711c078e767b658aebada Mon Sep 17 00:00:00 2001 From: Jan Gutter Date: Wed, 24 Sep 2025 16:14:04 +0100 Subject: [PATCH] Fix up some EL10 compatibility * EL9 has python3.9 as system Python * EL10 has bumped up this to python3.12 * Added a short novel for future archaeologists. Change-Id: Ie9ee25207cee5b5aed773c2dc89a05bf6243069e --- roles/ensure-python/tasks/main.yaml | 39 ++++++++++++++++++++++++++--- 1 file changed, 35 insertions(+), 4 deletions(-) diff --git a/roles/ensure-python/tasks/main.yaml b/roles/ensure-python/tasks/main.yaml index 0aa692632..87c3c5cb2 100644 --- a/roles/ensure-python/tasks/main.yaml +++ b/roles/ensure-python/tasks/main.yaml @@ -36,18 +36,49 @@ become: yes - name: Install specified version of python interpreter and development files (RPM) + # NOTE(jan.gutter): this section has many pitfalls, and lacks test + # coverage. Rather than rewrite the logic to be more pleasing, and risk + # changing the behavior for folks who depend on edge cases, it has been + # preferrable to amend this with special cases, for the time being. + # + # RPM distros have diverged in behavior: packages and aliases are not + # consistent. The following example illustrates some known behavior for + # python_version "3.12" + # + # Fedora/EL9/EL10 (manually tested): + # working: + # - python312 + # - python3.12 + # - python3.12-devel + # not working: + # - python312-devel + # + # OpenSuSE (inferred from rpmfind.net): + # working: + # - python312 + # - python312-devel + # not working: + # - python3.12 + # - python3.12-devel when: - ansible_distribution == 'CentOS' or ansible_distribution == 'RedHat' block: - name: Set default RPM package name + # NOTE(jan.gutter): this is likely faulty - but, without testing, + # touching it would taunt Hyrum's law. EL9/EL10 paths override the + # exception below this task for system python versions. set_fact: rpm_python_pkg_name: python{{ python_version | replace('.', '') }}-devel - - name: Set RPM package name for CentOS/RHEL 9 and Python 3.9 + - name: Set RPM package name for CentOS/RHEL 9/10 + # Special case when the default system python is being used. set_fact: rpm_python_pkg_name: python3-devel - when: - - ansible_distribution_major_version == '9' - - python_version|string == '3.9' + when: >- + (ansible_distribution_major_version == '9' and + python_version|string == '3.9') + or + (ansible_distribution_major_version == '10' and + python_version|string == '3.12') - name: Install RPM package package: name: "{{ rpm_python_pkg_name }}"