diff --git a/.vscode/settings.json b/.vscode/settings.json index 2d43539..904d8da 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -2,7 +2,5 @@ "search.exclude": { "/playbooks/roles/": true, "/playbooks/resources/": true, - "/ansible_collections/": true, - "/galaxy-roles/": true, }, } diff --git a/roles/certbot/meta/main.yaml b/roles/certbot/meta/main.yaml new file mode 100644 index 0000000..9b678e9 --- /dev/null +++ b/roles/certbot/meta/main.yaml @@ -0,0 +1,10 @@ +--- +dependencies: + - role: distribution_check + vars: + distribution_check__distribution_support_spec: + - name: Debian + major_versions: + - 11 + - 12 + - 13 diff --git a/roles/distribution_check/README.md b/roles/distribution_check/README.md new file mode 100644 index 0000000..38e06fc --- /dev/null +++ b/roles/distribution_check/README.md @@ -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. diff --git a/roles/distribution_check/meta/argument_specs.yaml b/roles/distribution_check/meta/argument_specs.yaml new file mode 100644 index 0000000..1d8bab9 --- /dev/null +++ b/roles/distribution_check/meta/argument_specs.yaml @@ -0,0 +1,28 @@ +argument_specs: + main: + options: + distribution_check__distribution_support_spec: + description: A spec specifying the supported distribution. + type: list + elements: dict + required: true + options: + name: + description: The name of the supported distribution. + type: str + required: true + versions: + description: The supported versions of the supported distribution. + type: list + elements: str + 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 diff --git a/roles/distribution_check/tasks/main.yaml b/roles/distribution_check/tasks/main.yaml new file mode 100644 index 0000000..6522fc9 --- /dev/null +++ b/roles/distribution_check/tasks/main.yaml @@ -0,0 +1,53 @@ +- name: set fact holding list of supported distribution names + ansible.builtin.set_fact: + distribution_check__supported_distribution_names: "{{ distribution_check__distribution_support_spec + | community.general.json_query('[].name') }}" + +- name: fail on unsupported distribution (name) + ansible.builtin.fail: + msg: The hosts distribution (name) isn't supported. + when: ansible_facts['distribution'] not in distribution_check__supported_distribution_names + +- name: set facts for holding lists of supported distribution versions, major versions and releases + block: + - name: set fact holding list of supported distribution versions + ansible.builtin.set_fact: + distribution_check__supported_distribution_versions: "{{ distribution_check__distribution_support_spec + | 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: 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: + msg: Neither the hosts distribution version, major version or release is supported. + when: not (distribution_check__distribution_version_supported + or distribution_check__distribution_major_version_supported + or distribution_check__distribution_release_supported) diff --git a/roles/docker/meta/main.yaml b/roles/docker/meta/main.yaml new file mode 100644 index 0000000..9b678e9 --- /dev/null +++ b/roles/docker/meta/main.yaml @@ -0,0 +1,10 @@ +--- +dependencies: + - role: distribution_check + vars: + distribution_check__distribution_support_spec: + - name: Debian + major_versions: + - 11 + - 12 + - 13 diff --git a/roles/dokuwiki/meta/main.yml b/roles/dokuwiki/meta/main.yml new file mode 100644 index 0000000..9b678e9 --- /dev/null +++ b/roles/dokuwiki/meta/main.yml @@ -0,0 +1,10 @@ +--- +dependencies: + - role: distribution_check + vars: + distribution_check__distribution_support_spec: + - name: Debian + major_versions: + - 11 + - 12 + - 13 diff --git a/roles/nginx/meta/main.yaml b/roles/nginx/meta/main.yaml new file mode 100644 index 0000000..78bb770 --- /dev/null +++ b/roles/nginx/meta/main.yaml @@ -0,0 +1,10 @@ +--- +dependencies: + - role: distribution_check + vars: + distribution_check__distribution_support_spec: + - name: Debian + major_versions: + - "11" + - "12" + - "13"