diff --git a/roles/compatcheck/meta/argument_specs.yaml b/roles/compatcheck/meta/argument_specs.yaml index 32ffb28..6692ab9 100644 --- a/roles/compatcheck/meta/argument_specs.yaml +++ b/roles/compatcheck/meta/argument_specs.yaml @@ -30,3 +30,13 @@ argument_specs: description: Last supported major version. Allows any version if not specified. type: int required: false + package_managers: + description: List of supported package managers. Defaults to apt for debian and ubuntu, dnf for fedora, pacman for archlinux + type: list + required: false + elements: str + choices: + - apt + - dnf + - pacman + - atomic_container diff --git a/roles/compatcheck/tasks/main.yaml b/roles/compatcheck/tasks/main.yaml index 00b151f..6f1b6ed 100644 --- a/roles/compatcheck/tasks/main.yaml +++ b/roles/compatcheck/tasks/main.yaml @@ -2,14 +2,12 @@ - name: Fail if distribution not supported ansible.builtin.fail: msg: "{{ lookup('ansible.builtin.template', 'distroerror.j2').strip() }}" - when: checkfailed - loop: - - "{{ compatcheck_distro | length == 0 }}" - - > - {{ - ansible_distribution_major_version != 'n/a' and - compatcheck_distro[0].version_min | default(0) > ansible_distribution_major_version | int - }} - - "{{ compatcheck_distro[0].version_max is defined and compatcheck_distro[0].version_max < ansible_distribution_major_version | int }}" + when: > + _compatcheck_distro | length != 1 or ( + ansible_distribution_major_version != 'n/a' and + _compatcheck_distro[0].version_min | default(0) > ansible_distribution_major_version | int + ) or + _compatcheck_distro[0].version_max is defined and _compatcheck_distro[0].version_max < ansible_distribution_major_version | int or + ansible_pkg_mgr not in _compatcheck_distro[0].package_managers | default([_compatcheck_default_package_manager]) loop_control: loop_var: checkfailed diff --git a/roles/compatcheck/templates/distroerror.j2 b/roles/compatcheck/templates/distroerror.j2 index 6cdf723..10b50c5 100644 --- a/roles/compatcheck/templates/distroerror.j2 +++ b/roles/compatcheck/templates/distroerror.j2 @@ -1,15 +1,18 @@ {%- set distros = [] -%} {%- for distro in compatcheck_supported_distributions -%} + {% set distro_package_managers = distro.package_managers | default([_compatcheck_default_package_managers[distro.name]]) %} + {% set distro_package_managers_str = ' (' ~ ', '.join(distro_package_managers) ~ ')' %} + {% set distro_name = distro.name | capitalize %} {%- if distro.version_min is defined -%} {%- if distro.version_max is defined -%} - {{ distros.append(distro.name | capitalize + ' ' + distro.version_min | string + '-' + distro.version_max | string) }} + {{ distros.append(distro_name ~ ' ' ~ distro.version_min ~ '-' ~ distro.version_max ~ distro_package_managers_str) }} {%- else -%} - {{ distros.append(distro.name | capitalize + ' ' + distro.version_min | string + '+') }} + {{ distros.append(distro_name ~ ' ' ~ distro.version_min ~ '+' ~ distro_package_managers_str) }} {%- endif -%} {%- elif distro.version_max is defined -%} - {{ distros.append(distro.name | capitalize + ' <' + distro.version_max | string) }} + {{ distros.append(distro_name ~ ' <' ~ distro.version_max ~ distro_package_managers_str) }} {%- else -%} - {{ distros.append(distro.name | capitalize) }} + {{ distros.append(distro_name ~ distro_package_managers_str) }} {%- endif -%} {%- endfor -%} -This role only supports {{ distros | join(', ') }} (You are running {{ ansible_distribution }} {{ ansible_distribution_major_version }}) +This role only supports {{ distros | join(', ') }} (You are running {{ ansible_distribution }} {{ ansible_distribution_major_version }} ({{ ansible_pkg_mgr }}) diff --git a/roles/compatcheck/vars/main.yaml b/roles/compatcheck/vars/main.yaml index b20da70..f086430 100644 --- a/roles/compatcheck/vars/main.yaml +++ b/roles/compatcheck/vars/main.yaml @@ -1,2 +1,8 @@ --- -compatcheck_distro: "{{ compatcheck_supported_distributions | selectattr('name', 'equalto', ansible_distribution | lower) }}" +_compatcheck_distro: "{{ compatcheck_supported_distributions | selectattr('name', 'equalto', ansible_distribution | lower) }}" +_compatcheck_default_package_managers: + debian: apt + ubuntu: apt + fedora: dnf + archlinux: pacman +_compatcheck_default_package_manager: "{{ _compatcheck_default_package_managers[ansible_distribution | lower] }}"