deploy/ansible/roles-sap-os/2.6-sap-mounts/tasks/main.yaml (397 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
---
# /*---------------------------------------------------------------------------8
# | |
# | Perform the Disk system mounts |
# | |
# +------------------------------------4--------------------------------------*/
- name: "1.5 Disk setup - Load the disk configuration settings"
ansible.builtin.include_vars: disks_config.yml
when: logical_volumes is not defined
- name: "2.6 SAP Mounts: - Show MULTI_SIDS"
ansible.builtin.debug:
var: MULTI_SIDS
verbosity: 4
- name: "2.6 SAP Mounts: - set run time facts"
ansible.builtin.include_tasks:
file: "2.6-set_runtime_facts.yaml"
- name: "2.6 SAP Mounts: - Check if the shared disk exists"
ansible.builtin.set_fact:
shareddisk: "{{ disks | selectattr('host', 'defined') |
selectattr('host', 'equalto', inventory_hostname) |
selectattr('type', 'equalto', 'shared') |
map(attribute='type') | sort | unique |
list | length }}"
- name: "2.6 SAP Mounts: - Check if the backup disk exists"
ansible.builtin.set_fact:
backupdisks_count: "{{ disks | selectattr('host', 'defined') |
selectattr('host', 'equalto', inventory_hostname) |
selectattr('type', 'equalto', 'backup') |
map(attribute='type') | sort | unique |
list | length | int }}"
- name: "2.6 SAP Mounts: - choose the shared disk"
ansible.builtin.set_fact:
sharedpath: "{% if shareddisk == '1' %}/dev/vg_hana_shared/lv_hana_shared\
{% else %}/dev/vg_sap/lv_hana_shared{% endif %}"
- name: "2.6 SAP Mounts: - Set the NFS Server name list"
ansible.builtin.set_fact:
nfs_server_temp: "{{ nfs_server_temp | default([]) + [item] }}"
with_items:
- "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_SCS') }}"
- "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_DB') }}"
- name: "2.6 SAP Mounts: - Set the NFS Server name"
ansible.builtin.set_fact:
nfs_server: "{{ nfs_server_temp | first }}"
- name: "2.6 SAP Mounts: - Set the usr/sap/install path"
ansible.builtin.set_fact:
usr_sap_install_mount_point: "{% if NFS_provider in ['AFS', 'ANF'] %}{% if usr_sap_install_mountpoint is defined %}{{ usr_sap_install_mountpoint }}{% else %}{{ nfs_server }}:{{ target_media_location }}{% endif %}{% else %}{{ nfs_server }}:{{ target_media_location }}{% endif %}"
- name: "2.6 SAP Mounts: - Show info"
ansible.builtin.debug:
msg:
- "NFS Provider: {{ NFS_provider }}"
- "Install path: {{ usr_sap_install_mount_point }}"
- "Shared path: {{ sharedpath }}"
# Mount Filesystems
- name: "2.6 SAP Mounts: - Check if the 'sap' disk exists"
ansible.builtin.set_fact:
sap_disk_exists: "{{ disks | selectattr('host', 'defined') |
selectattr('host', 'equalto', inventory_hostname) |
selectattr('type', 'equalto', 'sap') |
map(attribute='type') | sort | unique |
list | length }}"
- name: "2.6 SAP Mounts: - Mount local sap file systems"
ansible.posix.mount:
src: /dev/vg_sap/lv_usrsap
path: /usr/sap
fstype: xfs
opts: "{{ logical_volumes | selectattr('lv', 'equalto', 'lv_usrsap') | map(attribute='mntopts') | first | default('defaults') }}"
state: mounted
when:
- sap_disk_exists == '1'
- node_tier != 'observer'
- ((node_tier == 'app' and usr_sap_mountpoint is undefined) or node_tier != 'app')
- name: "2.6 SAP Mounts: - Mount local kdump file path to save vmcore"
ansible.posix.mount:
src: /dev/vg_{{ node_tier | lower }}_kdump/lv_{{ node_tier | lower }}_kdump
path: /usr/crash
fstype: xfs
opts: defaults
state: mounted
when:
- use_fence_kdump
- ansible_os_family | upper == 'REDHAT'
- node_tier in ['scs','hana','db2','ers']
- name: "2.6 SAP Mounts: - Mount local file systems (shared)"
ansible.posix.mount:
src: "{{ sharedpath }}"
path: /hana/shared
fstype: xfs
opts: "{{ logical_volumes | selectattr('lv', 'equalto', 'lv_hana_shared') | map(attribute='mntopts') | first | default('defaults') }}"
state: mounted
when:
- node_tier == 'hana'
- hana_shared_mountpoint is undefined
- name: "2.6 SAP Mounts: - Mount local file systems (backup)"
ansible.posix.mount:
src: /dev/vg_hana_backup/lv_hana_backup
path: '{{ hana_backup_path }}'
fstype: xfs
opts: "{{ logical_volumes | selectattr('lv', 'equalto', 'lv_hana_backup') | map(attribute='mntopts') | first | default('defaults') }}"
state: mounted
when:
- node_tier == 'hana'
- (backupdisks_count | int) > 0
- name: "2.6 SAP Mounts: - Mount local file systems (backup)"
ansible.builtin.file:
path: /hana/data/backup
state: directory
mode: 0755
when:
- node_tier == 'hana'
- (backupdisks_count | int) == 0
- name: "2.6 SAP Mounts: - Mount local file systems (hana data)"
ansible.posix.mount:
src: /dev/vg_hana_data/lv_hana_data
path: /hana/data
fstype: xfs
opts: "{{ logical_volumes | selectattr('lv', 'equalto', 'lv_hana_data') | map(attribute='mntopts') | first | default('defaults') }}"
state: mounted
when:
- node_tier == 'hana'
- hana_data_mountpoint is undefined
- name: "2.6 SAP Mounts: - Mount local file systems (hana log)"
ansible.posix.mount:
src: /dev/vg_hana_log/lv_hana_log
path: /hana/log
fstype: xfs
opts: "{{ logical_volumes | selectattr('lv', 'equalto', 'lv_hana_log') | map(attribute='mntopts') | first | default('defaults') }}"
state: mounted
when:
- node_tier == 'hana'
- hana_log_mountpoint is undefined
- name: "2.6 SAP Mounts: Create SAP Trans"
ansible.builtin.file:
path: /usr/sap/trans
state: directory
mode: '0755'
when:
- node_tier == 'scs'
- sap_trans is undefined
# Mount SAP TransFilesystems
- name: Mount Filesystems block
block:
- name: "2.6 SAP Mounts: Mount SAP Transport Filesystems when not using external NFS (all app tier)"
ansible.posix.mount:
src: "{{ item.src }}"
path: "{{ item.path }}"
fstype: "{{ item.type }}"
opts: defaults
state: mounted
loop:
- { type: 'nfs4', src: '{{ nfs_server }}:/usr/sap/trans', path: '/usr/sap/trans' }
when:
- tier == 'sapos'
- node_tier in ['pas', 'app']
- sap_trans is undefined
- nfs_server != ansible_hostname
- name: "2.6 SAP Mounts: - Debug"
ansible.builtin.debug:
var: usr_sap_install_mountpoint
- name: "2.6 SAP Mounts: - Mount local install file system on SCS (when not using AFS)"
ansible.posix.mount:
src: /dev/vg_sap/lv_usrsapinstall
path: "{{ target_media_location }}"
fstype: xfs
opts: defaults
state: mounted
when:
- "'scs' in supported_tiers"
- usr_sap_install_mountpoint is undefined
- not is_executed_by_acss or ( is_executed_by_acss and ( ansible_play_hosts_all | length == 1 ) )
- name: "1.5 Disk setup - Check if installation root directory exists"
ansible.builtin.stat:
path: "{{ tmp_directory }}"
register: tmp_dir
- name: "1.5 Disk setup - Ensure installation root directory exists"
ansible.builtin.file:
path: "{{ tmp_directory }}"
state: directory
mode: '0775'
when: not tmp_dir.stat.isdir
# Mount Filesystems
- name: "2.6 SAP Mounts: - Mount local sapmnt on (scs) {{ ansible_hostname }}"
ansible.posix.mount:
src: /dev/vg_sap/lv_sapmnt
path: /sapmnt/{{ sap_sid | upper }}
fstype: xfs
opts: defaults
state: mounted
when:
- tier == 'sapos'
- sap_mnt is undefined
- MULTI_SIDS is undefined
- sap_disk_exists == '1'
- "'scs' in supported_tiers"
- name: "2.6 SAP Mounts: - Create SAP Directories (sapmnt)"
ansible.builtin.file:
owner: "{% if platform == 'SYBASE' %}{{ asesidadm_uid }}{% else %}{{ sidadm_uid }}{% endif %}"
group: sapsys
mode: '0755'
path: /sapmnt/{{ sap_sid | upper }}
state: directory
when:
- node_tier not in ['oracle-asm', 'hana', 'observer']
- name: "2.6 SAP Mounts: - sapmnt"
block:
- name: "2.6 SAP Mounts: - Mount sapmnt file system when not using external NFS (all app tier)"
ansible.posix.mount:
src: "{{ nfs_server }}:/sapmnt/{{ sap_sid | upper }}"
path: /sapmnt/{{ sap_sid | upper }}
fstype: nfs4
opts: defaults
state: mounted
when:
- tier == 'sapos'
- node_tier in ['pas', 'app', 'ers', 'oracle', 'db2', 'sybase']
- sap_mnt is undefined
- MULTI_SIDS is undefined
- nfs_server != ansible_hostname
rescue:
- name: "2.6 SAP Mounts: - Re-mount File systems when not using external NFS (app & pas)"
ansible.builtin.debug:
msg: Trying to remount sap_mnt
- name: "2.6 SAP Mounts: - Mount sapmnt file system when not using external NFS (all app tier)"
ansible.posix.mount:
src: "{{ nfs_server }}:/sapmnt/{{ sap_sid | upper }}"
path: /sapmnt/{{ sap_sid | upper }}
fstype: nfs4
opts: defaults
state: remounted
when:
- tier == 'sapos'
- node_tier in ['pas', 'app', 'ers', 'oracle', 'db2', 'sybase']
- sap_mnt is undefined
- MULTI_SIDS is undefined
- nfs_server != ansible_hostname
- name: "2.6 SAP Mounts: - Mount Install folder when not using AFS"
ansible.posix.mount:
src: "{{ usr_sap_install_mount_point }}"
path: "{{ target_media_location }}"
fstype: nfs4
opts: defaults
state: mounted
when:
- tier == 'sapos'
- node_tier != 'scs'
- "'scs' not in supported_tiers"
- usr_sap_install_mountpoint is not defined
- not is_executed_by_acss or (is_executed_by_acss and (is_executed_by_acss and ( ansible_play_hosts_all | length == 1) ))
# Mount File systems for SCS server in Multi-SID installations
- name: "2.6 SAP Mounts: - Mount local sapmnt (scs) for oracle shared home installation"
block:
- name: "2.6 SAP Mounts: - Mount local sapmnt (scs) for oracle shared home installation"
ansible.posix.mount:
src: "{{ item.src }}"
path: "{{ item.path }}"
fstype: "{{ item.type }}"
opts: defaults
state: mounted
loop:
- { type: 'xfs', src: '/dev/vg_sap/lv_sapmnt', path: '/sapmnt' }
- { type: 'xfs', src: '/dev/vg_sap/lv_usrsap', path: '/usr/sap'}
# Create Folders under sapmnt whilst using Local disk for Multi-SID installation.
- name: "2.6 SAP Mounts: - Create file systems under sapmnt for oracle shared home installation"
ansible.builtin.file:
path: /sapmnt/{{ item.sid }}
owner: "{{ item.sidadm_uid }}"
group: sapsys
state: directory
mode: '0644'
loop: "{{ MULTI_SIDS }}"
when:
- tier == 'sapos'
- node_tier == 'scs'
- MULTI_SIDS is defined
- sap_mnt is undefined
- name: "2.6 SAP Mounts: - Mount SAP File systems sapmnt for oracle shared home installation"
ansible.posix.mount:
src: "{{ nfs_server }}:/sapmnt/{{ item.sid | upper }}"
path: /sapmnt/{{ item.sid | upper }}
fstype: nfs4
opts: defaults
state: mounted
vars:
# Get all the hostnames in <SID>_SCS group and return only the first hostname
nfs_server: "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_SCS') | first }}"
loop: "{{ MULTI_SIDS }}"
when:
- tier == 'sapos'
- MULTI_SIDS is defined
- node_tier != 'scs'
- node_tier != 'oracle-multi-sid'
- sap_mnt is undefined
# Import this task only if the any of the AFS mountpoints are defined
- name: "2.6 SAP Mounts: - Import AFS tasks"
ansible.builtin.import_tasks: 2.6.0-afs-mounts.yaml
when:
- sap_mnt is defined or sap_trans is defined or usr_sap_install_mountpoint is defined
- not use_simple_mount
- NFS_provider in ['AFS', 'NONE']
- name: "2.6 SAP Mounts: - Import AFS simple mount tasks"
ansible.builtin.import_tasks: 2.6.7-afs-mounts-simplemount.yaml
when:
- use_simple_mount is defined and use_simple_mount
- sap_mnt is defined or sap_trans is defined or usr_sap_install_mountpoint is defined
- NFS_provider == 'AFS'
# Import this task only if the sap_mnt is defined, i.e. ANF is used
- name: "2.6 SAP Mounts: - Import ANF tasks"
ansible.builtin.import_tasks: 2.6.1-anf-mounts.yaml
when:
- sap_mnt is defined or sap_trans is defined or usr_sap_install_mountpoint is defined
- not use_simple_mount
- NFS_provider == 'ANF'
# Update : Deprecated as the scale out anf mount code functionality is now integrated into 2.6.1 and 2.6.8
# This will be removed in the next release, left here for tracing and documentation
# Import this task only if database_scale_out is defined. Implies that sap_mnt is defined, i.e. ANF is used
# - name: "2.6 SAP Mounts: - Import ANF tasks for Scale-Out"
# ansible.builtin.import_tasks: 2.6.1.2-anf-mounts-scaleout.yaml
# when:
# - NFS_provider == 'ANF'
# - database_scale_out is defined
# - database_scale_out
# - sap_mnt is defined or sap_trans is defined or usr_sap_install_mountpoint is defined
# Import this task only if the tier is ora.
- name: "2.6 SAP Mounts: - Import Oracle tasks"
ansible.builtin.import_tasks: "2.6.2-oracle-mounts.yaml"
when: node_tier == "oracle"
# Import this task only if the tier is ora for oracle-asm.
- name: "2.6 SAP Mounts: - Import Oracle ASM pre-requisite tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-asm-prereq.yaml"
when: node_tier == "oracle-asm"
# Import this task only if the tier is ora for oracle-asm.
- name: "2.6 SAP Mounts: - Import Oracle ASM tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-asm-mounts.yaml"
when: node_tier == "oracle-asm"
- name: "2.6 SAP Mounts: - Import Oracle observer tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-observer.yaml"
when: node_tier == "observer"
- name: "2.6 SAP Mounts: - Import Oracle shared home tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-multi-sid.yaml"
when:
- node_tier == "oracle-multi-sid"
- node_tier != "oracle-asm"
# Import this task only if the node_tier is db2.
- name: "2.6 SAP Mounts: - Import DB2 tasks"
ansible.builtin.import_tasks: "2.6.4-db2-mounts.yaml"
when: node_tier == "db2"
# Import this task only if the node_tier is ase.
- name: "2.6 SAP Mounts: - Import SYBASE tasks"
ansible.builtin.import_tasks: "2.6.6-sybase-mounts.yaml"
when: node_tier == "sybase"
# Update : Deprecated as the scale out anf mount code functionality is now integrated into 2.6.1 and 2.6.8
# This will be removed in the next release, left here for tracing and documentation
# Import this task only if database_scale_out is defined. Implies that sap_mnt is defined, i.e. ANF is used
# - name: "2.6 SAP Mounts: - Import ANF tasks for Scale-Out"
# ansible.builtin.import_tasks: 2.6.1.2-anf-mounts-scaleout.yaml
# when:
# - NFS_provider == 'ANF'
# - database_scale_out is defined
# - database_scale_out
# - sap_mnt is defined or sap_trans is defined or usr_sap_install_mountpoint is defined
# Import this task only if the tier is ora.
- name: "2.6 SAP Mounts: - Import Oracle tasks"
ansible.builtin.import_tasks: "2.6.2-oracle-mounts.yaml"
when: node_tier == "oracle"
# Import this task only if the tier is ora for oracle-asm.
- name: "2.6 SAP Mounts: - Import Oracle ASM pre-requisite tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-asm-prereq.yaml"
when: node_tier == "oracle-asm"
# Import this task only if the tier is ora for oracle-asm.
- name: "2.6 SAP Mounts: - Import Oracle ASM tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-asm-mounts.yaml"
when: node_tier == "oracle-asm"
- name: "2.6 SAP Mounts: - Import Oracle observer tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-observer.yaml"
when:
- node_tier == "observer"
- platform != "HANA"
# This is to prevent conflict between HANA scaleout-hsr and oracle DB as they both share observer, but only one platform can be deployed at a time
- name: "2.6 SAP Mounts: - Import Oracle shared home tasks"
ansible.builtin.import_tasks: "2.6.3-oracle-multi-sid.yaml"
when:
- node_tier == "oracle-multi-sid"
- node_tier != "oracle-asm"
# Import this task only if the node_tier is db2.
- name: "2.6 SAP Mounts: - Import DB2 tasks"
ansible.builtin.import_tasks: "2.6.4-db2-mounts.yaml"
when: node_tier == "db2"
# Import this task only if the node_tier is ase.
- name: "2.6 SAP Mounts: - Import SYBASE tasks"
ansible.builtin.import_tasks: "2.6.6-sybase-mounts.yaml"
when: node_tier == "sybase"
# Update : Deprecated as the scale out anf mount code functionality is now integrated into 2.6.1 and 2.6.8
# This will be removed in the next release, left here for tracing and documentation
# Import this task only if database_scale_out is defined. Implies that sap_mnt is defined, i.e. ANF is used
# - name: "2.6 SAP Mounts: - Import ANF tasks for Scale-Out"
# ansible.builtin.import_tasks: 2.6.1.2-anf-mounts-scaleout.yaml
# when:
# - NFS_provider == 'ANF'
# - database_scale_out is defined
# - database_scale_out
# - sap_mnt is defined or sap_trans is defined or usr_sap_install_mountpoint is defined
- name: "2.6 SAP Mounts: - Import ANF tasks"
ansible.builtin.import_tasks: 2.6.8-anf-mounts-simplemount.yaml
when:
- use_simple_mount is defined and use_simple_mount
- sap_mnt is defined or sap_trans is defined or usr_sap_install_mountpoint is defined
- NFS_provider == 'ANF'
# Import NFS mounts and permissions changes for oracle and oracle-asm installation.
- name: "2.6 SAP Mounts: - Import Oracle NFS tasks"
ansible.builtin.import_tasks: "2.6.6-oracle-nfs-mounts.yaml"
when:
- node_tier in ['oracle','oracle-asm','observer']
- name: "2.6 SAP Mounts: - Set permissions"
when: node_tier == "hana"
block:
- name: "2.6 SAP Mounts: - Set permissions on hana folders"
ansible.builtin.file:
owner: "{{ db_sid | lower }}adm"
group: sapsys
state: directory
recurse: true
path: "{{ item.path }}"
mode: '{{ item.mode }}'
loop:
- { mode: '0755', path: "{{ hana_data_basepath }}" }
- { mode: '0755', path: "{{ hana_log_basepath }}" }
- { mode: '0755', path: '/hana/shared' }
rescue:
- name: "2.6 SAP Mounts: - Set permissions on hana folders"
ansible.builtin.file:
owner: '{{ hdbadm_uid }}'
group: sapsys
state: directory
recurse: true
path: "{{ item.path }}"
mode: '{{ item.mode }}'
loop:
- { mode: '0755', path: "{{ hana_data_basepath }}" }
- { mode: '0755', path: "{{ hana_log_basepath }}" }
- { mode: '0755', path: '/hana/shared' }
# Import custom NFS mounts.
- name: "2.6 Custom Mounts"
ansible.builtin.include_tasks: "2.6.9-custom-mounts.yaml"
loop: "{{ custom_mounts }}"
loop_control:
loop_var: custom_mount
when:
- custom_mounts is defined
# Call SAP Note 3119751 to ensure create symlink after the mounts.
- name: "Calling SAP Note 3119751"
ansible.builtin.include_tasks: roles-sap-os/2.10-sap-notes/tasks/2.10.3119751.yaml
when:
- platform == 'HANA'
- distribution_id in ['redhat8', 'redhat9']
...