deploy/ansible/playbook_04_00_01_db_ha.yaml (598 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. --- # /*----------------------------------------------------------------------------8 # | | # | Playbook for HANA DB HSR | # | | # +------------------------------------4--------------------------------------*/ - hosts: localhost name: "Get SAP Password from KeyVault" gather_facts: 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 - name: "Initialization" when: database_high_availability block: - name: "Create Progress folder" ansible.builtin.file: path: "{{ _workspace_directory }}/.progress" state: directory mode: 0755 - name: "Remove db-ha-done flag" ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/db-ha-done" state: absent - name: "Ensure passlib is installed on the controller" become: true become_user: root ansible.builtin.pip: name: passlib state: present tags: - always # MKD - Fencing is not a tier... it is a misuse to code for that # To detect we should be using: # database_high_availability # AND # database_cluster_type == "AFA" # database_cluster_type == "ASD" # database_cluster_type == "ISCSI" # - name: Initialize facts # ansible.builtin.set_fact: # tier: fencing - name: "Run the misc/password 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: "WinCluster-Create: Get witness account details" ansible.builtin.include_role: name: roles-misc/0.2-kv-secrets tasks_from: wincluster-witness.yaml public: true vars: operation: fencing when: - platform | upper == "SQLSERVER" tags: - 0.2-wincluster-witness - name: "Run the keyvault role" ansible.builtin.include_role: name: roles-misc/0.2-kv-secrets vars: operation: fencing tags: - kv-secrets # +------------------------------------4--------------------------------------*/ - hosts: "{{ sap_sid | upper }}_DB" name: HANA DB HA Configuration 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: "Backward Compatibility - Check required Database HA variables" when: - db_high_availability is defined - database_high_availability is not defined ansible.builtin.set_fact: database_high_availability: "{{ db_high_availability | default(false) }}" - name: "0.0 Validations: - Gather facts for first time" ansible.builtin.setup: tags: - always - name: "HANA HA Setup" become: true when: - database_high_availability - platform == 'HANA' block: - name: "Install HANA System Replication" block: - name: "Retrieve Azure Instance Metadata results" ansible.builtin.uri: url: http://169.254.169.254/metadata/instance?api-version=2021-02-01 use_proxy: false headers: Metadata: true register: azmetadata - name: "Show IMDS results" ansible.builtin.debug: var: azmetadata.json verbosity: 2 - name: "Set the primary intance nic and secondary instance nic IP" ansible.builtin.set_fact: primary_ip: "{{ azmetadata.json.network.interface[0].ipv4.ipAddress[0].privateIpAddress }}" subnet_prefix: "{{ azmetadata.json.network.interface[0].ipv4.subnet[0].prefix }}" - name: "Initialize facts for hdb-hsr role" ansible.builtin.set_fact: tier: hdb # Actions for HANA DB Servers primary_instance_name : "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name primary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[0]]['primary_ip'] | string }}" secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name secondary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[1]]['primary_ip'] | string }}" main_password: "{{ hostvars.localhost.sap_password }}" - name: "Run the db/hdb-hsr role" ansible.builtin.include_role: name: roles-db/4.0.1-hdb-hsr when: - node_tier == 'hana' tags: - 4.0.1-hdb-hsr - name: "Install HANA Pacemaker resources" block: - name: "Initialize facts for HANA pacemaker resources" ansible.builtin.set_fact: tier: ha password_ha_db_cluster: "{{ hostvars.localhost.db_cluster_password }}" main_password: "{{ hostvars.localhost.sap_password }}" primary_instance_name: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name primary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[0]]['primary_ip'] | string }}" secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name secondary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[1]]['primary_ip'] | string }}" 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 %}" tags: - always - name: "HANA HA Setup: - Ensure the needed services are started" ansible.builtin.include_role: name: roles-os/1.16-services tags: - 1.16-services - name: "HANA HA Setup: - run the Pacemaker role" ansible.builtin.include_role: name: roles-sap/5.5-hanadb-pacemaker when: - database_high_availability - not database_scale_out tags: - 5.5-hanadb-pacemaker - name: "HANA HA Setup: - run the Pacemaker role for scale out" ansible.builtin.include_role: name: roles-sap/5.8-hanadb-scaleout-pacemaker when: - database_high_availability - database_scale_out tags: - 5.8-hanadb-scaleout-pacemaker # -------------------------------------+---------------------------------------8 # # Build the list of tasks to be executed in order here. # # -------------------------------------+---------------------------------------8 # Oracle installation has to be done with oracle user. Change the user to become orasid and call the installer. - hosts: "{{ sap_sid | upper }}_DB" name: DB Data Guard setup - Oracle remote_user: "{{ orchestration_ansible_user }}" gather_facts: 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 - name: "Initialize facts for HA resources" ansible.builtin.set_fact: tier: ha 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 when: - database_high_availability - ansible_play_hosts_all | length >= 2 - name: "Oracle Data Guard Setup" when: - database_high_availability - platform in ['ORACLE', 'ORACLE-ASM'] - inventory_hostname == primary_instance_name become: true block: - name: Setting the DB facts ansible.builtin.set_fact: tier: ora # Actions for Oracle DB Servers action: 'Prepare_Secondary' main_password: "{{ hostvars.localhost.sap_password }}" tags: - always - name: Oracle Data guard ansible.builtin.include_role: name: roles-db/4.1.3-ora-dg tags: - 4.1.3-ora-dg - name: "Oracle Data Guard Setup" when: - database_high_availability - platform in ['ORACLE', 'ORACLE-ASM'] become: true block: - name: Setting the DB facts ansible.builtin.set_fact: tier: ora # Actions for Oracle DB Servers action: 'Prepare_and_Restore' main_password: "{{ hostvars.localhost.sap_password }}" tags: - always - name: Oracle Data guard ansible.builtin.include_role: name: roles-db/4.1.3-ora-dg tags: - 4.1.3-ora-dg - name: "Observer Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_DC_ACTION_1" tier: 'oracle' - name: "Oracle Data Guard Setup" when: - database_high_availability - platform in ['ORACLE', 'ORACLE-ASM'] - inventory_hostname == primary_instance_name become: true block: - name: Setting the DB facts ansible.builtin.set_fact: tier: ora # Actions for Oracle DB Servers action: 'Post_Processing_Primary' main_password: "{{ hostvars.localhost.sap_password }}" tags: - always - name: Oracle Data guard ansible.builtin.include_role: name: roles-db/4.1.3-ora-dg tags: - 4.1.3-ora-dg - name: "Observer Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_DC_ACTION_2" tier: 'oracle' - name: "Oracle Data Guard Setup on Secondary" when: - db_high_availability - platform in ['ORACLE', 'ORACLE-ASM'] - inventory_hostname == secondary_instance_name become: true block: - name: Setting the DB facts ansible.builtin.set_fact: tier: ora # Actions for Oracle DB Servers action: 'Post_Processing_Secondary' main_password: "{{ hostvars.localhost.sap_password }}" tags: - always - name: Oracle Data guard ansible.builtin.include_role: name: roles-db/4.1.3-ora-dg tags: - 4.1.3-ora-dg - name: "Observer Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_DC_ACTION_2" tier: 'oracle' - name: "Oracle Data Guard Setup on Secondary" when: - db_high_availability - platform in ['ORACLE', 'ORACLE-ASM'] - inventory_hostname == secondary_instance_name become: true block: - name: Setting the DB facts ansible.builtin.set_fact: tier: ora # Actions for Oracle DB Servers action: 'Post_Processing_Secondary' main_password: "{{ hostvars.localhost.sap_password }}" tags: - always - name: Oracle Data guard ansible.builtin.include_role: name: roles-db/4.1.3-ora-dg tags: - 4.1.3-ora-dg - name: "Observer Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_DC_ACTION_2" tier: 'oracle' # /*----------------------------------------------------------------------------8 # | | # | PLAY FOR Observer Node setup | # | | # +------------------------------------4--------------------------------------*/ - hosts: "{{ sap_sid | upper }}_OBSERVER_DB" name: Observer Playbook 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: "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: "Get Instance names" ansible.builtin.set_fact: primary_observer_name : "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name secondary_observer_name: "{{ ansible_play_hosts_all[1] | default('N/A') }}" # Setting up Secondary Instance Name - name: "Oracle: Observer setup" become: true when: - database_high_availability - platform in ['ORACLE', 'ORACLE-ASM'] block: - name: "Observer Playbook: Setting the DB facts" ansible.builtin.set_fact: node_tier: observer action: 'Setup_Observer' main_password: "{{ hostvars.localhost.sap_password }}" tags: - always # Specify the active tier for this playbook run - name: "Observer Playbook: Setting the os tier facts" ansible.builtin.set_fact: tier: os tags: - always - name: "Observer Play" become: true block: - name: "Observer Playbook: Check if the mounts place" ansible.builtin.include_role: name: roles-sap-os/2.6-sap-mounts - name: "Observer Play" become: true block: - name: "Observer Playbook: Check if the mounts place" ansible.builtin.include_role: name: roles-sap-os/2.6-sap-mounts - name: "Observer Playbook: Oracle Observer setup" ansible.builtin.include_role: name: roles-db/4.1.3-ora-dg - name: "Observer Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_OBSERVER" tier: 'oracle' # # /*-------------------------------------------------------------------------8 # # | | # # | Playbook for DB2 DB Install - High Availability | # # | | # # +------------------------------------4------------------------------------*/ # -------------------------------------+---------------------------------------8 # DB2 - High Availabiliy Setup | # a. Install DB2 on Primary Server | # b. Take offline backup of Primary DB | # c. Install DB2 on Secondary Server using backup restore option | # d. Rrestore Secondary/Standby from backup of primary system | # e. HADR parameters on primary and secodary | # f. HADR definition on primary & Secondary | # g. HADR setup Checks | # Split the following section into the pacemaker roles-sap/5.7db2-pacemaker | # c. Pacemaker setup on both nodes | # d. Stonith Checks | # e. Changes to SAP profile | # -------------------------------------+--------------------------------------*/ - hosts: "{{ sap_sid| upper }}_DB" name: "DB HA Installation - SAP DB2" remote_user: "{{ orchestration_ansible_user }}" gather_facts: false vars_files: - vars/ansible-input-api.yaml # API Input template with defaults # -----------------------------------+---------------------------------------8 # # Build the list of tasks to be executed in order here. # # -----------------------------------+---------------------------------------8 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 - name: "DB2 HA - Install SAP DB2 on both nodes" become: true become_user: root block: - name: "DB2 HA - Setting the DB facts" ansible.builtin.set_fact: tier: db2 # Actions for DB2 Servers primary_instance_name : "{{ ansible_play_hosts_all[0] }}" primary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[0]]['ansible_eth0']['ipv4']['address'] }}" secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" secondary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[1]]['ansible_eth0']['ipv4']['address'] }}" main_password: "{{ hostvars.localhost.sap_password }}" tags: - always - name: "DB2 HA - Install Pacemaker (base)" when: - db_high_availability - node_tier == 'db2' block: - name: "DB2 HA - 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: "DB2 HA - repository check" block: - name: "DB2 HA - Ensure the correct repositories are set" ansible.builtin.include_role: name: roles-os/1.3-repository tags: - 1.3-repository - name: "DB2 HA - package check" block: - name: "DB2 HA - Ensure the correct packages are installed" ansible.builtin.include_role: name: roles-os/1.4-packages tags: - 1.4-packages - name: "DB2 HA - set kernel parameters" block: # Setup the kernel parameters required for pacemaker cluster VMs - name: "DB2 HA - Ensure the correct kernel parameters are set" ansible.builtin.include_role: name: roles-os/1.9-kernelparameters tags: - 1.9-kernelparameters - name: "DB2 HA - services check" block: - name: "DB2 HA - Ensure the needed services are enabled/disabled" ansible.builtin.include_role: name: roles-os/1.16-services tags: - 1.16-services - name: "DB2 HA - accounts check" block: - name: "DB2 HA - Ensure the accounts are present" ansible.builtin.include_role: name: roles-os/1.11-accounts tags: - 1.11-accounts - name: "DB2 HA - Generic pacemaker Configuration" 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 tags: - 1.17-generic-pacemaker - name: "DB2 HA - Create pacemaker-install-done flag" delegate_to: localhost become: false ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/pacemaker-install-done" state: touch mode: 0755 - name: "DB2 HA - Install DB2 Pacemaker resources" block: - name: "DB2 HA - Pacemaker - Initialize facts" ansible.builtin.set_fact: tier: ha password_ha_db_cluster: "{{ hostvars.localhost.db_cluster_password }}" main_password: "{{ hostvars.localhost.sap_password }}" primary_instance_name: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name primary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[0]]['ansible_eth0']['ipv4']['address'] }}" secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name secondary_instance_ip_db: "{{ hostvars[ansible_play_hosts_all[1]]['ansible_eth0']['ipv4']['address'] }}" # sap_hana_fencing_spn_client_id: "{{ hostvars.localhost.sap_fencing_spn_client_id }}" # sap_hana_fencing_spn_client_pwd: "{{ hostvars.localhost.sap_fencing_spn_pwd }}" # sap_hana_fencing_spn_tenant_id: "{{ hostvars.localhost.sap_fencing_spn_tenant_id }}" tags: - always - name: "DB2 HA - Pacemaker - Run the Pacemaker setup" ansible.builtin.include_role: name: roles-sap/5.7-db2-pacemaker tags: - 5.7-db2-pacemaker when: - database_high_availability - platform == 'DB2' # # /*-------------------------------------------------------------------------8 # # | | # # | Playbook for SQLServer DB - High Availability | # # | | # # +------------------------------------4------------------------------------*/ - hosts: "{{ sap_sid| upper }}_DB" name: "DB HA Installation - SAP SQLServer" remote_user: "{{ orchestration_ansible_user }}" gather_facts: true vars_files: - vars/ansible-input-api.yaml # API Input template with defaults # -----------------------------------+---------------------------------------8 # # Build the list of tasks to be executed in order here. # # -----------------------------------+---------------------------------------8 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 - name: "SQLServer HA - Install SQL4SAP on both nodes" when: - database_high_availability - platform | upper == 'SQLSERVER' - node_tier == 'sqlserver' become: true become_user: "{{ orchestration_ansible_user }}" block: - name: "SQLServer HA - Setting the DB facts" ansible.builtin.set_fact: primary_node: "{{ ansible_play_hosts_all[0] }}" secondary_node: "{{ ansible_play_hosts_all[1] }}" domain_user_password: "{{ hostvars.localhost.winadm_password }}" tags: - always - name: "SQLServer HA - Create run flag directory" ansible.windows.win_file: path: '{{ sap_deployment_automation }}\{{ sap_sid | upper }}' state: directory - name: "SQLServer HA - check if SQL Server service is started" ansible.windows.win_service_info: name: MSSQLServer register: sql_service - name: "WIN-SQL: Print SQL Server service status" ansible.builtin.debug: msg: - "SQL Server Service status: {{ sql_service }}" - name: "SQLServer HA - Install cluster (base)" when: - sql_service.exists - db_high_availability - node_tier == 'sqlserver' block: - name: "SQLServer HA - Set the SCS Server name list" ansible.builtin.set_fact: scs_server_temp: "{{ scs_server_temp | default([]) + [item] }}" with_items: - "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_SCS') }}" - "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_DB') }}" - name: "SQLServer HA - Set the server facts" ansible.builtin.set_fact: scs_server: "{{ hostvars[scs_server_temp | first]['virtual_host'] }}" - name: "SQLServer HA - Setting the facts" ansible.builtin.set_fact: tier: ha primary_node: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name secondary_node: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name domain_user_password: "{{ hostvars.localhost.winadm_password }}" sap_cluster_ip_address: "{{ database_cluster_ip }}" sql_svc_account: "{% if hostvars.localhost.sqlsvc_account is defined %}{{ hostvars.localhost.sqlsvc_account }}{% else %}{{ win_sql_svc_account }}{% endif %}" sql_svc_password: "{% if hostvars.localhost.sqlsvc_account_password is defined %}{{ hostvars.localhost.sqlsvc_account_password }}{% else %}{{ sql_svc_password | default('') }}{% endif %}" sql_agent_account: "{% if hostvars.localhost.sqlagent_account is defined %}{{ hostvars.localhost.sqlagent_account }}{% else %}{{ win_sqlagent_svc_account }}{% endif %}" sql_agent_password: "{% if hostvars.localhost.sqlagent_account_password is defined %}{{ hostvars.localhost.sqlagent_account_password }}{% else %}{{ sql_agent_password | default('') }}{% endif %}" - name: "SQL Server HA config: Base cluster tasks" ansible.builtin.include_role: name: roles-os/windows/1.17-generic-wincluster register: cluster_output vars: sap_cluster_ip_address: "{{ database_cluster_ip }}" primary_node: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name secondary_node: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name domain_user_password: "{{ hostvars.localhost.winadm_password }}" svc_password: "{{ hostvars.localhost.svcadm_password }}" domain_service_account: "{{ hostvars.localhost.adsvc_account }}" domain_service_password: "{{ hostvars.localhost.adsvc_password }}" witness_storage_account_name: "{{ hostvars.localhost.witness_storage_account_name }}" witness_storage_account_key: "{{ hostvars.localhost.witness_storage_account_key }}" win_sql_svc_account: '{{ sql_svc_account }}' win_sql_svc_password: '{{ sql_svc_password }}' win_sqlagent_svc_account: '{{ sql_agent_account }}' win_sqlagent_svc_password: '{{ sql_agent_password }}' - name: "SQL Server HA config: Always On tasks" ansible.builtin.include_role: name: roles-db/windows/4.4.0-mssql-install register: alwayson_output vars: config_tier: "sqlserverha" sap_cluster_ip_address: "{{ database_cluster_ip }}" primary_node: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name secondary_node: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name mssql_primary_node: "{{ ansible_play_hosts_all[0] }}" # Setting up Primary Instance Name mssql_secondary_node: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name domain_user_password: "{{ hostvars.localhost.winadm_password }}" svc_password: "{{ hostvars.localhost.svcadm_password }}" domain_service_account: "{{ hostvars.localhost.adsvc_account }}" domain_service_password: "{{ hostvars.localhost.adsvc_password }}" witness_storage_account_name: "{{ hostvars.localhost.witness_storage_account_name }}" witness_storage_account_key: "{{ hostvars.localhost.witness_storage_account_key }}" win_sql_svc_account: "{{ sql_svc_account }}" win_sql_svc_password: "{{ sql_svc_password }}" win_sqlagent_svc_account: "{{ sql_agent_account }}" win_sqlagent_svc_password: "{{ sql_agent_password }}" scs_server_name: "{{ custom_scs_virtual_hostname | default(scs_server, true) }}" tags: - 4.4.1.0-mssql-alwayson - name: "SQLServer HA - Create alwayson-config-done flag" ansible.windows.win_file: path: '{{ sap_deployment_automation }}\{{ sap_sid | upper }}\alwayson-config-done.txt' state: touch force: true # # /*-------------------------------------------------------------------------8 # # | | # # | Playbook for SQLServer DB - High Availability - END | # # | | # # +------------------------------------4------------------------------------*/ # If the DB HA is configured successfully, we need to create the db-ha-done file - hosts: localhost name: "Log results" 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 - name: Ensure db-ha-done file exists ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/db-ha-done" state: touch mode: 0755 when: database_high_availability ... # /*----------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/