deploy/ansible/playbook_05_01_sap_dbload.yaml (311 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
---
# /*---------------------------------------------------------------------------8
# | |
# | Prepare for SAP DB Load |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: localhost
name: "DBLoad Playbook: - Initialization"
gather_facts: true
vars_files:
- vars/ansible-input-api.yaml
# API Input template with defaults
tasks:
- name: "DBLoad Playbook: - Create Progress folder"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress"
state: directory
mode: 0755
- name: "DBLoad Playbook: - Remove db-load-done flag"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db-load-done"
state: absent
- name: "DBLoad Playbook: - Initialize tier"
ansible.builtin.set_fact:
tier: dbload
- name: "DBLoad Playbook: - Read/Create passwords"
ansible.builtin.include_role:
name: roles-misc/0.1-passwords
public: true
tags:
- 0.1-passwords
- name: "OS configuration playbook: - Read password"
ansible.builtin.include_role:
name: roles-misc/0.1-passwords
tasks_from: windows.yaml
public: true
when: platform == "SQLSERVER"
tags:
- 0.1-win-passwords
- name: "DBLoad Playbook: - Read storage account details"
ansible.builtin.include_role:
name: roles-misc/0.3.sap-installation-media-storage-details
public: true
tags:
- kv-sap-installation-media-storage-details
# /*---------------------------------------------------------------------------8
# | |
# | Playbook for SAP DB Load |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_PAS :
{{ sap_sid | upper }}_SCS :
{{ sap_sid | upper }}_DB"
name: DB Load
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: true # Important to collect hostvars information
vars_files:
- vars/ansible-input-api.yaml # API Input template with defaults
tasks:
# -------------------------------------+---------------------------------------8
#
# Build the list of tasks to be executed in order here.
#
# -------------------------------------+---------------------------------------8
- name: "DBLoad Playbook: - Perform DB Load on HANA"
become: true
become_user: root
when:
- platform == 'HANA'
- "'pas' in supported_tiers"
- ansible_os_family != "Windows"
block:
- name: "DBLoad Playbook: - Setting the dbload facts"
ansible.builtin.set_fact:
tier: dbload # SAP Install phase: DBLOAD
main_password: "{{ hostvars.localhost.sap_password }}"
sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}"
sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}"
bom_processing: true
always_upload_jinja_templates: false
sa_enabled: true
tags:
- always
- name: "DBLoad Playbook: - Set deployment type"
ansible.builtin.set_fact:
single_server: "{{ (ansible_play_hosts_all | length) == 1 }}"
tags:
- always
- name: "DBLoad Playbook: Define this SID"
ansible.builtin.set_fact:
this_sid:
{
'sid': '{{ sap_sid | upper }}',
'dbsid_uid': '{{ hdbadm_uid }}',
'sidadm_uid': '{{ sidadm_uid }}',
'ascs_inst_no': '{{ scs_instance_number }}',
'pas_inst_no': '{{ pas_instance_number }}',
'app_inst_no': '{{ app_instance_number }}'
}
- name: "DBLoad Playbook: Define list of SIDs"
ansible.builtin.set_fact:
all_sids: "{% if MULTI_SIDS is defined %}{{ MULTI_SIDS }}{% else %}{{ all_sids | default([]) + [this_sid] }}{% endif %}"
# - name: Generic Users and Groups for SAP Installation
# ansible.builtin.include_role:
# name: roles-sap-os/2.5-sap-users
# tasks_from: user_nw.yaml
# vars:
# scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}"
# tier: generic
# main_password: "{{ hostvars.localhost.sap_password }}"
# sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}"
# sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}"
# loop: "{{ all_sids }}"
# loop_control:
# loop_var: sid_to_be_deployed
# tags:
# - 2.5-sap-users
- name: "DBLoad Playbook: - Mounting"
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
tags:
- 2.6-sap-mounts
- name: Run the DBLoad Playbook
block:
- name: "DBLoad Playbook: - Run DBLoad"
ansible.builtin.include_role:
name: roles-sap/5.1-dbload
vars:
scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}"
sa_enabled: true
loop: "{{ all_sids }}"
loop_control:
loop_var: sid_to_be_deployed
- name: "DBLoad Playbook: - Create db-load-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db-load-done"
state: touch
mode: 0755
when:
- dbload_already_performed is defined or (dbload_results.rc is defined and dbload_results.rc == 0)
always:
- name: "DBLoad Playbook: - Run post installation tasks"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: '_DBLOAD'
prefix: "{{ bom.product_ids.dbl.replace('.', '/').replace('/ABAP', '').split(':')[1] }}"
path: '/INSTALL/DISTRIBUTED/{{ dbl_bom_instance_type }}/DB'
tier: 'dbload'
- name: "DBLoad Playbook: - Get the Error lines from installation output"
ansible.builtin.set_fact:
error_lines: "{{ error_lines | default([]) + [item] }}"
with_items: "{{ dbload.stdout_lines }}"
when:
- dbload is defined
- dbload.stdout_lines is defined
- '"ERROR" in item'
- name: "DBLoad Playbook: - Show errors from DBLoad"
ansible.builtin.debug:
msg: "{{ error_lines }}"
when:
- error_lines is defined
tags:
- 5.1-dbload
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for Oracle DB Load |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_DB[0]"
name: DB Installation - ORACLE
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: true
vars_files:
- vars/ansible-input-api.yaml # API Input template with defaults
tasks:
# -------------------------------------+---------------------------------------8
#
# Build the list of tasks to be executed in order here.
#
# -------------------------------------+---------------------------------------8
- name: "DBLoad Playbook: - Perform DB Load on ORACLE"
become: true
become_user: root
block:
- name: "DBLoad Playbook: - Setting the dbload facts"
ansible.builtin.set_fact:
tier: dbload # SAP Install phase: DBLOAD
main_password: "{{ hostvars.localhost.sap_password }}"
sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}"
sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}"
always_upload_jinja_templates: false
tags:
- always
- name: "DBLoad Playbook: Define this SID"
ansible.builtin.set_fact:
this_sid:
{
'sid': '{{ sap_sid | upper }}',
'dbsid_uid': '{{ hdbadm_uid }}',
'sidadm_uid': '{{ sidadm_uid }}',
'ascs_inst_no': '{{ scs_instance_number }}',
'pas_inst_no': '{{ pas_instance_number }}',
'app_inst_no': '{{ app_instance_number }}'
}
- name: "DBLoad Playbook: Define list of SIDs"
ansible.builtin.set_fact:
all_sids: "{% if MULTI_SIDS is defined %}{{ MULTI_SIDS }}{% else %}{{ all_sids | default([]) + [this_sid] }}{% endif %}"
- name: Run the DBLoad Playbook
block:
- name: "DBLoad Playbook: - Run DBLoad (shared home)"
ansible.builtin.include_role:
name: roles-sap/5.1-dbload
loop: "{{ all_sids }}"
loop_control:
loop_var: sid_to_be_deployed
- name: "DBLoad Playbook: - Create db-load-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db-load-done"
state: touch
mode: 0755
when:
- dbload_already_performed is defined or (dbload_results.rc is defined and dbload_results.rc == 0)
always:
- name: "DBLoad Playbook: - Run post installation tasks"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: '_DBLOAD'
prefix: "{{ bom.product_ids.dbl.replace('.', '/').replace('/ABAP', '').split(':')[1] }}"
path: 'INSTALL/DISTRIBUTED/ABAP/DB'
tier: 'dbload'
this_sid: "{{ sid_to_be_deployed.sid | upper }}"
loop: "{{ all_sids }}"
loop_control:
loop_var: sid_to_be_deployed
- name: "DBLoad Playbook: - Get the Error lines from installation output"
ansible.builtin.set_fact:
error_lines: "{{ error_lines | default([]) + [item] }}"
with_items: "{{ dbload.stdout_lines }}"
when:
- dbload is defined
- dbload.stdout_lines is defined
- '"ERROR" in item'
- name: "DBLoad Playbook: - Show errors from DBLoad"
ansible.builtin.debug:
msg: "{{ error_lines }}"
when:
- error_lines is defined
tags:
- 5.1-dbload
when:
- platform in ['ORACLE', 'ORACLE-ASM']
- ansible_os_family != "Windows"
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for SQLSERVER DB Load |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_DB[0]"
name: DB Load
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: true # Important to collect hostvars information
vars_files:
- vars/ansible-input-api.yaml # API Input template with defaults
tasks:
# -------------------------------------+---------------------------------------8
#
# Build the list of tasks to be executed in order here.
#
# -------------------------------------+---------------------------------------8
- name: "DBLoad Playbook: - Perform DB Load on SQLSERVER"
block:
- name: "DBLoad Playbook: - Setting the dbload facts"
ansible.builtin.set_fact:
tier: dbload # SAP Install phase: DBLOAD
main_password: "{{ hostvars.localhost.sap_password }}"
sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}"
sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}"
domain_user_password: "{{ hostvars.localhost.winadm_password }}"
svc_password: "{{ hostvars.localhost.svcadm_password }}"
bom_processing: true
always_upload_jinja_templates: false
tags:
- always
- name: "DBLoad Playbook: - Ensure Sharing Data Folder"
ansible.builtin.include_role:
name: roles-sap-os/windows/2.3-sap-exports
- name: "DBLoad Playbook: Define this SID"
ansible.builtin.set_fact:
this_sid:
{
'sid': '{{ sap_sid | upper }}',
'dbsid_uid': '{{ hdbadm_uid }}',
'sidadm_uid': '{{ sidadm_uid }}',
'ascs_inst_no': '{{ scs_instance_number }}',
'pas_inst_no': '{{ pas_instance_number }}',
'app_inst_no': '{{ app_instance_number }}'
}
- name: "DBLoad Playbook: Define list of SIDs"
ansible.builtin.set_fact:
all_sids: "{% if MULTI_SIDS is defined %}{{ MULTI_SIDS }}{% else %}{{ all_sids | default([]) + [this_sid] }}{% endif %}"
- name: Run the DBLoad Playbook
block:
- name: "DBLoad Playbook: - Run DBLoad"
ansible.builtin.include_role:
name: roles-sap/windows/5.1-dbload
vars:
scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}"
domain_user_password: "{{ hostvars.localhost.winadm_password }}"
loop: "{{ all_sids }}"
loop_control:
loop_var: sid_to_be_deployed
- name: "DBLoad Playbook: - Create db-load-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db-load-done"
state: touch
mode: 0755
when:
- dbload_already_performed is defined or (dbload_results.rc is defined and dbload_results.rc == 0)
always:
- name: "DBLoad Playbook: - Run post installation tasks"
ansible.builtin.include_role:
name: roles-sap/windows/7.0.0-post-install
vars:
suffix: '_DBLOAD'
# prefix: "{{ bom.product_ids.dbl.replace('.','/').replace('/ABAP','').split(':')[1] }}"
# path: '/INSTALL/DISTRIBUTED/ABAP/DB'
tier: 'dbload'
- name: "DBLoad Playbook: - Get the Error lines from installation output"
ansible.builtin.set_fact:
error_lines: "{{ error_lines | default([]) + [item] }}"
with_items: "{{ dbload.stdout_lines }}"
when:
- dbload is defined
- dbload.stdout_lines is defined
- '"ERROR" in item'
- name: "DBLoad Playbook: - Show errors from DBLoad"
ansible.builtin.debug:
msg: "{{ error_lines }}"
when:
- error_lines is defined
- name: "DBLoad Playbook: Rename sapinst_logs Folder with TimeStamp"
ansible.windows.win_shell: |
Rename-Item -Path .\sapinst_logs -NewName "sapinst_logs_$(get-date -f yyyy_MM_dd_HH_mm_ss)"
args:
chdir: '{{ log_dir_windows }}'
removes: '{{ log_dir_windows }}\sapinst_logs'
register: sapinst_log_name
failed_when: sapinst_log_name.rc > 0
when:
- ansible_os_family == "Windows"
tags:
- 5.1-dbload
when:
- platform == 'SQLSERVER'
- ansible_os_family == "Windows"
...
# /*----------------------------------------------------------------------------8
# | END |
# +------------------------------------4--------------------------------------*/