Skip to content

Commit 931e140

Browse files
authored
Merge pull request #1207 from sap-linuxlab/dev
collection: Merge dev to main for release 1.9.2
2 parents b22db19 + fbad990 commit 931e140

10 files changed

Lines changed: 125 additions & 67 deletions

File tree

CHANGELOG.rst

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,21 @@ community.sap\_install Release Notes
44

55
.. contents:: Topics
66

7+
v1.9.2
8+
======
9+
10+
Release Summary
11+
---------------
12+
13+
improvements and bug fixes
14+
15+
Bugfixes
16+
--------
17+
18+
- sap_ha_pacemaker_cluster - Fix issue 1203 sudo dash (https://github.com/sap-linuxlab/community.sap_install/pull/1204)
19+
- sap_storage_setup - Add option to mount generic NFS mounts (https://github.com/sap-linuxlab/community.sap_install/pull/1205)
20+
- sap_swpm - Remove ansible.posix dependency (https://github.com/sap-linuxlab/community.sap_install/pull/1202)
21+
722
v1.9.1
823
======
924

CONTRIBUTORS.md

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -25,10 +25,10 @@ For specific role maintainers, see the `README.md` file in the corresponding rol
2525

2626
| Name | Commits | Lines Changed | Last Commit |
2727
| ---- | ------- | ------------- | ----------- |
28-
| [Bernd Finger](https://github.com/berndfinger) | 895 | 73829 | 2026-03-25 |
29-
| [Janine Fuchs](https://github.com/ja9fuchs) | 477 | 28147 | 2026-03-12 |
28+
| [Bernd Finger](https://github.com/berndfinger) | 898 | 73917 | 2026-03-26 |
29+
| [Janine Fuchs](https://github.com/ja9fuchs) | 478 | 28163 | 2026-04-07 |
3030
| [Sean Freeman](https://github.com/sean-freeman) | 213 | 25561 | 2025-02-28 |
31-
| [Marcel Mamula](https://github.com/marcelmamula) | 141 | 45370 | 2026-03-19 |
31+
| [Marcel Mamula](https://github.com/marcelmamula) | 145 | 45504 | 2026-04-10 |
3232
| [Nils Koenig](https://github.com/newkit) | 81 | 19806 | 2024-01-29 |
3333
| [Markus Koch](https://github.com/rhmk) | 76 | 3462 | 2024-12-27 |
3434
| [Markus Moster](https://github.com/mmoster) | 65 | 7983 | 2022-06-28 |
@@ -102,7 +102,7 @@ For specific role maintainers, see the `README.md` file in the corresponding rol
102102

103103
| Name | Commits | Lines Changed | Last Commit |
104104
| ---- | ------- | ------------- | ----------- |
105-
| [Janine Fuchs](https://github.com/ja9fuchs) | 198 | 16178 | 2026-03-12 |
105+
| [Janine Fuchs](https://github.com/ja9fuchs) | 199 | 16194 | 2026-04-07 |
106106
| [Marcel Mamula](https://github.com/marcelmamula) | 64 | 20303 | 2026-03-19 |
107107
| [Sean Freeman](https://github.com/sean-freeman) | 12 | 391 | 2024-05-23 |
108108
| [Bernd Finger](https://github.com/berndfinger) | 6 | 78 | 2025-02-17 |
@@ -195,7 +195,7 @@ For specific role maintainers, see the `README.md` file in the corresponding rol
195195
| Name | Commits | Lines Changed | Last Commit |
196196
| ---- | ------- | ------------- | ----------- |
197197
| [Janine Fuchs](https://github.com/ja9fuchs) | 53 | 3475 | 2024-01-12 |
198-
| [Marcel Mamula](https://github.com/marcelmamula) | 11 | 1065 | 2026-03-19 |
198+
| [Marcel Mamula](https://github.com/marcelmamula) | 15 | 1199 | 2026-04-10 |
199199
| [Sean Freeman](https://github.com/sean-freeman) | 9 | 744 | 2024-07-23 |
200200
| [Bernd Finger](https://github.com/berndfinger) | 8 | 61 | 2025-02-17 |
201201
| [Gabriele Puliti](https://github.com/Wabri) | 1 | 17 | 2024-06-25 |
@@ -205,7 +205,7 @@ For specific role maintainers, see the `README.md` file in the corresponding rol
205205

206206
| Name | Commits | Lines Changed | Last Commit |
207207
| ---- | ------- | ------------- | ----------- |
208-
| [Bernd Finger](https://github.com/berndfinger) | 133 | 9977 | 2026-02-27 |
208+
| [Bernd Finger](https://github.com/berndfinger) | 134 | 10000 | 2026-03-26 |
209209
| [Sean Freeman](https://github.com/sean-freeman) | 70 | 2303 | 2024-06-20 |
210210
| [Rob Dobozy](https://github.com/rob0d) | 23 | 684 | 2026-02-19 |
211211
| [Marcel Mamula](https://github.com/marcelmamula) | 13 | 2459 | 2026-02-23 |

changelogs/changelog.yaml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -429,3 +429,11 @@ releases:
429429
- sap_storage_setup, sap_hostagent, anydb - Ansible 2.24 compatibility (https://github.com/sap-linuxlab/community.sap_install/pull/1193)
430430
- sap_ha_pacemaker_cluster - Ansible 2.24 compatibility (https://github.com/sap-linuxlab/community.sap_install/pull/1194)
431431
- sap_hana_preconfigure/RHEL - Correctly set tsx in all cases (https://github.com/sap-linuxlab/community.sap_install/pull/1197)
432+
1.9.2:
433+
release_date: '2026-04-13'
434+
changes:
435+
release_summary: improvements and bug fixes
436+
bugfixes:
437+
- sap_swpm - Remove ansible.posix dependency (https://github.com/sap-linuxlab/community.sap_install/pull/1202)
438+
- sap_ha_pacemaker_cluster - Fix issue 1203 sudo dash (https://github.com/sap-linuxlab/community.sap_install/pull/1204)
439+
- sap_storage_setup - Add option to mount generic NFS mounts (https://github.com/sap-linuxlab/community.sap_install/pull/1205)

galaxy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ namespace: community
1111
name: sap_install
1212

1313
# The version of the collection. Must be compatible with semantic versioning
14-
version: 1.9.1
14+
version: 1.9.2
1515

1616
# The path to the Markdown (.md) readme file. This path is relative to the root of the collection
1717
readme: README.md

roles/sap_ha_pacemaker_cluster/templates/sudofile_20-saphana.j2

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,23 +6,23 @@
66
# to update the SAP HANA cluster resource status.
77

88
{% for node in sap_ha_pacemaker_cluster_cluster_nodes %}
9-
Cmnd_Alias {{ node.hana_site | upper }}_SOK = /usr/sbin/crm_attribute -n hana_{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}_site_srHook_{{ node.hana_site }} -v SOK -t crm_config -s {{ sap_ha_pacemaker_cluster_hadr_provider_name }}
10-
Cmnd_Alias {{ node.hana_site | upper }}_SFAIL = /usr/sbin/crm_attribute -n hana_{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}_site_srHook_{{ node.hana_site }} -v SFAIL -t crm_config -s {{ sap_ha_pacemaker_cluster_hadr_provider_name }}
9+
Cmnd_Alias {{ node.hana_site | upper | replace("-", "") }}_SOK = /usr/sbin/crm_attribute -n hana_{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}_site_srHook_{{ node.hana_site }} -v SOK -t crm_config -s {{ sap_ha_pacemaker_cluster_hadr_provider_name }}
10+
Cmnd_Alias {{ node.hana_site | upper | replace("-", "") }}_SFAIL = /usr/sbin/crm_attribute -n hana_{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}_site_srHook_{{ node.hana_site }} -v SFAIL -t crm_config -s {{ sap_ha_pacemaker_cluster_hadr_provider_name }}
1111
{% endfor %}
1212
{% if __sap_ha_pacemaker_cluster_hana_hook_tkover and __sap_ha_pacemaker_cluster_saphanasr_angi_available %}
1313
Cmnd_Alias HOOK_HELPER = /usr/bin/SAPHanaSR-hookHelper --sid={{ __sap_ha_pacemaker_cluster_hana_sid | upper }} --case=checkTakeover
1414

15-
{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}adm ALL=(ALL) NOPASSWD: {% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper }}_SOK, {{ node.hana_site | upper }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER
15+
{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}adm ALL=(ALL) NOPASSWD: {% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper | replace("-", "") }}_SOK, {{ node.hana_site | upper | replace("-", "") }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER
1616

17-
Defaults!{% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper }}_SOK, {{ node.hana_site | upper }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER !requiretty
17+
Defaults!{% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper | replace("-", "") }}_SOK, {{ node.hana_site | upper | replace("-", "") }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER !requiretty
1818
{% elif __sap_ha_pacemaker_cluster_hana_hook_tkover and not __sap_ha_pacemaker_cluster_saphanasr_angi_available %}
1919
Cmnd_Alias HOOK_HELPER = /usr/sbin/SAPHanaSR-hookHelper --sid={{ __sap_ha_pacemaker_cluster_hana_sid | upper }} --case=checkTakeover
2020

21-
{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}adm ALL=(ALL) NOPASSWD: {% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper }}_SOK, {{ node.hana_site | upper }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER
21+
{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}adm ALL=(ALL) NOPASSWD: {% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper | replace("-", "") }}_SOK, {{ node.hana_site | upper | replace("-", "") }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER
2222

23-
Defaults!{% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper }}_SOK, {{ node.hana_site | upper }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER !requiretty
23+
Defaults!{% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper | replace("-", "") }}_SOK, {{ node.hana_site | upper | replace("-", "") }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}, HOOK_HELPER !requiretty
2424
{% else %}
25-
{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}adm ALL=(ALL) NOPASSWD: {% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper }}_SOK, {{ node.hana_site | upper }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}
25+
{{ __sap_ha_pacemaker_cluster_hana_sid | lower }}adm ALL=(ALL) NOPASSWD: {% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper | replace("-", "") }}_SOK, {{ node.hana_site | upper | replace("-", "") }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %}
2626

27-
Defaults!{% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper }}_SOK, {{ node.hana_site | upper }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %} !requiretty
27+
Defaults!{% for node in sap_ha_pacemaker_cluster_cluster_nodes %}{{ node.hana_site | upper | replace("-", "") }}_SOK, {{ node.hana_site | upper | replace("-", "") }}_SFAIL{{ ", " if not loop.last else "" }}{% endfor %} !requiretty
2828
{% endif %}

roles/sap_storage_setup/tasks/generic_tasks/configure_nfs_filesystems.yml

Lines changed: 53 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -32,62 +32,54 @@
3232
# - mount_src: /my_dir/usr/sap/DB1/ASCS00
3333
# mountpoint: /usr/sap/DB1/ASCS00
3434

35+
# This task creates list of mount points and related directories to be created on the NFS share.
36+
# Generic mount point elif also covers SAP specific mount points: '/usr/sap/trans', '/hana/*', '/lss/shared'.
37+
# Resulting list length can be:
38+
# - 0 if mount point is in the forbidden paths list.
39+
# - 1 if a valid mount point was defined, SAP or non-SAP specific.
40+
# - 1+ if /usr/sap was defined and multiple subdirectories were created based on the host type.
3541
- name: SAP Storage Setup - ({{ nfs_item.name }}) Set fact for directories
3642
ansible.builtin.set_fact:
3743
__sap_storage_setup_fact_related_directories: |
3844
{% set mount_list = [] %}
45+
{%- set clean_mount_src = nfs_item.nfs_path | regex_replace('/$', '') -%}
46+
{%- set clean_mountpoint = nfs_item.mountpoint | regex_replace('/$', '') -%}
3947
40-
{%- if nfs_item.mountpoint | regex_replace('/$', '') == '/sapmnt' -%}
48+
{%- if clean_mountpoint == '/sapmnt' -%}
4149
{%- set add_sapmnt = mount_list.extend([
4250
{
43-
'mount_src': nfs_item.nfs_path | regex_replace('/$', ''),
44-
'mountpoint': nfs_item.mountpoint | regex_replace('/$', ''),
51+
'mount_src': clean_mount_src,
52+
'mountpoint': clean_mountpoint,
4553
'dir_only': '/' + sap_storage_setup_sid,
4654
}
4755
]) %}
4856
49-
{%- elif nfs_item.mountpoint | regex_replace('/$', '') == '/usr/sap/trans' %}
50-
{%- set add_trans = mount_list.extend([
51-
{
52-
'mount_src': nfs_item.nfs_path | regex_replace('/$', ''),
53-
'mountpoint': nfs_item.mountpoint | regex_replace('/$', ''),
54-
}
55-
]) %}
56-
57-
{%- elif nfs_item.mountpoint | regex_replace('/$', '') == '/usr/sap' -%}
57+
{%- elif clean_mountpoint == '/usr/sap' -%}
5858
{%- for common in sap_storage_setup_nfs_dirs_usr_sap.all %}
5959
{%- set add_all_usrsap = mount_list.extend([
6060
{
61-
'mount_src': nfs_item.nfs_path | regex_replace('/$', '') + '/' + common,
62-
'mountpoint': nfs_item.mountpoint | regex_replace('/$', '') + '/' + common,
61+
'mount_src': clean_mount_src + '/' + common,
62+
'mountpoint': clean_mountpoint + '/' + common,
6363
}
6464
]) %}
6565
{%- endfor %}
6666
6767
{%- for type in host_type %}
68-
{%- for dir in sap_storage_setup_nfs_dirs_usr_sap[type] %}
68+
{%- for dir in sap_storage_setup_nfs_dirs_usr_sap[type] | d([]) %}
6969
{%- set dirs = mount_list.extend([
7070
{
71-
'mount_src': nfs_item.nfs_path | regex_replace('/$', '') + '/' + dir,
72-
'mountpoint': nfs_item.mountpoint | regex_replace('/$', '') + '/' + dir,
71+
'mount_src': clean_mount_src + '/' + dir,
72+
'mountpoint': clean_mountpoint + '/' + dir,
7373
}
7474
]) %}
7575
{%- endfor %}
7676
{%- endfor %}
7777
78-
{%- elif nfs_item.mountpoint.startswith('/hana/') %}
79-
{%- set add_hana = mount_list.extend([
80-
{
81-
'mount_src': nfs_item.nfs_path | regex_replace('/$', ''),
82-
'mountpoint': nfs_item.mountpoint | regex_replace('/$', ''),
83-
}
84-
]) %}
85-
86-
{%- elif nfs_item.mountpoint | regex_replace('/$', '') == '/software' -%}
87-
{%- set add_software = mount_list.extend([
78+
{%- elif clean_mountpoint not in __sap_storage_setup_nfs_forbidden_paths -%}
79+
{%- set add_other_nfs = mount_list.extend([
8880
{
89-
'mount_src': nfs_item.nfs_path | regex_replace('/$', ''),
90-
'mountpoint': nfs_item.mountpoint | regex_replace('/$', ''),
81+
'mount_src': clean_mount_src,
82+
'mountpoint': clean_mountpoint,
9183
}
9284
]) %}
9385
@@ -106,13 +98,45 @@
10698
{%- endif %}
10799
108100
101+
- name: SAP Storage Setup - Inform that no valid mount points were found
102+
ansible.builtin.debug:
103+
msg: >
104+
WARN: Provided NFS mount point '{{ nfs_item.mountpoint }}' will be skipped, because it is in the forbidden paths list:
105+
{{ __sap_storage_setup_nfs_forbidden_paths | map('quote') | join(', ') }}.
106+
when:
107+
# Only run this if the list is empty.
108+
- __sap_storage_setup_fact_related_directories | length == 0
109+
110+
111+
- name: SAP Storage Setup - Inform that non-SAP mount points were found
112+
ansible.builtin.debug:
113+
msg: |
114+
INFO: Non-SAP specific mount point was detected: {{ __non_sap_mounts[0] }}
115+
The mount point will be mounted, but no SAP specific subdirectories will be created.
116+
vars:
117+
# List of expected SAP mounts based on task above.
118+
__sap_mount_regex: "^(/sapmnt|/usr/sap/trans|/lss/shared|/hana/.*|/software)$"
119+
120+
__non_sap_mounts: >-
121+
{{ __sap_storage_setup_fact_related_directories
122+
| rejectattr('mountpoint', 'search', __sap_mount_regex)
123+
| map(attribute='mountpoint')
124+
| list }}
125+
when:
126+
# Only run this if the list wasn't expanded (ignoring the complex /usr/sap logic)
127+
- __sap_storage_setup_fact_related_directories | length == 1
128+
- __non_sap_mounts | length > 0
129+
130+
109131
# Put temporary tasks inside a block which will make sure
110132
# that even in case of failure the temporary mountpoint will be removed
111133
- name: SAP Storage Setup - Temporary steps for NFS directory structure
112134
### Block global parameters
113135
# Stop execution of tasks after this block for any host, if one host
114136
# failed a task in this block.
115137
any_errors_fatal: true
138+
# Don't execute temporary mount tasks if there is no valid NFS mount point.
139+
when: __sap_storage_setup_fact_related_directories | length > 0
116140
block:
117141

118142
- name: SAP Storage Setup - ({{ nfs_item.name }}) Create directory as temporary mountpoint
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
# SPDX-License-Identifier: Apache-2.0
2+
---
3+
4+
# List of directories that must never be used as mount points for NFS filesystems,
5+
# to avoid critical operating system failures.
6+
__sap_storage_setup_nfs_forbidden_paths:
7+
# Standard Root Filesystem Hierarchy
8+
- ''
9+
- '/'
10+
- '/bin'
11+
- '/boot'
12+
- '/dev'
13+
- '/etc'
14+
- '/home'
15+
- '/lib'
16+
- '/lib64'
17+
- '/media'
18+
- '/proc'
19+
- '/root'
20+
- '/run'
21+
- '/sbin'
22+
- '/sys'
23+
- '/tmp'
24+
- '/var'
25+
- '/var/tmp'
26+
27+
# UsrMerge Hierarchy (e.g. SLES 16)
28+
- '/usr'
29+
- '/usr/bin'
30+
- '/usr/etc'
31+
- '/usr/lib'
32+
- '/usr/lib64'
33+
- '/usr/local'
34+
- '/usr/sbin'

roles/sap_swpm/meta/collection-requirements.yml

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,4 @@
22
---
33

44
collections:
5-
- name: ansible.posix
65
- name: community.general

roles/sap_swpm/tasks/post_install/update_firewall.yml

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

roles/sap_swpm/tasks/pre_install/update_firewall.yml

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

0 commit comments

Comments
 (0)