deploy/ansible/roles-db/4.0.0-hdb-install/tasks/main.yaml (241 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# /*---------------------------------------------------------------------------8
# | |
# | Perform the SAP DB Instance installation |
# | SAP: Register BOM |
# | create .params directory |
# | deploy db install template |
# | deploy hdblcm password file |
# | |
# +------------------------------------4--------------------------------------*/
---
# +------------------------------------4--------------------------------------*/
- name: "SAP HANA: Set BOM facts"
ansible.builtin.set_fact:
sap_inifile: "hdbserver_{{ virtual_host }}_{{ sap_sid }}_install.rsp"
dir_params: "{{ tmp_directory }}/.params"
# 0x) Create hidden directory for parameter files
- name: "SAP HANA: 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: "SAP HANA: Install reset"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
state: absent
when: reinstall
- name: "SAP HANA: check if installed"
ansible.builtin.stat:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
register: hana_installed
- name: "SAP HANA: 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: "SAP HANA: check sp version from manifest"
ansible.builtin.shell: |
set -o pipefail
grep sp-number manifest | cut -d ":" -f 2 | tr -d [:space:]
args:
chdir: "{{ target_media_location }}/CD_HDBSERVER/SAP_HANA_DATABASE/server"
register: manifest_hana_sp
- name: "SAP HANA: Show sps leve"
ansible.builtin.debug:
msg: "HANA SP Level: {{ manifest_hana_sp.stdout }}"
- name: "SAP HANA: Set fact when sps is 08 or higher"
ansible.builtin.set_fact:
hana_sp08_or_higher: "{{ manifest_hana_sp.stdout is version('080', '>=') }}"
# all | client | es | ets | lcapps | server | smartda | streaming | rdsync | xs | studio | afl | sca | sop | eml | rme | rtl | trp
- name: "SAP HANA: Set HANA components"
ansible.builtin.set_fact:
hana_components: "server, lcapps, afl, vch2021"
when:
- hana_sp08_or_higher
- hana_components == 'all'
- name: "SAP HANA: Show HANA components"
ansible.builtin.debug:
msg: "HANA Components: {{ hana_components }}"
- name: "HANA Install"
block:
- name: "SAP HANA: remove install response file if exists"
ansible.builtin.file:
path: "{{ dir_params }}/{{ sap_inifile }}"
state: absent
- name: "SAP HANA Template processing: Create ini file {{ sap_inifile }} from {{ HANA_2_00_install.rsp }}"
ansible.builtin.template:
src: "HANA_2_00_install.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"
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) }}"
# use_master_password: "{{ hana_use_master_password }}"
# password_copy: "{{ main_password if hana_use_master_password == 'n' else '' }}"
- name: "SAP HANA: Progress"
ansible.builtin.debug:
msg: "Start HANA Installation"
- name: "SAP HANA: installation"
block:
- name: "SAP HANA: 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
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"
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 }} --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 while importing the delivery unit AHCO_INA_SERVICE"
ansible.builtin.fail:
msg: "INSTALL:0026:Execute hdblcm failed at delivery unit AHCO_INA_SERVICE."
when: hana_installation.stderr is search(".*Import of delivery units failed.*Cannot import delivery unit.*AHCO_INA_SERVICE.tgz.*")
- name: "Fail if HANA installation failed on second attempt."
ansible.builtin.fail:
msg: "INSTALL:0022:Execute hdblcm failed."
- name: "SAP HANA: Installation results"
ansible.builtin.debug:
msg:
- "HANA Installation failed"
- "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: "SAP HANA: Successful installation"
block:
- name: "SAP HANA: Installation results"
ansible.builtin.debug:
msg: "HANA Installation succeeded"
- name: "SAP HANA: HANA Install: flag"
ansible.builtin.file:
path: "/etc/sap_deployment_automation/{{ db_sid | upper }}/sap_deployment_hdb.txt"
state: touch
mode: 0755
- name: "SAP HANA: Create backup folder"
ansible.builtin.file:
path: "{{ hana_backup_path }}"
state: directory
group: sapsys
owner: "{{ db_sid | lower }}adm"
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: 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: remove install response file"
# ansible.builtin.file:
# path: "{{ dir_params }}/{{ sap_inifile }}"
# state: absent
when:
- hana_installation.rc is defined
- hana_installation.rc < 1
when:
- not hana_installed.stat.exists
- name: "HANA Install status"
block:
- name: "HANA Install status"
ansible.builtin.debug:
msg: "HANA is already installed"
- name: "HANA: - return value"
ansible.builtin.set_fact:
hana_already_installed: true
- name: "SAP HANA: Create backup folder"
ansible.builtin.file:
path: "{{ hana_backup_path }}"
state: directory
group: sapsys
owner: "{{ db_sid | lower }}adm"
mode: 0755
- name: "SAP HANA: 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: "SAP HANA: Successful installation"
block:
- 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_tmp: "{{ azure_metadata.json.compute.subscriptionId }}"
resource_group_name_tmp: "{{ azure_metadata.json.compute.resourceGroupName }}"
- name: "Show the subscription and resource group"
ansible.builtin.debug:
msg:
- "Subscription ID: {{ subscription_id_tmp }}"
- "Resource Group Name: {{ resource_group_name_tmp }}"
- name: "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: "SAP HANA: 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
when:
- hana_installed.stat.exists
...
# /*---------------------------------------------------------------------------8
# | END |
# +------------------------------------4--------------------------------------*/