deploy/ansible/roles-db/4.0.3-hdb-install-scaleout/tasks/main.yaml (883 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# /*---------------------------------------------------------------------------8
# | |
# | Perform the SAP DB Instance installation for scale out |
# | SAP: Register BOM |
# | create .params directory |
# | deploy db install template |
# | deploy hdblcm password file |
# | |
# +------------------------------------4--------------------------------------*/
# /*---------------------------------------------------------------------------8
# | |
# | This code contains references to terms that Microsoft no longer uses. |
# | When these terms are removed from the SAP software and documentation, |
# | we’ll remove them from this codebase. |
# | |
# +------------------------------------4--------------------------------------*/
---
# +------------------------------------4--------------------------------------*/
- name: "4.0.3 - SAP HANA SCALE OUT: Set BOM facts"
ansible.builtin.set_fact:
sap_inifile: "hdbserver_{{ virtual_host }}_{{ sap_sid }}_install.rsp"
dir_params: "{{ tmp_directory }}/.params"
sap_custom_config: "global.ini"
- name: "4.0.3 - SAP HANA SCALE OUT: Create list of all db hosts"
ansible.builtin.set_fact:
db_hosts: "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_DB') }}"
# 0x) Create hidden directory for parameter files
- name: "4.0.3 - SAP HANA SCALE OUT: Create directories"
ansible.builtin.file:
path: "{{ item.path }}"
state: directory
mode: '{{ item.mode }}'
loop:
- { mode: '0755', path: '{{ dir_params }}' }
- { mode: '0755', path: '{{ tmp_directory }}/{{ db_sid | upper }}' }
- { mode: '0755', path: '/etc/sap_deployment_automation/{{ db_sid | upper }}' }
- name: "4.0.3 - SAP HANA SCALE OUT: Install reset"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
state: absent
when: reinstall
- name: "4.0.3 - SAP HANA SCALE OUT: check if installed"
ansible.builtin.stat:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
register: hana_installed
- name: "4.0.3 - SAP HANA SCALE OUT: check media exists"
ansible.builtin.stat:
path: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE/hdblcm"
register: hdblcm_found
- name: "ErrorHandling"
ansible.builtin.fail:
msg: "INSTALL:0001:Unable to find hdblcm, please check that the installation media is mounted"
when: not hdblcm_found.stat.exists
- name: "4.0.3 - SAP HANA SCALE OUT: Retrieve Subscription ID and Resource Group Name"
ansible.builtin.uri:
url: http://169.254.169.254/metadata/instance?api-version=2021-02-01
use_proxy: false
headers:
Metadata: true
register: azure_metadata
- name: "4.0.3 - SAP HANA SCALE OUT: Show IMDS results"
ansible.builtin.debug:
var: azure_metadata.json
verbosity: 2
- name: "4.0.3 - SAP HANA SCALE OUT: Extract network details from IMDS"
ansible.builtin.set_fact:
subnet_address: "{{ azure_metadata.json.network.interface[0].ipv4.subnet[0].address }}"
subnet_prefix: "{{ azure_metadata.json.network.interface[0].ipv4.subnet[0].prefix }}"
subnet_db_cidr: "{{ subnet_cidr_db | default(azure_metadata.json.network.interface[0].ipv4.subnet[0].address + '/' + azure_metadata.json.network.interface[0].ipv4.subnet[0].prefix) }}"
subnet_client_cidr: "{{ subnet_cidr_client | default(azure_metadata.json.network.interface[0].ipv4.subnet[0].address + '/' + azure_metadata.json.network.interface[0].ipv4.subnet[0].prefix) }}"
subnet_storage_cidr: "{{ subnet_cidr_storage | default(azure_metadata.json.network.interface[0].ipv4.subnet[0].address + '/' + azure_metadata.json.network.interface[0].ipv4.subnet[0].prefix) }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Show the subnet details"
ansible.builtin.debug:
msg:
- "Subnet Address: {{ subnet_address }}"
- "Subnet Prefix: {{ subnet_prefix }}"
- "Subnet CIDR: {{ (subnet_address + '/' + subnet_prefix) }}"
- "DB Subnet CIDR: {{ subnet_db_cidr }}"
- "Client Subnet CIDR: {{ subnet_client_cidr }}"
- "Storage Subnet CIDR: {{ subnet_storage_cidr }}"
# Scale out - ANF with shared storage
# Scale out ANF must only run on the designated primary node from the DB server list.
# /*---------------------------------------------------------------------------8
# | Primary site setup with Shared storage scale out |
# +------------------------------------4--------------------------------------*/
- name: "4.0.3 - SAP HANA SCALE OUT: HANA Install - Scale Out - ANF"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: remove install response file if exists"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_inifile }}"
state: absent
- name: "4.0.3 - SAP HANA SCALE OUT: SAP HANA Template processing: Create ini file {{ sap_inifile }} from {{ HANA_2_00_install.rsp }}"
ansible.builtin.template:
src: "HANA_2_00_install_scaleout.rsp"
dest: "{{ dir_params }}/{{ sap_inifile }}"
mode: 0644
force: true
# Template parameter mapping
vars:
_rsp_component_root: "../COMPONENTS"
_rsp_components: "{{ hana_components }}"
_rsp_sapmnt: "/hana/shared" # Default Value
_rsp_hostname: "{{ virtual_host }}"
_rsp_sid: "{{ db_sid | upper }}"
_rsp_number: "{{ db_instance_number }}"
_rsp_system_usage: "custom"
# use_master_password: "{{ hana_use_master_password }}"
pwd_hdb_system: "{{ hana_system_user_password | default(main_password) }}"
pwd_os_sidadm: "{{ hana_os_sidadm_password | default(main_password) }}"
pwd_os_sapadm: "{{ hana_os_sapadm_password | default(main_password) }}"
# password_copy: "{% if hana_use_master_password == 'n' %}{{ main_password }}{% else %}{% endif %}"
_rsp_internal_network: "{{ subnet_cidr_db | default((subnet_address + '/' + subnet_prefix), true) }}"
# This comes in from the main ansible playbook. It is the password for the root user. Must be randomized after the installation.
_rsp_root_password: "{{ root_password }}"
# Note : Default configuration involves placing the last node in DB List as standby.
# Note : This behavior can be overridden via property 'database_no_standby' to force all remaining nodes as workers
# Note : This configuration is not recommended as it leaves your distributed system without a standby
# NOTE: DO NOT ALTER FORMATTING OR SPACING. THIS BREAKS THE JINJA2 CODE.
_rsp_additional_hosts: "{% for item in db_hosts[1:] %}
{% if loop.index == db_hosts | length - 1 %}
{% if database_no_standby %}
{{ item | trim }}:role=worker:group=default:workergroup=default
{% else %}
{{ item | trim }}:role=standby:group=default:workergroup=default
{% endif %}
{% else %}
{{ item | trim }}:role=worker:group=default:workergroup=default,
{% endif %}
{% endfor %}"
- name: "4.0.3 - SAP HANA SCALE OUT: Progress"
ansible.builtin.debug:
msg: "Start HANA Installation on primary node"
- name: "4.0.3 - SAP HANA SCALE OUT: installation"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: Execute hdblcm on {{ virtual_host }}"
ansible.builtin.shell: |
umask {{ custom_umask | default('022') }} ;
chmod 755 /usr/sap;
./hdblcm --batch --action=install --hostname {{ virtual_host | trim }} --configfile='{{ dir_params }}/{{ sap_inifile }}'
args:
chdir: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE"
creates: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
environment:
TMPDIR: "{{ tmp_directory }}/{{ db_sid | upper }}"
register: hana_installation
failed_when: hana_installation.rc > 0
rescue:
- name: "Fail if HANA installation failed with rc > 1"
ansible.builtin.fail:
msg: "INSTALL:0022:Execute hdblcm failed."
when: hana_installation.rc > 1
- name: "4.0.3 - SAP HANA SCALE OUT: Progress"
ansible.builtin.debug:
msg: "Restarting the HANA Installation on primary node"
when: hana_installation.rc == 1
- name: "4.0.3 - SAP HANA SCALE OUT: Re-execute hdblcm on {{ virtual_host }} and rescue"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: Re-execute hdblcm on {{ virtual_host }}"
ansible.builtin.shell: |
umask {{ custom_umask | default('022') }} ;
chmod 755 /usr/sap;
./hdblcm --batch --action=install --hostname {{ virtual_host }} --configfile='{{ dir_params }}/{{ sap_inifile }}'
args:
chdir: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE"
creates: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
environment:
TMPDIR: "{{ tmp_directory }}/{{ db_sid | upper }}"
register: hana_installation
failed_when: hana_installation.rc > 0
when: hana_installation.rc == 1
rescue:
- name: "Fail if HANA installation failed on second attempt."
ansible.builtin.fail:
msg: "INSTALL:0022:Execute hdblcm failed."
- name: "4.0.3 - SAP HANA SCALE OUT: Installation results"
ansible.builtin.debug:
msg:
- "HANA Installation failed on primary node"
- "HDBLCM output: {{ hana_installation }}"
when:
- hana_installation.rc is defined
- hana_installation.rc > 0
- name: "Errorhandling: SAP HANA"
ansible.builtin.debug:
msg: "INSTALL:{{ hana_installation }}"
when:
- hana_installation.rc is defined
- hana_installation.rc > 0
- name: "4.0.3 - SAP HANA SCALE OUT: Successful installation"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: Installation results"
ansible.builtin.debug:
msg: "HANA Installation succeeded on primary node"
- name: "4.0.3 - SAP HANA SCALE OUT: HANA Install: flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
state: touch
mode: 0755
- name: "4.0.3 - SAP HANA SCALE OUT: Retrieve Subscription ID and Resource Group Name"
ansible.builtin.uri:
url: http://169.254.169.254/metadata/instance?api-version=2021-02-01
use_proxy: false
headers:
Metadata: true
register: azure_metadata
- name: "4.0.3 - SAP HANA SCALE OUT: Extract Azure subscription details"
ansible.builtin.set_fact:
subscription_id: "{{ azure_metadata.json.compute.subscriptionId }}"
resource_group_name: "{{ azure_metadata.json.compute.resourceGroupName }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Show the subscription and resource group"
ansible.builtin.debug:
msg:
- "Subscription ID: {{ subscription_id }}"
- "Resource Group Name: {{ resource_group_name }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Include deploy/ansible/roles-misc/0.6-ARM-Deployment"
ansible.builtin.include_role:
name: roles-misc/0.6-ARM-Deployment
vars:
subscriptionId: "{{ subscription_id }}"
resourceGroupName: "{{ resource_group_name }}"
- name: "4.0.3 - SAP HANA SCALE OUT: ARM Deployment flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb_arm.txt"
state: touch
mode: 0755
# - name: "4.0.3 - SAP HANA SCALE OUT: remove install response file"
# ansible.builtin.file:
# path: "{{ dir_params }}/{{ sap_inifile }}"
# state: absent
when:
- hana_installation.rc is defined
- hana_installation.rc < 1
- name: "4.0.3 - SAP HANA SCALE OUT: Create backup folder"
ansible.builtin.file:
path: "{{ hana_backup_path }}"
state: directory
group: sapsys
owner: "{{ db_sid | lower }}adm"
mode: 0755
- name: "4.0.3 - SAP HANA SCALE OUT: Configure global.ini"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: Prepare global.ini for domain name resolution."
become_user: root
become: true
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: communication
state: present
mode: 0644
option: listeninterface
value: .internal
# - name: "Prepare global.ini for internal network netmask."
# become_user: root
# become: true
# community.general.ini_file:
# path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
# section: communication
# state: present
# mode: 0644
# option: internal_network
# value: "{{ (ansible_default_ipv4.network + '/' + ansible_default_ipv4.netmask) | ipaddr('network/prefix') }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Prepare global.ini for public hostname resolution."
become_user: root
become: true
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: "public_hostname_resolution"
state: present
mode: 0644
option: "map_{{ hostvars[item].virtual_host }}"
value: "{{ (hostvars[item].ansible_all_ipv4_addresses | ansible.utils.ipaddr(subnet_cidr_client)) | first | default(hostvars[item].ansible_host) }}"
with_items:
- "{{ groups[(sap_sid | upper)~'_DB' ] }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Prepare global.ini for site hosts name resolution (Primary Site)"
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: "internal_hostname_resolution"
mode: 0644
state: present
option: "{{ hostvars[item].ansible_host }}"
value: "{{ hostvars[item].virtual_host }}"
with_items:
- "{{ groups[(sap_sid | upper)~'_DB' ] }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Prepare global.ini for NetApp storage optimizations"
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: "{{ item.section }}"
mode: 0644
state: present
option: "{{ item.option }}"
value: "{{ item.value }}"
with_items:
- { section: "fileio", option: "async_read_submit", value: "on" }
- { section: "fileio", option: "max_parallel_io_requests", value: "128" }
- { section: "fileio", option: "async_write_submit_active", value: "on" }
- { section: "fileio", option: "async_write_submit_blocks", value: "all" }
- { section: "persistence", option: "datavolume_striping", value: "true" }
- { section: "persistence", option: "datavolume_striping_size_gb", value: "15000" }
- name: "4.0.3 - SAP HANA SCALE OUT: Restart HANA"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: Stop HANA Database"
become_user: "{{ db_sid | lower }}adm"
become: true
ansible.builtin.shell: |
sapcontrol -nr {{ db_instance_number }} -function StopSystem {{ db_sid | upper }}
changed_when: false
failed_when: false
register: hana_stopped
environment:
PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}:/usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
DIR_LIBRARY: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
LD_LIBRARY_PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
SAPSYSTEMNAME: "{{ db_sid | upper }}"
vars:
allow_world_readable_tmpfiles: true
# ToDo: Check if we can interrogate the HANA DB to see if it is stopped.
- name: "4.0.3 - SAP HANA SCALE OUT: Wait 5 minutes for SAP system to stop"
ansible.builtin.wait_for:
timeout: 300
- name: "4.0.3 - SAP HANA SCALE OUT: Start HANA Database"
become_user: "{{ db_sid | lower }}adm"
become: true
ansible.builtin.shell: |
sapcontrol -nr {{ db_instance_number }} -function StartSystem {{ db_sid | upper }}
changed_when: false
failed_when: false
register: hana_started
environment:
PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}:/usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
DIR_LIBRARY: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
LD_LIBRARY_PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
SAPSYSTEMNAME: "{{ db_sid | upper }}"
vars:
allow_world_readable_tmpfiles: true
- name: "4.0.3 - SAP HANA SCALE OUT: Wait 5 minutes for SAP system to start"
ansible.builtin.wait_for:
timeout: 300
when:
- not hana_installed.stat.exists
- not (database_high_availability | default(false))
# Only allowed for the first node. No other node in the scale out - ANF setup is allowed to install hdblcm.
- ansible_hostname == primary_instance_name
- database_scale_out is defined
- database_scale_out
# Scale our HSR with multi site replication
# DB servers need to be split into two sites, each with designated primary. HANA setup will run on the primaries only.
- name: "4.0.3 - SAP HANA SCALE OUT: HANA Install - Scale Out - HSR"
when:
- database_high_availability
block:
# /*---------------------------------------------------------------------------8
# | Primary site setup with Shared nothing scale out |
# +------------------------------------4--------------------------------------*/
- name: "4.0.3 - SAP HANA SCALE OUT: HANA Install - Scale Out - HSR ( Primary Site )"
when:
- ansible_hostname == primary_instance_name
- not hana_installed.stat.exists
block:
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: remove install response file if exists"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_inifile }}"
state: absent
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Template processing: Create ini file {{ sap_inifile }} from {{ HANA_2_00_install.rsp }}"
ansible.builtin.template:
src: "HANA_2_00_install_scaleout.rsp"
dest: "{{ dir_params }}/{{ sap_inifile }}"
mode: 0644
force: true
# Template parameter mapping
vars:
_rsp_component_root: "../COMPONENTS"
_rsp_components: "{{ hana_components }}"
_rsp_sapmnt: "/hana/shared" # Default Value
_rsp_hostname: "{{ virtual_host }}"
_rsp_sid: "{{ db_sid | upper }}"
_rsp_number: "{{ db_instance_number }}"
_rsp_system_usage: "custom"
use_master_password: "{{ hana_use_master_password }}"
_rsp_hana_data_basepath: "{{ hana_data_basepath }}"
_rsp_hana_log_basepath: "{{ hana_log_basepath }}"
password_copy: "{% if hana_use_master_password == 'n' %}{{ main_password }}{% else %}{% endif %}"
_rsp_internal_network: "{{ (subnet_address + '/' + subnet_prefix) }}"
_rsp_root_password: "{{ root_password }}"
pwd_hdb_system: "{{ hana_system_user_password | default(main_password) }}"
pwd_os_sidadm: "{{ hana_os_sidadm_password | default(main_password) }}"
pwd_os_sapadm: "{{ hana_os_sapadm_password | default(main_password) }}"
# NOTE: DO NOT ALTER FORMATTING OR SPACING. THIS BREAKS THE JINJA2 CODE.
_rsp_additional_hosts: "{% for item in db_hosts[2::2] %}
{% if loop.index == db_hosts | length - 1 %}
{{ item | trim }}:role=worker:group=default:workergroup=default
{% else %}
{{ item | trim }}:role=worker:group=default:workergroup=default,
{% endif %}
{% endfor %}"
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Template processing: Create custom ini file {{ sap_custom_config }} from {{ HANA_2_00_customconfig.rsp }}"
ansible.builtin.template:
src: "HANA_2_00_customconfig.rsp"
dest: "{{ dir_params }}/{{ sap_custom_config }}"
mode: 0644
force: true
vars:
_rsp_basepath_shared: "no"
_rsp_hana_data_basepath: "{{ hana_data_basepath }}"
_rsp_hana_log_basepath: "{{ hana_log_basepath }}"
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Progress"
ansible.builtin.debug:
msg: "Start HANA Installation on primary node"
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: installation"
block:
- name: "SAP HANA SCALE OUT-HSR: Execute hdblcm on {{ primary_instance_name }}"
ansible.builtin.shell: |
umask {{ custom_umask | default('022') }} ;
chmod 755 /usr/sap;
./hdblcm --batch --action=install --hostname {{ virtual_host | trim }} --configfile='{{ dir_params }}/{{ sap_inifile }}' --custom_cfg='{{ dir_params }}'
args:
chdir: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE"
creates: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
environment:
TMPDIR: "{{ tmp_directory }}/{{ db_sid | upper }}"
register: hana_installation
failed_when: hana_installation.rc > 0
rescue:
- name: "Fail if HANA installation failed with rc > 1"
ansible.builtin.fail:
msg: "INSTALL:0022:Execute hdblcm failed."
when: hana_installation.rc > 1
- name: "SAP HANA SCALE OUT-HSR: Progress"
ansible.builtin.debug:
msg: "Restarting the HANA Installation on primary node"
when: hana_installation.rc == 1
- name: "SAP HANA SCALE OUT-HSR: Re-execute hdblcm on {{ virtual_host }} and rescue"
block:
- name: "SAP HANA SCALE OUT-HSR: Re-execute hdblcm on {{ virtual_host }}"
ansible.builtin.shell: |
umask {{ custom_umask | default('022') }} ;
chmod 755 /usr/sap;
./hdblcm --batch --action=install --hostname {{ virtual_host | trim }} --configfile='{{ dir_params }}/{{ sap_inifile }}'
args:
chdir: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE"
creates: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
environment:
TMPDIR: "{{ tmp_directory }}/{{ db_sid | upper }}"
register: hana_installation
failed_when: hana_installation.rc > 0
when: hana_installation.rc == 1
rescue:
- name: "Fail if HANA installation failed on second attempt."
ansible.builtin.fail:
msg: "INSTALL:0022:Execute hdblcm failed on primary node."
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Installation results"
ansible.builtin.debug:
msg:
- "HANA Installation failed on primary node"
- "HDBLCM output: {{ hana_installation }}"
when:
- hana_installation.rc is defined
- hana_installation.rc > 0
- name: "Errorhandling: SAP HANA"
ansible.builtin.debug:
msg: "INSTALL:{{ hana_installation }}"
when:
- hana_installation.rc is defined
- hana_installation.rc > 0
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Successful installation"
block:
- name: "SAP HANA SCALE OUT-HSR: Installation results"
ansible.builtin.debug:
msg: "HANA Installation succeeded on primary node"
- name: "SAP HANA SCALE OUT-HSR: HANA Install: flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
state: touch
mode: 0755
- name: "Retrieve Subscription ID and Resource Group Name"
ansible.builtin.uri:
url: http://169.254.169.254/metadata/instance?api-version=2021-02-01
use_proxy: false
headers:
Metadata: true
register: azure_metadata
- name: "Extract details"
ansible.builtin.set_fact:
subscription_id: "{{ azure_metadata.json.compute.subscriptionId }}"
resource_group_name: "{{ azure_metadata.json.compute.resourceGroupName }}"
- name: "Show the subscription and resource group"
ansible.builtin.debug:
msg:
- "Subscription ID: {{ subscription_id }}"
- "Resource Group Name: {{ resource_group_name }}"
- name: "Include deploy/ansible/roles-misc/0.6-ARM-Deployment"
ansible.builtin.include_role:
name: roles-misc/0.6-ARM-Deployment
vars:
subscriptionId: "{{ subscription_id }}"
resourceGroupName: "{{ resource_group_name }}"
- name: "SAP HANA SCALE OUT-HSR: ARM Deployment flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb_arm.txt"
state: touch
mode: 0755
- name: "SAP HANA SCALE OUT-HSR: remove install response file"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_inifile }}"
state: absent
- name: "SAP HANA SCALE OUT-HSR: remove custom config response file"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_custom_config }}"
state: absent
when:
- hana_installation.rc is defined
- hana_installation.rc < 1
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Create backup folder"
ansible.builtin.file:
path: "{{ hana_backup_path }}"
state: directory
group: sapsys
owner: "{{ db_sid | lower }}adm"
mode: 0755
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Configure global.ini"
block:
- name: "Prepare global.ini for domain name resolution."
become_user: root
become: true
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: communication
state: present
mode: 0644
option: listeninterface
value: .internal
- name: "Prepare global.ini for installation in non-shared environment"
become_user: root
become: true
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: persistence
state: present
mode: 0644
option: basepath_shared
value: "{{ _rsp_basepath_shared }}"
tags:
- skip_ansible_lint
- name: "Prepare global.ini for site hosts name resolution (Primary Site)"
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: "internal_hostname_resolution"
mode: 0644
state: present
option: "{{ hostvars[item].ansible_host }}"
value: "{{ hostvars[item].virtual_host }}"
with_items:
- "{{ db_hosts[0::2] }}"
- name: "Prepare global.ini for HANA hosts name resolution on replication network"
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: "system_replication_hostname_resolution"
mode: 0644
state: present
option: "{{ hostvars[item].ansible_all_ipv4_addresses | ansible.utils.ipaddr(subnet_cidr_db) | first | default(hostvars[item].ansible_host ) }}"
value: "{{ hostvars[item].virtual_host }}"
with_items:
- "{{ groups[(sap_sid | upper)~'_DB' ] }}"
when:
- subnet_cidr_db is defined
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Restart HANA"
block:
- name: "Stop HANA Database"
become_user: "{{ db_sid | lower }}adm"
become: true
ansible.builtin.shell: |
sapcontrol -nr {{ db_instance_number }} -function StopSystem {{ db_sid | upper }}
changed_when: false
failed_when: false
register: hana_stopped
environment:
PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}:/usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
DIR_LIBRARY: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
LD_LIBRARY_PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
SAPSYSTEMNAME: "{{ db_sid | upper }}"
vars:
allow_world_readable_tmpfiles: true
# ToDo: Check if we can interrogate the HANA DB to see if it is stopped.
- name: "Wait 2 minutes for SAP system to stop"
ansible.builtin.wait_for:
timeout: 120
- name: "Start HANA Database"
become_user: "{{ db_sid | lower }}adm"
become: true
ansible.builtin.shell: |
sapcontrol -nr {{ db_instance_number }} -function StartSystem {{ db_sid | upper }}
changed_when: false
failed_when: false
register: hana_started
environment:
PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}:/usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
DIR_LIBRARY: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
LD_LIBRARY_PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
SAPSYSTEMNAME: "{{ db_sid | upper }}"
vars:
allow_world_readable_tmpfiles: true
- name: "Wait 2 minutes for SAP system to start"
ansible.builtin.wait_for:
timeout: 120
# /*---------------------------------------------------------------------------8
# | Secondary site setup with Shared nothing scale out |
# +------------------------------------4--------------------------------------*/
- name: "4.0.3 - SAP HANA SCALE OUT: HANA Install - Scale Out - HSR ( Secondary Site )"
block:
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: remove install response file if exists"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_inifile }}"
state: absent
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Template processing: Create ini file {{ sap_inifile }} from {{ HANA_2_00_install.rsp }}"
ansible.builtin.template:
src: "HANA_2_00_install_scaleout.rsp"
dest: "{{ dir_params }}/{{ sap_inifile }}"
mode: 0644
force: true
# Template parameter mapping
vars:
_rsp_component_root: "../COMPONENTS"
_rsp_components: "{{ hana_components }}"
_rsp_sapmnt: "/hana/shared" # Default Value
_rsp_hostname: "{{ virtual_host }}"
_rsp_sid: "{{ db_sid | upper }}"
_rsp_number: "{{ db_instance_number }}"
_rsp_system_usage: "custom"
use_master_password: "{{ hana_use_master_password }}"
_rsp_hana_data_basepath: "{{ hana_data_basepath }}"
_rsp_hana_log_basepath: "{{ hana_log_basepath }}"
password_copy: "{% if hana_use_master_password == 'n' %}{{ main_password }}{% else %}{% endif %}"
pwd_hdb_system: "{{ hana_system_user_password | default(main_password) }}"
pwd_os_sidadm: "{{ hana_os_sidadm_password | default(main_password) }}"
pwd_os_sapadm: "{{ hana_os_sapadm_password | default(main_password) }}"
_rsp_internal_network: "{{ (subnet_address + '/' + subnet_prefix) }}"
_rsp_root_password: "{{ root_password }}"
# NOTE: DO NOT ALTER FORMATTING OR SPACING. THIS BREAKS THE JINJA2 CODE.
_rsp_additional_hosts: "{% for item in db_hosts[3::2] %}
{% if loop.index == db_hosts | length - 1 %}
{{ item | trim }}:role=worker:group=default:workergroup=default
{% else %}
{{ item | trim }}:role=worker:group=default:workergroup=default,
{% endif %}
{% endfor %}"
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Template processing: Create custom ini file {{ sap_custom_config }} from {{ HANA_2_00_customconfig.rsp }}"
ansible.builtin.template:
src: "HANA_2_00_customconfig.rsp"
dest: "{{ dir_params }}/{{ sap_custom_config }}"
mode: 0644
force: true
vars:
_rsp_basepath_shared: "no"
_rsp_hana_data_basepath: "{{ hana_data_basepath }}"
_rsp_hana_log_basepath: "{{ hana_log_basepath }}"
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Progress"
ansible.builtin.debug:
msg: "Start HANA Installation on secondary node"
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: installation"
block:
- name: "SAP HANA: Execute hdblcm on {{ secondary_instance_name }}"
ansible.builtin.shell: |
umask {{ custom_umask | default('022') }} ;
chmod 755 /usr/sap;
./hdblcm --batch --action=install --hostname {{ virtual_host | trim }} --configfile='{{ dir_params }}/{{ sap_inifile }}' --custom_cfg='{{ dir_params }}'
args:
chdir: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE"
creates: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
environment:
TMPDIR: "{{ tmp_directory }}/{{ db_sid | upper }}"
register: hana_installation
failed_when: hana_installation.rc > 0
rescue:
- name: "Fail if HANA installation failed with rc > 1"
ansible.builtin.fail:
msg: "INSTALL:0022:Execute hdblcm failed."
when: hana_installation.rc > 1
- name: "SAP HANA: Progress"
ansible.builtin.debug:
msg: "Restarting the HANA Installation on secondary node"
when: hana_installation.rc == 1
- name: "SAP HANA: Re-execute hdblcm on {{ virtual_host }} and rescue"
block:
- name: "SAP HANA: Re-execute hdblcm on {{ virtual_host }}"
ansible.builtin.shell: |
umask {{ custom_umask | default('022') }} ;
chmod 755 /usr/sap;
./hdblcm --batch --action=install --hostname {{ virtual_host | trim }} --configfile='{{ dir_params }}/{{ sap_inifile }}'
args:
chdir: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE"
creates: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
environment:
TMPDIR: "{{ tmp_directory }}/{{ db_sid | upper }}"
register: hana_installation
failed_when: hana_installation.rc > 0
when: hana_installation.rc == 1
rescue:
- name: "Fail if HANA installation failed on second attempt."
ansible.builtin.fail:
msg: "INSTALL:0022:Execute hdblcm failed on secondary node."
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Installation results"
ansible.builtin.debug:
msg:
- "HANA Installation failed on secondary node"
- "HDBLCM output: {{ hana_installation }}"
when:
- hana_installation.rc is defined
- hana_installation.rc > 0
- name: "Errorhandling: SAP HANA"
ansible.builtin.debug:
msg: "INSTALL:{{ hana_installation }}"
when:
- hana_installation.rc is defined
- hana_installation.rc > 0
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Successful installation"
block:
- name: "SAP HANA SCALE OUT-HSR: Installation results"
ansible.builtin.debug:
msg: "HANA Installation succeeded on secondary node"
- name: "SAP HANA SCALE OUT-HSR: HANA Install: flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
state: touch
mode: 0755
- name: "Retrieve Subscription ID and Resource Group Name"
ansible.builtin.uri:
url: http://169.254.169.254/metadata/instance?api-version=2021-02-01
use_proxy: false
headers:
Metadata: true
register: azure_metadata
- name: "Extract details"
ansible.builtin.set_fact:
subscription_id: "{{ azure_metadata.json.compute.subscriptionId }}"
resource_group_name: "{{ azure_metadata.json.compute.resourceGroupName }}"
- name: "Show the subscription and resource group"
ansible.builtin.debug:
msg:
- "Subscription ID: {{ subscription_id }}"
- "Resource Group Name: {{ resource_group_name }}"
- name: "Include deploy/ansible/roles-misc/0.6-ARM-Deployment"
ansible.builtin.include_role:
name: roles-misc/0.6-ARM-Deployment
vars:
subscriptionId: "{{ subscription_id }}"
resourceGroupName: "{{ resource_group_name }}"
- name: "SAP HANA SCALE OUT-HSR: ARM Deployment flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb_arm.txt"
state: touch
mode: 0755
- name: "SAP HANA SCALE OUT-HSR: remove install response file"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_inifile }}"
state: absent
- name: "SAP HANA SCALE OUT-HSR: remove custom config response file"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_custom_config }}"
state: absent
when:
- hana_installation.rc is defined
- hana_installation.rc < 1
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Create backup folder"
ansible.builtin.file:
path: "{{ hana_backup_path }}"
state: directory
group: sapsys
owner: "{{ db_sid | lower }}adm"
mode: 0755
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Configure global.ini"
block:
- name: "Prepare global.ini for domain name resolution."
become_user: root
become: true
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: communication
state: present
mode: 0644
option: listeninterface
value: .internal
- name: "Prepare global.ini for installation in non-shared environment"
become_user: root
become: true
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: persistence
state: present
mode: 0644
option: basepath_shared
value: "{{ _rsp_basepath_shared }}"
tags:
- skip_ansible_lint
- name: "Prepare global.ini for site hosts name resolution (Secondary Site)"
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: "internal_hostname_resolution"
mode: 0644
state: present
option: "{{ hostvars[item].ansible_host }}"
value: "{{ hostvars[item].virtual_host }}"
with_items:
- "{{ db_hosts[1::2] }}"
- name: "Prepare global.ini for HANA hosts name resolution on replication network"
community.general.ini_file:
path: "/hana/shared/{{ db_sid | upper }}/global/hdb/custom/config/global.ini"
section: "system_replication_hostname_resolution"
mode: 0644
state: present
option: "{{ hostvars[item].ansible_all_ipv4_addresses | ansible.utils.ipaddr(subnet_cidr_db) | first | default(hostvars[item].ansible_host) }}"
value: "{{ hostvars[item].virtual_host }}"
with_items:
- "{{ groups[(sap_sid | upper)~'_DB' ] }}"
when:
- subnet_cidr_db is defined
- name: "4.0.3 - SAP HANA SCALE OUT-HSR: Restart HANA"
block:
- name: "Stop HANA Database"
become_user: "{{ db_sid | lower }}adm"
become: true
ansible.builtin.shell: |
sapcontrol -nr {{ db_instance_number }} -function StopSystem {{ db_sid | upper }}
changed_when: false
failed_when: false
register: hana_stopped
environment:
PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}:/usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
DIR_LIBRARY: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
LD_LIBRARY_PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
SAPSYSTEMNAME: "{{ db_sid | upper }}"
vars:
allow_world_readable_tmpfiles: true
# ToDo: Check if we can interrogate the HANA DB to see if it is stopped.
- name: "Wait 2 minutes for SAP system to stop"
ansible.builtin.wait_for:
timeout: 120
- name: "Start HANA Database on secondary node"
become_user: "{{ db_sid | lower }}adm"
become: true
ansible.builtin.shell: |
sapcontrol -nr {{ db_instance_number }} -function StartSystem {{ db_sid | upper }}
changed_when: false
failed_when: false
register: hana_started
environment:
PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}:/usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
DIR_LIBRARY: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
LD_LIBRARY_PATH: /usr/sap/{{ db_sid | upper }}/HDB{{ db_instance_number }}/exe
SAPSYSTEMNAME: "{{ db_sid | upper }}"
vars:
allow_world_readable_tmpfiles: true
- name: "Wait 2 minutes for SAP system to start"
ansible.builtin.wait_for:
timeout: 120
when:
- ansible_hostname == secondary_instance_name
- not hana_installed.stat.exists
# /*----------------------------End of setup----------------------------------8
- name: "HANA Install status"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: Install status"
ansible.builtin.debug:
msg: "HANA is already installed"
- name: "4.0.3 - SAP HANA SCALE OUT: - return value"
ansible.builtin.set_fact:
hana_already_installed: true
- name: "4.0.3 - SAP HANA SCALE OUT: check if ARM Deployment done"
ansible.builtin.stat:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb_arm.txt"
register: hana_arm_deployment_done
- name: "4.0.3 - SAP HANA SCALE OUT: Successful installation"
block:
- name: "4.0.3 - SAP HANA SCALE OUT: Retrieve Subscription ID and Resource Group Name"
ansible.builtin.uri:
url: http://169.254.169.254/metadata/instance?api-version=2021-02-01
use_proxy: false
headers:
Metadata: true
register: azure_metadata
- name: "4.0.3 - SAP HANA SCALE OUT: Extract Azure subscription details"
ansible.builtin.set_fact:
subscription_id_tmp: "{{ azure_metadata.json.compute.subscriptionId }}"
resource_group_name_tmp: "{{ azure_metadata.json.compute.resourceGroupName }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Show the subscription and resource group"
ansible.builtin.debug:
msg:
- "Subscription ID: {{ subscription_id_tmp }}"
- "Resource Group Name: {{ resource_group_name_tmp }}"
- name: "4.0.3 - SAP HANA SCALE OUT: Include deploy/ansible/roles-misc/0.6-ARM-Deployment"
ansible.builtin.include_role:
name: roles-misc/0.6-ARM-Deployment
vars:
subscription_id: "{{ subscription_id_tmp }}"
resource_group_name: "{{ resource_group_name_tmp }}"
- name: "4.0.3 - SAP HANA SCALE OUT: ARM Deployment flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb_arm.txt"
state: touch
mode: 0755
when:
- not hana_arm_deployment_done.stat.exists
- name: "4.0.3 - SAP HANA SCALE OUT: Create backup folder"
ansible.builtin.file:
path: "{{ hana_backup_path }}"
state: directory
group: sapsys
owner: "{{ db_sid | lower }}adm"
mode: 0755
when:
- hana_installed.stat.exists
# Scale out Supplementary tasks
# Create {{ db_sid | lower}}adm account on majority maker VM, onlye required if its going to be added to Pacemaker
- name: "4.0.3 - SAP HANA SCALE OUT: Supplementary tasks"
block:
- name: "Create Create SAP Groups on Observer VM"
when:
- node_tier == 'observer'
ansible.builtin.group:
name: "{{ item.group }}"
gid: "{{ item.gid }}"
state: present
loop:
- { group: 'sapsys', gid: '{{ sapsys_gid }}' }
- { group: 'sapinst', gid: '{{ sapinst_gid }}' }
- name: "Create /usr/sap directory"
when:
- node_tier == 'observer'
ansible.builtin.file:
path: "/usr/sap"
state: directory
mode: '0755'
owner: root
group: root
force: true
- name: "Create {{ db_sid | lower }}adm account for Observer "
when:
- node_tier == 'observer'
ansible.builtin.user:
name: "{{ db_sid | lower }}adm"
comment: "SAP HANA Database System Administrator"
uid: "{{ hdbadm_uid }}"
group: "sapsys"
state: present
shell: "/bin/sh"
home: "/usr/sap/{{ db_sid | upper }}/home"
when:
- database_high_availability
...
# /*---------------------------------------------------------------------------8
# | END |
# +------------------------------------4--------------------------------------*/