deploy/ansible/roles-sap-os/2.6-sap-mounts/tasks/2.6.0-afs-mounts.yaml (374 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
---
# /*---------------------------------------------------------------------------8
# | |
# | Perform the AFS system mounts |
# | |
# +------------------------------------4--------------------------------------*/
- name: "AFS Mount: Define this SID"
ansible.builtin.set_fact:
this_sid:
{
'sid': '{{ sap_sid | upper }}',
'dbsid_uid': '{{ hdbadm_uid }}',
'sidadm_uid': '{% if platform == "SYBASE" %}{{ asesidadm_uid }}{% else %}{{ sidadm_uid }}{% endif %}',
'ascs_inst_no': '{{ scs_instance_number }}',
'pas_inst_no': '{{ pas_instance_number }}',
'app_inst_no': '{{ app_instance_number }}'
}
- name: "AFS Mount: Create list of all_sap_mounts to support "
ansible.builtin.set_fact:
all_sap_mounts: "{% if MULTI_SIDS is defined %}{{ MULTI_SIDS }}{% else %}{{ all_sap_mounts | default([]) + [this_sid] }}{% endif %}"
- name: "AFS Mount: Get the Server name list"
ansible.builtin.set_fact:
first_server_temp: "{{ first_server_temp | default([]) + [item] }}"
with_items:
- "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_SCS') }}"
- "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_DB') }}"
- name: "AFS Mount: Set the NFSmount options"
ansible.builtin.set_fact:
afs_mnt_options: 'noresvport,vers=4,minorversion=1,sec=sys'
- name: "AFS Mount: Create list of all_sap_mounts to support"
ansible.builtin.debug:
msg:
- "List of all the SAP mounts: {{ all_sap_mounts }}"
- "First server: {{ first_server_temp }}"
verbosity: 2
- name: "AFS Mount: Create configuration file
with additional optimization settings"
ansible.builtin.blockinfile:
path: /etc/sysctl.d/ms-az.conf
backup: true
create: true
mode: 0644
marker: "# {mark} HANA AFS optimizations"
block: |
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv4.tcp_max_syn_backlog = 16348
net.ipv4.conf.all.rp_filter = 0
sunrpc.tcp_slot_table_entries = 128
vm.swappiness=10
when:
- node_tier == 'hana'
# /*---------------------------------------------------------------------------8
# | |
# | Prepare for the sap_mnt mounts |
# | Create temporary directory structure |
# | Mount the share, create the directory structure on share |
# | Unmount and clean up temporary directory structure |
# | |
# +------------------------------------4--------------------------------------*/
- name: "AFS Mount: Create local directories"
block:
- name: "AFS Mount: sap_mnt"
block:
- name: "AFS Mount: Create /saptmp"
ansible.builtin.file:
path: "/saptmp"
state: directory
group: sapsys
mode: 0755
# Mount Filesystem on AFS
# This is needed so that we can create the correct directory
- name: "AFS Mount: sap_mnt (preparation)"
block:
- name: "AFS Mount: sap_mnt (preparation)"
ansible.posix.mount:
src: "{{ sap_mnt }}"
path: "/saptmp"
fstype: "nfs4"
opts: "{{ afs_mnt_options }}"
state: mounted
rescue:
- name: "Rescue - AFS Mount: sap_mnt (preparation) - logging"
ansible.builtin.debug:
msg: "Rescue - AFS Mount: sap_mnt (preparation)"
- name: "Rescue - AFS Mount: sap_mnt - Pause for 5 seconds"
ansible.builtin.pause:
seconds: 15
- name: "Rescue - AFS Mount: sap_mnt (preparation)"
ansible.posix.mount:
src: "{{ sap_mnt }}"
path: "/saptmp"
fstype: "nfs4"
opts: "{{ afs_mnt_options }}"
state: mounted
- name: "AFS Mount: Create SAP Directories (AFS)"
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: '{% if platform == "SYBASE" %}{{ asesidadm_uid }}{% else %}{{ sapadm_uid }}{% endif %}'
group: sapsys
mode: 0755
loop:
- { path: '/saptmp/usrsap{{ sap_sid | upper }}' }
- { path: '/saptmp/usrsap{{ sap_sid | upper }}{{ instance_type | lower }}{{ scs_instance_number }}' }
- { path: '/saptmp/usrsap{{ sap_sid | upper }}ers{{ ers_instance_number }}' }
- { path: '/saptmp/usrsap{{ sap_sid | upper }}sys' }
- name: "AFS Mount: Create SAP Directories (AFS)"
ansible.builtin.file:
path: "/saptmp/sapmnt{{ item.sid | upper }}"
state: directory
owner: '{{ item.sidadm_uid }}'
group: sapsys
mode: 0755
loop: "{{ all_sap_mounts }}"
- name: "AFS Mount: Unmount file systems (sapmnt)"
ansible.posix.mount:
src: "{{ sap_mnt }}"
path: "/saptmp"
state: unmounted
- name: "AFS Mount: Delete locally created SAP Directories (sapmnt)"
ansible.builtin.file:
path: "{{ item.path }}"
state: absent
loop:
- { path: '/saptmp/usrsap{{ sap_sid | upper }}{{ instance_type | lower }}{{ scs_instance_number }}' }
- { path: '/saptmp/usrsap{{ sap_sid | upper }}ers{{ ers_instance_number }}' }
- { path: '/saptmp/usrsap{{ sap_sid | upper }}sys' }
- { path: '/saptmp/usrsap{{ sap_sid | upper }}' }
- name: "AFS Mount: Remove /saptmp/sapmnt (AFS)"
ansible.builtin.file:
path: "/saptmp/sapmnt{{ item.sid | upper }}"
state: absent
loop: "{{ all_sap_mounts }}"
- name: "AFS Mount: Cleanup fstab and directory (sapmnt)"
ansible.posix.mount:
src: "{{ sap_mnt }}"
path: "/saptmp"
fstype: "nfs4"
opts: "{{ afs_mnt_options }}"
state: absent
when:
- sap_mnt is defined
when:
- tier == 'sapos'
- "'scs' in supported_tiers"
- sap_mnt is defined
- name: "AFS Mount: install"
ansible.builtin.include_tasks: 2.6.0.1-afs-mount.yaml
loop:
- {
'type': 'install',
'temppath': 'sapinstall',
'folder': '{{ bom_base_name }}',
'mount': '{{ usr_sap_install_mountpoint }}',
'opts': 'rw,hard,rsize=1048576,wsize=1048576,noresvport,actimeo=60,vers=4,minorversion=1,sec=sys',
'path': '/usr/sap/install',
'owner': '{{ sidadm_uid }}',
'permissions': '0777',
'set_chattr_on_dir': false,
'target_nodes': ['all'],
'create_temp_folders': true
}
vars:
primary_host: "{{ first_server_temp | first }}"
when:
- tier == 'sapos'
- usr_sap_install_mountpoint is defined
- name: "AFS Mount: sap_mnt"
block:
- name: "AFS Mount: Create SAP Directories (sapmnt)"
ansible.builtin.file:
owner: '{{ item.sidadm_uid }}'
group: sapsys
mode: 0755
path: "/sapmnt/{{ item.sid }}"
state: directory
register: is_created_now
loop: "{{ all_sap_mounts }}"
- name: "AFS Mount: Change attribute only when we create SAP Directories (sapmnt)"
ansible.builtin.file:
path: "{{ item.item.path }}"
state: directory
mode: 0755
attr: i+
loop: "{{ is_created_now.results }}"
when:
- item.item is changed
register: set_immutable_attribute
when:
- tier == 'sapos'
- node_tier not in ['hana' , 'observer']
- sap_mnt is defined
# /*---------------------------------------------------------------------------8
# | |
# | Perform the sap_mnt mounts |
# | Create directories and make them immutable |
# | |
# +------------------------------------4--------------------------------------*/
- name: "AFS Mount: sap_mnt (scs & ers)"
block:
- name: "AFS Mount: Create SAP Directories (scs & ers)"
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
owner: '{% if platform == "SYBASE" %}{{ asesidadm_uid }}{% else %}{{ sapadm_uid }}{% endif %}'
group: sapsys
mode: 0755
loop:
- { path: '/usr/sap/{{ sap_sid | upper }}' }
- { path: '/usr/sap/{{ sap_sid | upper }}/SYS' }
- { path: '/usr/sap/{{ sap_sid | upper }}/{{ instance_type | upper }}{{ scs_instance_number }}' }
- { path: '/usr/sap/{{ sap_sid | upper }}/ERS{{ ers_instance_number }}' }
register: is_created_now3
- name: "AFS Mount: Change attribute only when we create SAP Directories (scs & ers)"
ansible.builtin.file:
path: "{{ item.item.path }}"
state: directory
mode: 0755
attr: i+
loop: "{{ is_created_now3.results }}"
when:
- item.item is changed
register: set_immutable_attribute
when:
- tier == 'sapos'
- "'scs' in supported_tiers or 'ers' in supported_tiers "
- sap_mnt is defined
- MULTI_SIDS is undefined
- name: "AFS Mount Debug"
ansible.builtin.debug:
msg:
- "{{ not scs_high_availability }}"
- "{{ node_tier != 'hana' }}"
- "{{ sap_mnt is defined }}"
- "{{ MULTI_SIDS is undefined }}"
verbosity: 4
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} - Standalone"
block:
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} - Standalone"
ansible.posix.mount:
src: "{{ item.src }}"
path: "{{ item.path }}"
fstype: "{{ item.type }}"
opts: "{{ afs_mnt_options }}"
state: mounted
loop:
- { type: 'nfs4', src: '{{ sap_mnt }}/sapmnt{{ sap_sid | upper }}', path: '/sapmnt/{{ sap_sid | upper }}' }
rescue:
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} - Standalone"
ansible.posix.mount:
src: "{{ item.src }}"
path: "{{ item.path }}"
fstype: "{{ item.type }}"
opts: "{{ afs_mnt_options }}"
state: unmounted
loop:
- { type: 'nfs4', src: '{{ sap_mnt }}/sapmnt{{ sap_sid | upper }}', path: '/sapmnt/{{ sap_sid | upper }}' }
- name: "AFS Mount: Pause for 15 seconds"
ansible.builtin.pause:
seconds: 15
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} - Standalone"
ansible.builtin.debug:
msg: "Rescue - AFS Mount: sapmnt/{{ sap_sid | upper }} - Standalone"
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} - Standalone"
ansible.posix.mount:
src: "{{ item.src }}"
path: "{{ item.path }}"
fstype: "{{ item.type }}"
opts: "{{ afs_mnt_options }}"
state: mounted
loop:
- { type: 'nfs4', src: '{{ sap_mnt }}/sapmnt{{ sap_sid | upper }}', path: '/sapmnt/{{ sap_sid | upper }}' }
when:
- not scs_high_availability
- node_tier != 'hana'
- sap_mnt is defined
- MULTI_SIDS is undefined
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} - Standalone MULTI_SIDS"
become: true
become_user: root
ansible.posix.mount:
src: "{{ sap_mnt }}/sapmnt{{ item.sid }}"
path: "/sapmnt/{{ item.sid }}"
fstype: 'nfs4'
opts: "{{ afs_mnt_options }}"
state: mounted
loop: "{{ MULTI_SIDS }}"
when:
- not scs_high_availability
- sap_mnt is defined
- MULTI_SIDS is defined
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} HA"
block:
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} HA"
ansible.posix.mount:
src: "{{ sap_mnt }}/sapmnt{{ sap_sid | upper }}"
path: "/sapmnt/{{ sap_sid | upper }}"
fstype: nfs4
opts: "{{ afs_mnt_options }}"
state: mounted
rescue:
- name: "AFS Mount: Pause for 15 seconds"
ansible.builtin.pause:
seconds: 15
- name: "AFS Mount: sapmnt/{{ sap_sid | upper }} HA"
ansible.posix.mount:
src: "{{ sap_mnt }}/sapmnt{{ sap_sid | upper }}"
path: "/sapmnt/{{ sap_sid | upper }}"
fstype: nfs4
opts: "{{ afs_mnt_options }}"
state: mounted
when:
- scs_high_availability
- node_tier != 'hana'
- sap_mnt is defined
- name: "AFS Mount: usr/sap/{{ sap_sid | upper }}/SYS"
block:
- name: "AFS Mount: usr/sap/{{ sap_sid | upper }}/SYS"
ansible.posix.mount:
src: "{{ item.src }}"
path: "{{ item.path }}"
fstype: "{{ item.type }}"
opts: 'rw,hard,rsize=65536,wsize=65536,sec=sys,vers=4.1,tcp'
state: mounted
register: sys_mounted
loop:
- { type: 'nfs4', src: '{{ sap_mnt }}/usrsap{{ sap_sid | upper }}sys', path: '/usr/sap/{{ sap_sid | upper }}/SYS' }
rescue:
- name: "AFS Mount: Pause for 15 seconds"
ansible.builtin.pause:
seconds: 15
- name: "AFS Mount: usr/sap/{{ sap_sid | upper }}/SYS"
ansible.builtin.debug:
msg: "Rescue - AFS Mount: usr/sap/{{ sap_sid | upper }}/SYS"
- name: "AFS Mount: Debug"
ansible.builtin.debug:
var: sys_mounted
- name: "AFS Mount: usr/sap/{{ sap_sid | upper }}/SYS"
ansible.posix.mount:
src: "{{ item.src }}"
path: "{{ item.path }}"
fstype: "{{ item.type }}"
opts: "{{ afs_mnt_options }}"
state: mounted
loop:
- { type: 'nfs4', src: '{{ sap_mnt }}/usrsap{{ sap_sid | upper }}sys', path: '/usr/sap/{{ sap_sid | upper }}/SYS' }
when:
- scs_high_availability
- node_tier in ['scs','ers']
- sap_mnt is defined
tags:
- sap_app_ha_sys_mount
- name: "AFS Mount: sap_trans"
ansible.builtin.include_tasks: 2.6.0.1-afs-mount.yaml
loop:
- {
'type': 'trans',
'temppath': 'saptrans',
'mount': '{{ sap_trans }}',
'opts': '{{ afs_mnt_options }}',
'path': '/usr/sap/trans',
'owner': "root",
'permissions': '0775',
'set_chattr_on_dir': false,
'target_nodes': ['app','pas', 'ers', 'scs'],
'create_temp_folders': false
}
vars:
primary_host: "{{ first_server_temp | first }}"
when:
- tier == 'sapos'
- sap_trans is defined
# Scale out - shared nothing configuration code to support AFS based /hana/shared mount
- name: "AFS Mount: Scale out hana_shared"
ansible.builtin.include_tasks: 2.6.0.1-afs-mount.yaml
loop:
- {
'type': 'shared',
'temppath': 'shared',
'mount': "{% if site | default('SITE1') == 'SITE1' %}{{ hana_shared_mountpoint[0] }}{% else %}{{ hana_shared_mountpoint[1] }}{% endif %}",
'opts': 'vers=4,minorversion=1,sec=sys',
'path': '/hana/shared',
'owner': '{{ sidadm_uid }}',
'permissions': '0775',
'set_chattr_on_dir': false,
'target_nodes': ['hana'],
'create_temp_folders': false
}
vars:
primary_host: "{{ ansible_hostname }}"
when:
- database_scale_out
- database_high_availability
- hana_shared_mountpoint is defined
- hana_shared_mountpoint | length == 2
...