Extend distribution_check role to account for Ansible changes reg. facts

Somewhere between ansible [core 2.14.4] and ansible [core 2.15.0] the
logic for the distribution_version Ansible fact got changed. With the
newer Ansible version Debians distribution_version gets reported as 11.7
as opposed to getting reported as 11 with the old Ansible version. To
still allow for useful distribution checks, extend the
distribution_check role by allowing the specification of
distribution_major_versions and distribution_releases as well.
This way you can check for an Ubuntu version by using
distribution_version (which for example resolves to 18.04, while
distribution_major_version would resolve to 18 in that case) and check
for a Debian version by using distribution_major_version (which for
example resolves to 11, while distribution_version would resolve to 11.7
in that case).
This commit is contained in:
June 2023-07-08 19:58:02 +02:00 committed by julian
parent 0c62a8f3e0
commit 8bc60e42a8
17 changed files with 85 additions and 29 deletions

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -3,5 +3,5 @@ dependencies: # noqa meta-no-info
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -0,0 +1,13 @@
# Role `distribution_check`
This role checks if the distribution of the hosts is supported (part of the provided distribution support spec.) and fails if it's not.
If a hosts distribution and either an accompanying distribution version, major version or release is supported, the role doesn't fail for the host in question.
## Required Arguments
For the required arguments look at the [`argument_specs.yaml`](./meta/argument_specs.yaml).
## `hosts`
The `hosts` for this role need to be the machines for which you want to make sure their distribution is supported.

View file

@ -1,7 +1,7 @@
argument_specs: argument_specs:
main: main:
options: options:
distribution_check__supported_distributions: distribution_check__distribution_support_spec:
description: A spec specifying the supported distribution. description: A spec specifying the supported distribution.
type: list type: list
elements: dict elements: dict
@ -15,4 +15,14 @@ argument_specs:
description: The supported versions of the supported distribution. description: The supported versions of the supported distribution.
type: list type: list
elements: str elements: str
required: true required: false
major_versions:
description: The supported major versions of the supported distribution.
type: list
elements: str
required: false
releases:
description: The supported releases of the supported distribution.
type: list
elements: str
required: false

View file

@ -1,20 +1,53 @@
- name: Set fact holding list of supported distribution names - name: set fact holding list of supported distribution names
ansible.builtin.set_fact: ansible.builtin.set_fact:
distribution_check__supported_distribution_names: "{{ distribution_check__supported_distributions | community.general.json_query('[].name') }}" distribution_check__supported_distribution_names: "{{ distribution_check__distribution_support_spec
| community.general.json_query('[].name') }}"
- name: Fail on unsupported distribution (name) - name: fail on unsupported distribution (name)
ansible.builtin.fail: ansible.builtin.fail:
msg: The hosts distribution (name) isn't supported. msg: The hosts distribution (name) isn't supported.
when: ansible_facts.distribution not in distribution_check__supported_distribution_names when: ansible_facts['distribution'] not in distribution_check__supported_distribution_names
- name: Set fact holding list of supported distribution versions - name: set facts for holding lists of supported distribution versions, major versions and releases
ansible.builtin.set_fact: block:
distribution_check__supported_distribution_versions: "{{ distribution_check__supported_distributions - name: set fact holding list of supported distribution versions
| community.general.json_query(distribution_check__supported_distribution_versions_query) }}" ansible.builtin.set_fact:
vars: distribution_check__supported_distribution_versions: "{{ distribution_check__distribution_support_spec
distribution_check__supported_distribution_versions_query: "[?name=='{{ ansible_facts.distribution }}'].versions | [].to_string(@)" | community.general.json_query(distribution_check__supported_distribution_versions_query) }}"
vars:
distribution_check__supported_distribution_versions_query: "[?name=='{{ ansible_facts['distribution'] }}'].versions | [].to_string(@)"
- name: Fail on unsupported distribution version - name: set fact holding list of supported distribution major versions
ansible.builtin.set_fact:
distribution_check__supported_distribution_major_versions: "{{ distribution_check__distribution_support_spec
| community.general.json_query(distribution_check__supported_distribution_major_versions_query) }}"
vars:
distribution_check__supported_distribution_major_versions_query: "[?name=='{{ ansible_facts['distribution'] }}'].major_versions | [].to_string(@)"
- name: set fact holding list of supported distribution releases
ansible.builtin.set_fact:
distribution_check__supported_distribution_releases: "{{ distribution_check__distribution_support_spec
| community.general.json_query(distribution_check__supported_distribution_releases_query) }}"
vars:
distribution_check__supported_distribution_releases_query: "[?name=='{{ ansible_facts['distribution'] }}'].releases | [].to_string(@)"
- name: check for distribution version, major version and release support
block:
- name: set fact on whether the distribution version is supported
ansible.builtin.set_fact:
distribution_check__distribution_version_supported: "{{ ansible_facts['distribution_version'] in distribution_check__supported_distribution_versions }}"
- name: set fact on whether the distribution major version is supported
ansible.builtin.set_fact:
distribution_check__distribution_major_version_supported: "{{ ansible_facts['distribution_major_version'] in distribution_check__supported_distribution_major_versions }}" # noqa: yaml[line-length]
- name: set fact on whether the distribution release is supported
ansible.builtin.set_fact:
distribution_check__distribution_release_supported: "{{ ansible_facts['distribution_release'] in distribution_check__supported_distribution_releases }}"
- name: fail, if neither the distributions version, major version or release is supported
ansible.builtin.fail: ansible.builtin.fail:
msg: The hosts distribution version isn't supported. msg: Neither the hosts distribution version, major version or release is supported.
when: ansible_facts.distribution_version not in distribution_check__supported_distribution_versions when: not (distribution_check__distribution_version_supported
or distribution_check__distribution_major_version_supported
or distribution_check__distribution_release_supported)

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__distribution_support_spec: distribution_check__distribution_support_spec:
- name: Debian - name: Debian
versions: major_versions:
- 11 - 11

View file

@ -4,6 +4,6 @@ dependencies:
vars: vars:
distribution_check__distribution_support_spec: distribution_check__distribution_support_spec:
- name: Debian - name: Debian
versions: major_versions:
- 11 - 11
- role: docker - role: docker

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -4,6 +4,6 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"
- role: raspberry_pi_check - role: raspberry_pi_check

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -4,7 +4,7 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"
- role: add_apt_repository - role: add_apt_repository
vars: vars:

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -3,5 +3,5 @@ dependencies: # noqa meta-no-info
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -4,5 +4,5 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"

View file

@ -4,7 +4,7 @@ dependencies:
vars: vars:
distribution_check__supported_distributions: distribution_check__supported_distributions:
- name: Debian - name: Debian
versions: major_versions:
- "11" - "11"
- role: nodejs - role: nodejs
vars: vars: