deploy/ansible/playbook_04_00_00_db_install.yaml (778 lines of code) (raw):
# Copyright (c) Microsoft Corporation.
# Licensed under the MIT License.
---
# /*----------------------------------------------------------------------------8
# | |
# | Prepare for DB Install |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: localhost
name: "Database Installation Playbook: - Initialization"
gather_facts: true
vars_files:
- vars/ansible-input-api.yaml # API Input template with defaults
tasks:
- name: "Database Installation Playbook: - Create Progress folder"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress"
state: directory
mode: 0755
- name: "Database Installation Playbook: - Create Progress db folder"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db"
state: directory
mode: 0755
- name: "Database Installation Playbook: - Remove db-install-done flag"
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db-install-done"
state: absent
- name: "Database Installation Playbook: - Set hdb fact"
ansible.builtin.set_fact:
tier: hdb
- name: "Database Installation Playbook: - Read/Create passwords"
ansible.builtin.include_role:
name: roles-misc/0.1-passwords
public: true
tags:
- 0.1-passwords
- name: "Database Installation 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: "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: "Database Installation Playbook: - Read/Create key vault secrets"
ansible.builtin.include_role:
name: roles-misc/0.2-kv-secrets
public: true
vars:
# tier: fencing
operation: fencing
when: (database_high_availability and database_cluster_type == "AFA")
tags:
- 0.2-kv-secrets
- name: "Database Installation Playbook: - Read storage account details"
ansible.builtin.include_role:
name: roles-misc/0.3.sap-installation-media-storage-details
public: true
vars:
tier: bom_download
tags:
- kv-sap-installation-media-storage-details
- name: "Database Installation Playbook: - Generate root password"
ansible.builtin.set_fact:
root_password: "{{ lookup('ansible.builtin.password', '/dev/null', seed=inventory_hostname) }}"
when:
- database_scale_out is defined
- database_scale_out
register: root_password_generated
- name: "Database Installation Playbook: - Show root password"
ansible.builtin.debug:
msg: "{{ hostvars.localhost.root_password }}"
verbosity: 4
when:
- hostvars.localhost.root_password is defined
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for HANA DB Install |
# | No Scale Out configuration |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_DB"
name: DB Installation - HANA
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: true # Important to collect hostvars information
any_errors_fatal: 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: "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: "Database Installation Playbook: - Install HANA"
become: true
when:
- node_tier == 'hana'
- not database_scale_out
block:
- name: "Database Installation Playbook: - Setting the DB facts"
ansible.builtin.set_fact:
tier: hdb # Actions for HANA DB Serve
main_password: "{{ hostvars.localhost.sap_password }}"
sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}"
sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}"
# Only applicable for scale out with HSR
tags:
- always
- name: "Database Installation Playbook: - Show SAP password"
ansible.builtin.debug:
msg: "{{ hostvars.localhost.sap_password }}"
verbosity: 4
- name: "Run the Database installation Playbook"
block:
- name: "Database Installation Playbook: - run HANA installation"
ansible.builtin.include_role:
name: roles-db/4.0.0-hdb-install
when:
- not database_scale_out
- name: "Database Installation Playbook: - Create db-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db/db-install-done{{ ansible_hostname }}"
state: touch
mode: 0755
when:
- hana_already_installed is defined or (hana_installation.rc is defined and hana_installation.rc == 0)
always:
- name: "Database Installation Playbook: - Get the Error lines from installation output"
ansible.builtin.set_fact:
error_lines: "{{ error_lines | default([]) + [item] }}"
with_items: "{{ hana_installation.stdout_lines }}"
when:
- hana_installation is defined
- hana_installation.stdout_lines is defined
- '"ERROR" in item'
- name: "Database Installation Playbook: - Run post installation routines"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: "_DB"
tier: 'hana'
- name: "Database Installation Playbook: - Show errors from HANA installation"
ansible.builtin.debug:
msg: "{{ error_lines }}"
when:
- error_lines is defined
tags:
- 4.0.0-hdb-install
- name: "Database Installation Playbook: - Install Pacemaker (base)"
become: true
when:
# - db_high_availability
- database_high_availability
- node_tier == 'hana'
- not database_scale_out
block:
- name: "Database Installation Playbook: - Setting the facts"
ansible.builtin.set_fact:
tier: ha
main_password: "{{ hostvars.localhost.sap_password }}"
password_ha_db_cluster: "{{ hostvars.localhost.db_cluster_password }}"
primary_instance_name: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name
secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name
# fencing_spn_client_id: "{% if not use_msi_for_clusters %}{{ hostvars.localhost.sap_fencing_spn_client_id }}{% endif %}"
# fencing_spn_client_pwd: "{% if not use_msi_for_clusters %}{{ hostvars.localhost.sap_fencing_spn_pwd }}{%- endif %}"
# fencing_spn_tenant_id: "{% if not use_msi_for_clusters %}{{ hostvars.localhost.sap_fencing_spn_tenant_id }}{%- endif %}"
- name: "Database Installation Playbook: - Setting the facts for fencing"
ansible.builtin.set_fact:
fencing_spn_client_id: "{{ hostvars.localhost.sap_fencing_spn_client_id }}"
fencing_spn_client_pwd: "{{ hostvars.localhost.sap_fencing_spn_pwd }}"
fencing_spn_tenant_id: "{{ hostvars.localhost.sap_fencing_spn_tenant_id }}"
when:
- database_cluster_type == "AFA"
- not use_msi_for_clusters
- name: "Database Installation Playbook: - Ensure the correct repositories are set"
ansible.builtin.include_role:
name: roles-os/1.3-repository
tags:
- 1.3-repository
- name: "Database Installation Playbook: - Ensure the correct packages are installed"
ansible.builtin.include_role:
name: roles-os/1.4-packages
tags:
- 1.4-packages
# Setup the kernel parameters required for pacemaker cluster VMs
- name: "Database Installation Playbook: - Ensure the correct kernel parameters are set"
ansible.builtin.include_role:
name: roles-os/1.9-kernelparameters
tags:
- 1.9-kernelparameters
- name: "Database Installation Playbook: - Ensure the needed services are enabled/disabled"
ansible.builtin.include_role:
name: roles-os/1.16-services
tags:
- 1.16-services
- name: "Database Installation Playbook: - Ensure the accounts are present"
ansible.builtin.include_role:
name: roles-os/1.11-accounts
tags:
- 1.11-accounts
- name: "Database Installation Playbook: - Install Pacemaker"
ansible.builtin.include_role:
name: roles-os/1.17-generic-pacemaker # Configures the Pacemaker cluster with Azure fence agent
apply:
tags:
- 1.17-generic-pacemaker
become: true
become_user: root
when:
- node_tier != 'oracle'
- node_tier != 'oracle-asm'
tags:
- 1.17-generic-pacemaker
- name: "Database Installation Playbook: - Create pacemaker-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/pacemaker-install-done"
state: touch
mode: 0755
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for HANA DB Install |
# | Scale Out configuration Only |
# +------------------------------------4--------------------------------------*/
# This configures HANA Scale out ( netapp and HSR shared nothing )
- hosts: "{{ sap_sid | upper }}_DB"
name: DB Installation - HANA Scale Out
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: true # Important to collect hostvars information
any_errors_fatal: true
vars_files:
- vars/ansible-input-api.yaml # API Input template with defaults
tasks:
- 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
# This configures root account on HANA nodes for scale out configuration ( shared and shared nothing with HSR ) to use password based login.
- name: "SAP HANA: Configure root credential for Scale-Out"
block:
- name: Reset root password
become: true
ansible.builtin.user:
name: root
update_password: always
password: "{{ hostvars.localhost.root_password | password_hash('sha512') }}"
- name: Enable {{ item.key }} in /etc/ssh/sshd_config
become: true
ansible.builtin.lineinfile:
path: "/etc/ssh/sshd_config"
regex: "^(# *)?{{ item.key }}"
line: "{{ item.key }} {{ item.value }}"
state: present
loop:
- { key: "PermitRootLogin", value: "yes" }
- { key: "PasswordAuthentication", value: "yes" }
- { key: "ChallengeResponseAuthentication", value: "yes" }
- name: "Restart SSHD on {{ ansible_hostname }}"
become: true
ansible.builtin.service:
name: sshd
state: restarted
when:
- database_scale_out
- hostvars.localhost.root_password is defined
- name: "Database Installation Playbook: - Install HANA Scale Out"
become: true
when:
- node_tier == 'hana'
- database_scale_out
block:
- name: "Database Installation Playbook: - Setting the DB facts"
ansible.builtin.set_fact:
tier: hdb # Actions for HANA DB Serve
main_password: "{{ hostvars.localhost.sap_password }}"
sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}"
sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}"
primary_instance_name: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name
secondary_instance_name: "{{ ansible_play_hosts_all[1] | default('')}}" # Setting up Secondary Instance Name
# Only applicable for scale out with HSR
tags:
- always
- name: "Database Installation Playbook: - Setting the DB Scale Out facts"
ansible.builtin.set_fact:
root_password: "{{ hostvars.localhost.root_password }}"
when:
# - database_scale_out is defined
- database_scale_out
# - not db_high_availability
- name: "Database Installation Playbook: - Show SAP password"
ansible.builtin.debug:
msg: "{{ hostvars.localhost.sap_password }}"
verbosity: 4
- name: "Run the Database installation Playbook"
block:
- name: "Database Installation Playbook: - run HANA installation"
ansible.builtin.include_role:
name: roles-db/4.0.0-hdb-install
when:
- not database_scale_out
- name: "Database Installation Playbook: - Clear the failed state of hosts"
ansible.builtin.meta: clear_host_errors
# - name: "Database installation Playbook: - run HANA Scale-Out mounts"
# ansible.builtin.include_role:
# name: roles-sap-os/2.6-sap-mounts
# when:
# - database_scale_out | default(false) == true
- name: "Database Installation Playbook: - run HANA Scale-Out installation"
ansible.builtin.include_role:
name: roles-db/4.0.3-hdb-install-scaleout
when:
- database_scale_out
- name: "Database Installation Playbook: - Create db-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db/db-install-done{{ ansible_hostname }}"
state: touch
mode: 0755
when:
- hana_already_installed is defined or (hana_installation.rc is defined and hana_installation.rc == 0)
always:
- name: "Database Installation Playbook: - Get the Error lines from installation output"
ansible.builtin.set_fact:
error_lines: "{{ error_lines | default([]) + [item] }}"
with_items: "{{ hana_installation.stdout_lines }}"
when:
- hana_installation is defined
- hana_installation.stdout_lines is defined
- '"ERROR" in item'
- name: "Database Installation Playbook: - Run post installation routines"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: "_DB"
tier: 'hana'
- name: "Database Installation Playbook: - Show errors from HANA installation"
ansible.builtin.debug:
msg: "{{ error_lines }}"
when:
- error_lines is defined
tags:
- 4.0.0-hdb-install
# This disables root account on HANA nodes for scale out configuration ( shared and shared nothing with HSR ) to use password based login.
- name: "SAP HANA: disable root credential for Scale-Out"
block:
- name: Reset root password to random local value
become: true
ansible.builtin.user:
name: root
update_password: always
password: "{{ lookup('ansible.builtin.password', '/dev/null', seed=inventory_hostname) | password_hash('sha512') }}"
- name: Enable {{ item.key }} in /etc/ssh/sshd_config
become: true
ansible.builtin.lineinfile:
path: "/etc/ssh/sshd_config"
regex: "^(# *)?{{ item.key }}"
line: "{{ item.key }} {{ item.value }}"
state: present
loop:
- { key: "PermitRootLogin", value: "yes" }
- { key: "PasswordAuthentication", value: "no" }
- { key: "ChallengeResponseAuthentication", value: "no" }
- name: "Restart SSHD on {{ ansible_hostname }}"
become: true
ansible.builtin.service:
name: sshd
state: restarted
when:
- database_scale_out
- hostvars.localhost.root_password is defined
# Configure HANA Scale out Pacemaker, run on DB nodes and majority maker node ( first node if multiple are provided, rest are ignored. )
- hosts: "{{ sap_sid | upper }}_DB:
{{ sap_sid | upper }}_OBSERVER_DB"
name: DB Installation - HANA Scale Out - Pacemaker
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: true # Important to collect hostvars information
any_errors_fatal: true
vars_files:
- vars/ansible-input-api.yaml # API Input template with defaults
tasks:
- name: "Database Installation Playbook: - Install Pacemaker (Scale Out)"
become: true
when:
# - db_high_availability
- db_high_availability
- node_tier in ['hana','observer']
- database_scale_out
block:
- name: "Database Installation Playbook: - Setting the facts"
ansible.builtin.set_fact:
tier: ha
main_password: "{{ hostvars.localhost.sap_password }}"
password_ha_db_cluster: "{{ hostvars.localhost.db_cluster_password }}"
primary_instance_name: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name
secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name
# root_password: "{{ hostvars.localhost.root_password }}"
# fencing_spn_client_id: "{% if not use_msi_for_clusters %}{{ hostvars.localhost.sap_fencing_spn_client_id }}{% endif %}"
# fencing_spn_client_pwd: "{% if not use_msi_for_clusters %}{{ hostvars.localhost.sap_fencing_spn_pwd }}{%- endif %}"
# fencing_spn_tenant_id: "{% if not use_msi_for_clusters %}{{ hostvars.localhost.sap_fencing_spn_tenant_id }}{%- endif %}"
- name: "Database Installation Playbook: - Setting the facts for fencing"
ansible.builtin.set_fact:
fencing_spn_client_id: "{{ hostvars.localhost.sap_fencing_spn_client_id }}"
fencing_spn_client_pwd: "{{ hostvars.localhost.sap_fencing_spn_pwd }}"
fencing_spn_tenant_id: "{{ hostvars.localhost.sap_fencing_spn_tenant_id }}"
when:
- database_cluster_type == "AFA"
- not use_msi_for_clusters
- name: "Database Installation Playbook: - Ensure the correct repositories are set"
ansible.builtin.include_role:
name: roles-os/1.3-repository
tags:
- 1.3-repository
- name: "Database Installation Playbook: - Ensure the correct packages are installed"
ansible.builtin.include_role:
name: roles-os/1.4-packages
tags:
- 1.4-packages
# Setup the kernel parameters required for pacemaker cluster VMs
- name: "Database Installation Playbook: - Ensure the correct kernel parameters are set"
ansible.builtin.include_role:
name: roles-os/1.9-kernelparameters
tags:
- 1.9-kernelparameters
- name: "Database Installation Playbook: - Ensure the needed services are enabled/disabled"
ansible.builtin.include_role:
name: roles-os/1.16-services
tags:
- 1.16-services
- name: "Database Installation Playbook: - Ensure the accounts are present"
ansible.builtin.include_role:
name: roles-os/1.11-accounts
tags:
- 1.11-accounts
# Scale out based pacemaker task/s
- name: "Database Installation Playbook: - Install Scale Out Pacemaker"
ansible.builtin.include_role:
name: roles-os/1.18-scaleout-pacemaker # Configures the Pacemaker cluster with Azure fence agent
apply:
tags:
- 1.18-scaleout-pacemaker
become: true
become_user: root
when:
- node_tier in ['hana','observer']
- database_scale_out
tags:
- 1.18-scaleout-pacemaker
- name: "Database Installation Playbook: - Create pacemaker-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/pacemaker-install-done"
state: touch
mode: 0755
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for Oracle DB Install
# | CREATE USERS for SAP Installation |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_DB"
name: DB Installation - Oracle
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: false
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: "Database Installation Playbook: - Install Oracle"
become: true
become_user: root
when:
- node_tier == 'oracle-multi-sid'
- platform == 'ORACLE'
block:
- name: "Database Installation Playbook: - Setting the DB facts"
ansible.builtin.set_fact:
tier: ora # Actions for Oracle DB Servers
main_password: "{{ hostvars.localhost.sap_password }}"
tags:
- always
- name: "Configure accounts for ora-msid"
ansible.builtin.include_role:
name: roles-os/1.11-accounts
# /*---------------------------------------------------------------------------8
# | |
# | Playbook for Oracle DB Install |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_DB"
name: DB Installation - Oracle
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: false
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: "Database Installation Playbook: - Install Oracle"
become: true
become_user: root
when:
- node_tier == 'oracle'
- platform == 'ORACLE'
block:
- name: "Database Installation Playbook: - Setting the DB facts"
ansible.builtin.set_fact:
tier: ora # Actions for Oracle DB Servers
main_password: "{{ hostvars.localhost.sap_password }}"
tags:
- always
- name: "Configure accounts for oracle"
ansible.builtin.include_role:
name: roles-os/1.11-accounts
- name: "Configure accounts for oracle"
ansible.builtin.include_role:
name: roles-os/1.11-accounts
- name: "Database Installation Playbook: - Check for file system mounts"
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
- name: "Database Installation Playbook: - run Oracle installer"
ansible.builtin.include_role:
name: roles-db/4.1.0-ora-install
- name: "Database Installation Playbook: - Run post installation routines"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: "_DB"
tier: 'oracle'
- name: "Database Installation Playbook: - Create db-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db/db-install-done{{ ansible_hostname }}"
state: touch
mode: 0755
- name: "Install Oracle for MSID"
become: true
become_user: root
when:
- node_tier == 'oracle-multi-sid'
- platform == 'ORACLE'
block:
- name: Setting the DB facts for MSID
ansible.builtin.set_fact:
tier: ora # Actions for Oracle DB Servers
main_password: "{{ hostvars.localhost.sap_password }}"
tags:
- always
- name: Include 1.5.2-disk-setup-ora-multi-sid role
ansible.builtin.include_role:
name: roles-os/1.5.2-disk-setup-ora-multi-sid
- name: Check for file system mounts
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
when: node_tier == 'oracle-multi-sid'
- name: Installing Oracle
ansible.builtin.include_role:
name: roles-db/4.1.3-ora-multi-sid
when: node_tier == 'oracle-multi-sid'
- name: "Database Installation Playbook: - Create db-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db/db-install-done{{ ansible_hostname }}"
state: touch
mode: 0755
# Install Oracle DB based on ASM
- name: "Install Oracle on ASM"
become: true
become_user: root
when:
- node_tier == 'oracle-asm'
- platform == 'ORACLE-ASM'
block:
- name: Setting the DB facts for ASM
ansible.builtin.set_fact:
tier: ora # Actions for Oracle DB Servers
main_password: "{{ hostvars.localhost.sap_password }}"
tags:
- always
- name: Include 1.5.1.1-disk-setup-asm-sap
ansible.builtin.include_role:
name: roles-os/1.5.1.1-disk-setup-asm-sap
- name: "OS configuration playbook: - Ensure the kernel parameters are set"
ansible.builtin.include_role:
name: roles-os/1.9-kernelparameters
tags:
- 1.9-kernelparameters
# - name: "SAP OS configuration playbook: - Configure accounts"
# ansible.builtin.include_role:
# name: roles-os/1.11-accounts
# tags:
# - 1.11-accounts
- name: "SAP OS configuration playbook: - Create SAP users/groups"
ansible.builtin.include_role:
name: roles-sap-os/2.5-sap-users
tags:
- 2.5-sap-users
- name: Mount the file systems for ASM installation
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
- name: Include 1.5.1-disk-setup-asm role
ansible.builtin.include_role:
name: roles-os/1.5.1-disk-setup-asm
- name: Check for file system mounts
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
- name: Installing Oracle ASM Grid
ansible.builtin.include_role:
name: roles-db/4.1.1-ora-asm-grid
tags: 4.1.1-ora-asm-grid
- name: Installing Oracle on ASM
ansible.builtin.include_role:
name: roles-db/4.1.2-ora-asm-db-install
- name: "Database Installation Playbook: - Create db-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db/db-install-done{{ ansible_hostname }}"
state: touch
mode: 0755
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for DB2 DB Install |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid| upper }}_DB[0]"
name: "DB Installation - SAP DB2"
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: false
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: "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: "Install SAP DB2"
become: true
become_user: root
when:
- platform == 'DB2'
- not database_high_availability
block:
- name: "DB2 : Setting the DB facts"
ansible.builtin.set_fact:
tier: db2 # Actions for Oracle DB Servers
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
tags:
- always
- name: "DB2 : Install DB2 specific packages"
ansible.builtin.include_role:
name: roles-os/1.4-packages
- name: "DB2 : Check for file system mounts"
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
- name: Installing DB2
ansible.builtin.include_role:
name: roles-db/4.2.0-db2-install
- name: "Database Installation Playbook: - Run post installation routines"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: "_DB"
tier: 'db2'
prefix: "{{ bom.product_ids.dblha.replace('.', '/').replace('/ABAP', '').split(':')[1] }}"
path: "INSTALL/DISTRIBUTED/ABAP/DB"
this_sid: "{{ sap_sid }}"
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for DB2 DB HA Install |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid| upper }}_DB"
name: "DB Installation - SAP DB2 HA"
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: false
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: "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: "Install SAP DB2"
become: true
become_user: root
when:
- platform == 'DB2'
- database_high_availability
- (ansible_play_hosts_all | length) >= 2
block:
- name: Setting the DB facts
ansible.builtin.set_fact:
tier: db2 # Actions for DB2 Servers
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
primary_instance_name: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name
secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name
tags:
- always
- name: "DB2 Installation Play: Install DB2 specific packages"
ansible.builtin.include_role:
name: roles-os/1.4-packages
- name: "DB2 Installation Play: Check for file system mounts"
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
- name: "DB2 Installation Play: Installing DB2"
ansible.builtin.include_role:
name: roles-db/4.2.1-db2-hainstall
- name: "DB2 Installation Play: : - Run post installation routines"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: "_DB"
tier: 'db2'
prefix: "{{ bom.product_ids.dblha.replace('.', '/').replace('/' + db2_instance_type, '').split(':')[1] }}"
path: "INSTALL/DISTRIBUTED/{{ db2_instance_type }}/DB"
this_sid: "{{ sap_sid }}"
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for ASE DB Install |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid| upper }}_DB[0]"
name: "DB Installation - SAP ASE"
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: false
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: "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: "Install SAP ASE"
become: true
become_user: root
when:
- platform == 'SYBASE'
- not database_high_availability
block:
- name: "ASE Installation Play: Setting the DB facts"
ansible.builtin.set_fact:
tier: sybase
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
sa_enabled: true
tags:
- always
- name: "ASE Installation Play: Install ASE specific packages"
ansible.builtin.include_role:
name: roles-os/1.4-packages
- name: "ASE Installation Play: Check for file system mounts"
ansible.builtin.include_role:
name: roles-sap-os/2.6-sap-mounts
- name: "ASE Installation Play: Installing ASE"
ansible.builtin.include_role:
name: roles-db/4.3.0-ase-install
- name: "ASE Installation Play: Run post installation routines"
ansible.builtin.include_role:
name: roles-sap/7.0.0-post-install
vars:
suffix: "_DB"
prefix: "{{ bom.product_ids.dbl.replace('.', '/').replace('/ABAP', '').split(':')[1] }}"
path: "INSTALL/DISTRIBUTED/ABAP/DB"
tier: 'sybase'
this_sid: "{{ sap_sid | upper }}"
work_log_component_name: "ASE{{ db_instance_number }}"
# /*----------------------------------------------------------------------------8
# | |
# | Playbook for SQL Server Install on Windows |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_DB"
name: DB Installation - SQLSERVER
remote_user: "{{ orchestration_ansible_user }}"
gather_facts: false
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: "Database Installation Playbook: - Install SQL Server on Windows"
when:
- platform == 'SQLSERVER'
- node_tier == 'sqlserver'
block:
- name: "Database Installation Playbook: - Setting the DB facts"
ansible.builtin.set_fact:
tier: sqlserver # Actions for sql Servers
main_password: "{{ hostvars.localhost.sap_password }}"
config_tier: "sqlserver"
tags:
- always
- name: "DBLoad Playbook: - Ensure Sharing Data Folder"
ansible.builtin.include_role:
name: roles-sap-os/windows/2.3-sap-exports
- name: "Database Installation Playbook: - Run SQL Server Installation"
ansible.builtin.include_role:
name: roles-db/windows/4.4.0-mssql-install
vars:
domain_user_password: "{{ hostvars.localhost.winadm_password }}"
- name: "Database Installation Playbook: - Create db-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db/db-install-done{{ ansible_hostname }}"
state: touch
mode: 0755
vars:
become_user: "{{ become_user_name }}"
# add platform in sap-parameters.yaml to execute tasks for DB2, ORACLE, MSSQL, SYBASE
# # /*----------------------------------------------------------------------------8
# # | |
# # | PLAYBOOK FOR DB LOGGING |
# # | |
# # +------------------------------------4--------------------------------------*/
# - name: "Database Installation Playbook: - Create db-install-done flag"
# delegate_to: localhost
# become: false
# ansible.builtin.file:
# path: "{{ _workspace_directory }}/.progress/db-install-done"
# state: touch
# mode: 0755
# /*---------------------------------------------------------------------------8
# | |
# | Playbook for Validating DB Install |
# | |
# +------------------------------------4--------------------------------------*/
- hosts: "{{ sap_sid | upper }}_DB"
name: SAP Post Installation - DB
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: "DB Playbook - Post Install: Check for files in progress folder"
ansible.builtin.find:
path: "{{ _workspace_directory }}/.progress/db"
patterns: "*"
register: find_progress_files
delegate_to: localhost
become: false
- name: "DB Playbook - Post Install: - Create db-install-done flag"
delegate_to: localhost
become: false
ansible.builtin.file:
path: "{{ _workspace_directory }}/.progress/db-install-done"
state: touch
mode: 0755
when: find_progress_files.matched == (ansible_play_hosts | length)
...
# /*----------------------------------------------------------------------------8
# | END |
# +------------------------------------4--------------------------------------*/