From 1cdd0ceff0ad0c17d723145446b8371272c03ddd Mon Sep 17 00:00:00 2001 From: Webster Mudge Date: Fri, 15 Aug 2025 16:05:09 -0400 Subject: [PATCH 1/2] Fix cloudera.exe.version filter parameters and allow for type checking Signed-off-by: Webster Mudge --- plugins/filter/core_exe.py | 9 ++++++--- plugins/module_utils/cldr_version.py | 8 ++++++-- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/plugins/filter/core_exe.py b/plugins/filter/core_exe.py index ed9926cc..e8edcff7 100644 --- a/plugins/filter/core_exe.py +++ b/plugins/filter/core_exe.py @@ -15,7 +15,7 @@ # See the License for the specific language governing permissions and # limitations under the License. -from __future__ import absolute_import, division, print_function +from __future__ import absolute_import, division, print_function, annotations __metaclass__ = type @@ -60,13 +60,16 @@ def combine_onto(*terms, **kwargs): return result -def cldr_version(version: str): +def cldr_version(*terms, **kwargs): """ Parse a Cloudera version string into its parts. """ + if not terms: + return {} + try: - parsed_version = ClouderaVersion(version) + parsed_version = ClouderaVersion(terms[0]) return dict( major=parsed_version.major, minor=parsed_version.minor, diff --git a/plugins/module_utils/cldr_version.py b/plugins/module_utils/cldr_version.py index 685ec485..0d8a250f 100644 --- a/plugins/module_utils/cldr_version.py +++ b/plugins/module_utils/cldr_version.py @@ -14,6 +14,10 @@ # See the License for the specific language governing permissions and # limitations under the License. +from __future__ import absolute_import, division, print_function, annotations + +__metaclass__ = type + import re from ansible.module_utils.compat.version import LooseVersion, Version @@ -60,7 +64,7 @@ class ClouderaVersion(Version): version_re = CLDR_RE - def __init__(self, vstring=None): + def __init__(self, vstring:str = None): self.vstring = vstring self.major = None self.minor = None @@ -141,7 +145,7 @@ def parse(self, vstring) -> None: ) @property - def core(self) -> tuple[int | None, int | None, int | None]: + def core(self) -> tuple: return self.major, self.minor, self.patch @property From b78a3870da1d20ae3eba130affaaf3a55c7c69e5 Mon Sep 17 00:00:00 2001 From: Webster Mudge Date: Fri, 15 Aug 2025 16:06:21 -0400 Subject: [PATCH 2/2] Update cm_repo to use supported lookup Signed-off-by: Webster Mudge --- plugins/module_utils/cldr_version.py | 2 +- roles/cm_repo/tasks/main.yml | 29 ++++++++++++---------------- roles/cm_repo/vars/RedHat-CM5.yml | 2 +- roles/cm_repo/vars/RedHat-CM6.yml | 2 +- roles/cm_repo/vars/RedHat.yml | 4 ++-- roles/cm_repo/vars/main.yml | 4 ++++ 6 files changed, 21 insertions(+), 22 deletions(-) diff --git a/plugins/module_utils/cldr_version.py b/plugins/module_utils/cldr_version.py index 0d8a250f..d3e146d5 100644 --- a/plugins/module_utils/cldr_version.py +++ b/plugins/module_utils/cldr_version.py @@ -64,7 +64,7 @@ class ClouderaVersion(Version): version_re = CLDR_RE - def __init__(self, vstring:str = None): + def __init__(self, vstring: str = None): self.vstring = vstring self.major = None self.minor = None diff --git a/roles/cm_repo/tasks/main.yml b/roles/cm_repo/tasks/main.yml index 53280136..fbcbdc24 100644 --- a/roles/cm_repo/tasks/main.yml +++ b/roles/cm_repo/tasks/main.yml @@ -13,25 +13,20 @@ # See the License for the specific language governing permissions and # limitations under the License. -- name: Load support matrix variables for OS - ansible.builtin.include_vars: "{{ item }}" - with_first_found: - - "../../prereq_supported/vars/{{ ansible_facts['distribution'] }}-{{ ansible_facts['distribution_version'] }}.yml" - - "../../prereq_supported/vars/{{ ansible_facts['distribution'] }}-{{ ansible_facts['distribution_major_version'] }}.yml" - - "../../prereq_supported/vars/{{ ansible_facts['distribution'] }}.yml" - - "../../prereq_supported/vars/{{ ansible_facts['os_family'] }}-{{ ansible_facts['distribution_version'] }}.yml" - - "../../prereq_supported/vars/{{ ansible_facts['os_family'] }}-{{ ansible_facts['distribution_major_version'] }}.yml" - - "../../prereq_supported/vars/{{ ansible_facts['os_family'] }}.yml" - - "../../prereq_supported/vars/default.yml" +- name: Gather distribution details + ansible.builtin.setup: + gather_subset: distribution -- name: Assert that OS is supported for Cloudera Manager version +- name: Assert OS support for Cloudera Manager versions ansible.builtin.assert: that: - - support_matrix | selectattr('manager_version', 'version', cloudera_manager_version, 'le') | length > 0 - fail_msg: > - Cloudera Manager version {{ cloudera_manager_version }} not supported for - OS {{ ansible_facts['distribution'] }}-{{ ansible_facts['distribution_version'] }}. - quiet: true + - supported_cms | + selectattr('family', 'eq', cm_repo_supported_distribution_map[ansible_facts['distribution']] | default(ansible_facts['distribution'])) | + selectattr('version', 'eq', ansible_facts['distribution_version']) | + length > 0 + fail_msg: "OS {{ ansible_facts['distribution'] }}-{{ ansible_facts['distribution_version'] }} not supported." + vars: + supported_cms: "{{ lookup('cloudera.exe.supported', 'operating_systems', product='cloudera_manager', version=cloudera_manager_version) }}" - name: Load Cloudera Manager package repository variables for OS and CM version ansible.builtin.include_vars: "{{ item }}" @@ -44,7 +39,7 @@ - "{{ ansible_facts['os_family'] }}.yml" - "default.yml" vars: - cm_version: "{{ cloudera_manager_version | cloudera.exe.cm_version }}" + cm_version: "{{ cloudera_manager_version | cloudera.exe.version }}" - name: Configure Cloudera Manager package repository ansible.builtin.include_tasks: diff --git a/roles/cm_repo/vars/RedHat-CM5.yml b/roles/cm_repo/vars/RedHat-CM5.yml index 833d46b2..783b4579 100644 --- a/roles/cm_repo/vars/RedHat-CM5.yml +++ b/roles/cm_repo/vars/RedHat-CM5.yml @@ -20,7 +20,7 @@ __cm_repo_enterprise_url: >- [ __cm_repo_default_url, 'p', - 'cm' + (cloudera_manager_version | cloudera.exe.cm_version).major, + 'cm' + (cloudera_manager_version | cloudera.exe.version).major | string, (ansible_os_family | lower), ansible_distribution_major_version, ansible_architecture, diff --git a/roles/cm_repo/vars/RedHat-CM6.yml b/roles/cm_repo/vars/RedHat-CM6.yml index 420844ef..246beada 100644 --- a/roles/cm_repo/vars/RedHat-CM6.yml +++ b/roles/cm_repo/vars/RedHat-CM6.yml @@ -20,7 +20,7 @@ __cm_repo_enterprise_url: >- [ __cm_repo_default_url, 'p', - 'cm' + (cloudera_manager_version | cloudera.exe.cm_version).major, + 'cm' + (cloudera_manager_version | cloudera.exe.version).major | string, cloudera_manager_version, (ansible_os_family | lower) + ansible_distribution_major_version, 'yum' diff --git a/roles/cm_repo/vars/RedHat.yml b/roles/cm_repo/vars/RedHat.yml index fe8bd294..a9267df6 100644 --- a/roles/cm_repo/vars/RedHat.yml +++ b/roles/cm_repo/vars/RedHat.yml @@ -20,7 +20,7 @@ __cm_repo_trial_url: >- {{ [ __cm_repo_default_url, - 'cm' + (__cm_trial_version | cloudera.exe.cm_version).major, + 'cm' + (__cm_trial_version | cloudera.exe.version).major | string, __cm_trial_version, (ansible_os_family | lower) + ansible_distribution_major_version, 'yum' @@ -32,7 +32,7 @@ __cm_repo_enterprise_url: >- [ __cm_repo_default_url, 'p', - 'cm' + (cloudera_manager_version | cloudera.exe.cm_version).major, + 'cm' + (cloudera_manager_version | cloudera.exe.version).major | string, cloudera_manager_version, (ansible_os_family | lower) + ansible_distribution_major_version, 'yum' diff --git a/roles/cm_repo/vars/main.yml b/roles/cm_repo/vars/main.yml index 30fde109..a735f8c5 100644 --- a/roles/cm_repo/vars/main.yml +++ b/roles/cm_repo/vars/main.yml @@ -14,3 +14,7 @@ # limitations under the License. __cm_repo_default_url: https://archive.cloudera.com + +# Map of ansible_distribution -> support matrix 'family' +cm_repo_supported_distribution_map: + RedHat: RHEL