Skip to content

Commit 9efe720

Browse files
authored
Merge pull request sap-linuxlab#1097 from berndfinger/issue-1095-new-mechanism-for-loading-rhel-minor-plus-vars
sap_hana_preconfigure: New mechanism for loading rhel minor plus vars without having to use "find" files on localhost.
2 parents 3a5a8a7 + 2407e4f commit 9efe720

2 files changed

Lines changed: 59 additions & 75 deletions

File tree

roles/sap_hana_preconfigure/tasks/RedHat/include_vars.yml

Lines changed: 0 additions & 56 deletions
This file was deleted.

roles/sap_hana_preconfigure/tasks/main.yml

Lines changed: 59 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -5,38 +5,78 @@
55
ansible.builtin.debug:
66
var: role_path
77

8-
# Load variable files in order:
9-
# 1. Suse.yml / RedHat.yml - Specific to OS family.
10-
# 2. SLES_15.yml / RedHat_9.yml - Specific to distribution (SLES, SLES_SAP or RedHat) and major release.
11-
# 3. SLES_15.6.yml / RedHat_9.2 - Specific to distribution (SLES, SLES_SAP or RedHat) and minor release.
12-
# 4. SLES_SAP_15.yml - Specific to distribution SLES_SAP and major release.
13-
# 5. SLES_SAP_15.6.yml - Specific to distribution SLES_SAP and minor release.
14-
- name: Include OS specific vars, specific
15-
ansible.builtin.include_vars: "{{ __vars_file }}"
16-
loop: "{{ __var_files }}"
8+
- name: Examine the OS minor version
9+
ansible.builtin.set_fact:
10+
__sap_hana_preconfigure_fact_ansible_distribution_minor_version: '{{ ansible_distribution_version.split(".")[1] }}'
11+
12+
# Load variable files in the following order (example for SLES and SLES_SAP 15.6 and RHEL 9.2):
13+
# 1. Suse.yml / RedHat.yml - Specific to OS family.
14+
# 2. SLES_15.yml / RedHat_9.yml - Specific to distribution major release.
15+
# 3. (SLES_SAP only) SLES_SAP_15.yml - Specific to distribution SLES_SAP major release.
16+
# 4. (RHEL only) RedHat_9.1.plus.yml - Valid for RHEL release 9.1 and all later minor releases.
17+
# 5. (RHEL only) RedHat_9.2.plus.yml - Valid for RHEL release 9.2 and all later minor releases.
18+
# 6. SLES_15.6.yml / RedHat_9.2.yml - Specific to distribution major + minor release.
19+
# 7. (SLES_SAP only) SLES_SAP_15.6.yml - Specific to distribution SLES_SAP major and minor release.
20+
21+
# Step 1: Include any vars files which apply to the OS family and the OS major release
22+
- name: Include OS major specific vars
23+
ansible.builtin.include_vars: "{{ __vars_file_major }}"
24+
loop: "{{ __vars_files_major }}"
1725
vars:
18-
__vars_file: "{{ role_path }}/vars/{{ item }}"
26+
__vars_file_major: "{{ role_path }}/vars/{{ item }}"
1927
__distribution_major: "{{ ansible_distribution ~ '_' ~ ansible_distribution_major_version }}"
20-
__distribution_major_minor: "{{ ansible_distribution ~ '_' ~ ansible_distribution_version }}"
2128
# Enables loading of shared vars between SLES and SLES_SAP
2229
__distribution_split_major: "{{ ansible_distribution.split('_')[0] ~ '_' ~ ansible_distribution_major_version }}"
23-
__distribution_split_major_minor: "{{ ansible_distribution.split('_')[0] ~ '_' ~ ansible_distribution_version }}"
24-
__var_files: >-
30+
__vars_files_major: >-
2531
{{
2632
[
2733
ansible_os_family ~ '.yml',
2834
(ansible_distribution ~ '.yml') if ansible_distribution != ansible_os_family else None,
2935
(__distribution_split_major ~ '.yml') if __distribution_split_major != __distribution_major else None,
30-
(__distribution_split_major_minor ~ '.yml') if __distribution_split_major_minor != __distribution_major_minor else None,
3136
__distribution_major ~ '.yml',
32-
__distribution_major_minor ~ '.yml',
3337
] | select('defined') | select('string') | list
3438
}}
35-
when: __vars_file is file
39+
when: __vars_file_major is file
3640

37-
- name: Include RHEL minor release specific vars files
38-
ansible.builtin.include_tasks: 'RedHat/include_vars.yml'
39-
when: ansible_distribution == 'RedHat'
41+
# Step 2 (RHEL only): Include any vars files which are valid for all RHEL minor and later minor releases up to the current one.
42+
- name: Include minor plus specific vars, RHEL only
43+
ansible.builtin.include_vars: "{{ __vars_file_plus }}"
44+
loop: "{{ __vars_files_plus }}"
45+
vars:
46+
__vars_file_plus: "{{ role_path }}/vars/{{ item }}"
47+
__distribution_major_minor_plus_yml: |
48+
{%- set major_minor_plus = [] -%}
49+
{%- for minor_number in range(1, __sap_hana_preconfigure_fact_ansible_distribution_minor_version | int + 1, 1) -%}
50+
{%- set _ = major_minor_plus.append(
51+
ansible_distribution ~ '_' ~
52+
ansible_distribution_major_version ~ '.' ~
53+
(minor_number | string) ~ '.plus' ~ '.yml')
54+
-%}
55+
{%- endfor -%}
56+
{{ major_minor_plus }}
57+
__vars_files_plus: >-
58+
{{ __distribution_major_minor_plus_yml | list }}
59+
when:
60+
- __vars_file_plus is file
61+
- ansible_distribution == 'RedHat'
62+
63+
# Step 3: Include any vars files which are valid only for the OS minor release
64+
- name: Include OS minor specific vars
65+
ansible.builtin.include_vars: "{{ __vars_file_minor }}"
66+
loop: "{{ __vars_files_minor }}"
67+
vars:
68+
__vars_file_minor: "{{ role_path }}/vars/{{ item }}"
69+
__distribution_major_minor: "{{ ansible_distribution ~ '_' ~ ansible_distribution_version }}"
70+
# Enables loading of shared vars between SLES and SLES_SAP
71+
__distribution_split_major_minor: "{{ ansible_distribution.split('_')[0] ~ '_' ~ ansible_distribution_version }}"
72+
__vars_files_minor: >-
73+
{{
74+
[
75+
(__distribution_split_major_minor ~ '.yml') if __distribution_split_major_minor != __distribution_major_minor else None,
76+
__distribution_major_minor ~ '.yml',
77+
] | select('defined') | select('string') | list
78+
}}
79+
when: __vars_file_minor is file
4080

4181
- name: Set filename prefix to empty string if role is run in normal mode
4282
ansible.builtin.set_fact:

0 commit comments

Comments
 (0)