deploy/ansible/playbook_05_03_sap_app_install.yaml (270 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
# /*---------------------------------------------------------------------------8
# | |
# | Prepare for SAP APP Install |
# | |
# +------------------------------------4--------------------------------------*/
---
- hosts: localhost
name: "APP Playbook: Get SAP Password from KeyVault"
gather_facts: true
vars_files:
- vars/ansible-input-api.yaml # API Input template with defaults
tasks:
- name: "APP Playbook: Create Progress folder"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress"
state: directory
mode: 0755
- name: "APP Playbook: Create Progress App folder"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/app"
state: directory
mode: 0755
- name: "APP Playbook: Remove app-install-done flag"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/app-install-done"
state: absent
- name: "APP Playbook: Include 0.1 passwords role"
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: "APP Playbook: Initialize tier"
ansible.builtin.set_fact:
tier: app
- name: "APP Playbook: Run the sap-installation-media-storage-details role"
ansible.builtin.include_role:
name: roles-misc/0.3.sap-installation-media-storage-details
public: true
vars:
tier: app
tags:
- kv-sap-installation-media-storage-details
# /*---------------------------------------------------------------------------8
# | |
# | Playbook for SAP OS USERS and Groups Creation |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_APP"
name: SAP Generic OS Groups and User Creation
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:
- name: Run the APP installation Playbook
become: true
when:
- platform not in [ "ORACLE", "ORACLE-ASM" ]
- ansible_os_family != "Windows"
block:
- name: "APP Installation Playbook: Define this SID"
ansible.builtin.set_fact:
this_sid:
{
'sid': '{{ sap_sid | upper }}',
'dbsid_uid': '{{ hdbadm_uid }}',
'sidadm_uid': '{{ UIDs[ platform ].uid }}',
'ascs_inst_no': '{{ scs_instance_number }}',
'pas_inst_no': '{{ pas_instance_number }}',
'app_inst_no': '{{ app_instance_number }}'
}
- name: "APP Installation 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
# /*---------------------------------------------------------------------------8
# | |
# | Playbook for SAP APP Install |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_APP"
name: SAP Installation - APP
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: "APP Playbook - Install: Set 'app' tier facts"
ansible.builtin.set_fact:
tier: app # SAP Install phase: APP - Application Server
main_password: "{{ hostvars.localhost.sap_password }}"
sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}"
sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}"
app_file_path: INSTALL/AS/APPS/
always_upload_jinja_templates: false
sa_enabled: true
- name: "APP Installation Playbook: Define this SID"
ansible.builtin.set_fact:
this_sid:
{
'sid': '{{ sap_sid | upper }}',
'dbsid_uid': '{{ hdbadm_uid }}',
'sidadm_uid': '{{ UIDs[ platform ].uid }}',
'ascs_inst_no': '{{ scs_instance_number }}',
'pas_inst_no': '{{ pas_instance_number }}',
'app_inst_no': '{{ app_instance_number }}'
}
- name: "APP Installation 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 APP Installation on Linux"
become: true
when: ansible_os_family != "Windows"
block:
- name: "Backward Compatibility - Check required Database HA variables"
ansible.builtin.set_fact:
database_high_availability: "{{ db_high_availability | default(false) }}"
when:
- db_high_availability is defined
- database_high_availability is not defined
- name: "APP Installation playbook: - Determine if part of high availablity deployment"
ansible.builtin.set_fact:
is_ha: "{{ database_high_availability | default(false) }}"
tags:
- always
- name: "APP Installation playbook: - Ensure the kernel parameters are set"
ansible.builtin.include_role:
name: roles-os/1.9-kernelparameters
when: is_ha
tags:
- 1.9-kernelparameters
- name: "APP Installation - Linux based systems"
block:
- name: "APP Playbook - Install: Include 2.6-sap-mounts role"
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
tags:
- 2.6-sap-mounts
- name: Run the APP installation Playbook
block:
- name: "APP Playbook - Install: Include 5.3-app-install"
ansible.builtin.include_role:
name: roles-sap/5.3-app-install
loop: "{{ all_sids }}"
loop_control:
loop_var: sid_to_be_deployed
- name: "APP Playbook - Install: - Create app-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/app-install-done"
state: touch
mode: 0755
when:
- app_already_installed is defined or (app_installation.rc is defined and app_installation.rc == 0)
always:
- name: "APP Playbook - Install: Get the error lines"
ansible.builtin.set_fact:
error_lines: "{{ error_lines | default([]) + [item] }}"
with_items: "{{ app_installation.stdout_lines }}"
when:
- app_installation.stdout_lines is defined
- '"ERROR" in item'
- name: "APP Install: Installation results"
ansible.builtin.debug:
msg:
- "prefix: {{ app_bom_id.replace('.', '/').replace('/PD', '').split(':')[1] }}"
- "path: {{ app_file_path }}"
- name: "APP Playbook - Install: Run post install activities"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: "_APP"
prefix: "{{ app_bom_id.replace('.', '/').replace('/PD', '').split(':')[1] }}"
path: "{{ app_file_path }}"
tier: 'app'
this_sid: "{{ sid_to_be_deployed.sid | upper }}"
work_log_component_name: "D{{ app_instance_number }}"
loop: "{{ all_sids }}"
loop_control:
loop_var: sid_to_be_deployed
- name: "APP Playbook - Install: Errors from APP installation"
ansible.builtin.debug:
msg: "{{ error_lines }}"
when:
- error_lines is defined
tags:
- 5.3-app-install
- name: "Run the APP Installation on Windows"
when:
- "'app' in supported_tiers"
- ansible_os_family == "Windows"
block:
- name: "APP Installation Playbook: - Ensure Sharing Data Folder"
ansible.builtin.include_role:
name: roles-sap-os/windows/2.3-sap-exports
- name: Run the APP installation Playbook
block:
- name: "APP Installation - Add packages"
ansible.builtin.include_role:
name: roles-os/windows/1.4-packages
tags:
- 1.4-packages
vars:
winadm_password: "{{ hostvars.localhost.winadm_password }}"
domain_service_password: "{{ hostvars.localhost.adsvc_password }}"
domain_service_account: "{{ hostvars.localhost.adsvc_account }}"
domain_user_password: "{{ hostvars.localhost.winadm_password }}"
tier: app_tier
- name: "APP Installation Playbook: - Install SAPInst"
ansible.builtin.include_role:
name: roles-sap/windows/5.3-app-install
vars:
scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}"
instance_number: "{{ sid_to_be_deployed.app_inst_no }}"
domain_user_password: "{{ hostvars.localhost.winadm_password }}"
svc_password: "{{ hostvars.localhost.svcadm_password }}"
loop: "{{ all_sids }}"
loop_control:
loop_var: sid_to_be_deployed
always:
- name: "APP Installation Playbook: - Get the Error lines from installation output"
ansible.builtin.set_fact:
error_lines: "{{ error_lines | default([]) + [item] }}"
with_items: "{{ app_installation.stdout_lines }}"
when:
- app_installation.stdout_lines is defined
- '"ERROR" in item'
- app_installation.rc > 0
- name: "APP Installation Playbook: - Run post installation routines"
ansible.builtin.include_role:
name: roles-sap/windows/7.0.0-post-install
vars:
suffix: "_APP"
tier: 'app'
- name: "APP Installation Playbook: - Show errors from APP installation"
ansible.builtin.debug:
msg: "{{ error_lines }}"
when:
- error_lines is defined
- name: "APP Install: 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"
- name: "APP Playbook - Install: - Create app-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/app/app-install-done{{ ansible_hostname }}"
state: touch
mode: 0755
when:
- app_already_installed is defined or (app_installation.rc is defined and app_installation.rc == 0)
tags:
- 5.3-app-win-install
...
# /*---------------------------------------------------------------------------8
# | END |
# +------------------------------------4--------------------------------------*/