deploy/ansible/playbook_05_00_00_sap_scs_install.yaml (603 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. --- # /*---------------------------------------------------------------------------------------------------8 # | | # | Playbook for SAP SCS HA Install and Pacemaker configuration | # | | # +------------------------------------4--------------------------------------------------------------*/ - hosts: localhost name: "SCS Installation Playbook: - Initialization" gather_facts: true vars_files: - vars/ansible-input-api.yaml # API Input template with defaults tasks: - name: "SCS Installation Playbook: - Create Progress folder" ansible.builtin.file: path: "{{ _workspace_directory }}/.progress" state: directory mode: 0755 - name: "SCS Installation Playbook: - Remove scs-install-done flag" ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/scs-install-done" state: absent - name: "SCS Installation Playbook: - Remove ers-install-done flag" ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/ers-install-done" state: absent - name: "SCS Installation Playbook: - Ensure passlib is installed on the controller" become: true become_user: root ansible.builtin.pip: name: passlib state: present tags: - always - name: "SCS Installation Playbook: - Set scs fact" ansible.builtin.set_fact: tier: scs - name: "SCS Installation 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: "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: "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" - scs_high_availability or database_high_availability tags: - 0.2-wincluster-witness # MKD - These two tasks (Above & Below) seem to achieve the same thing? - name: "SCS Installation Playbook: - Read/Create key vault secrets" ansible.builtin.include_role: name: roles-misc/0.2-kv-secrets public: true vars: operation: fencing tags: - kv-secrets - name: "SCS Installation 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 OS USERS and Groups Creation for ASCS/ERS | # | | # +------------------------------------4--------------------------------------*/ - hosts: "{{ sap_sid | upper }}_SCS: {{ sap_sid | upper }}_ERS" serial: 1 name: SAP Generic OS Groups and User Creation 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: "SCS 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 }}' } tags: - always - name: "SCS 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 %}" tags: - always - name: Generic Users and Groups for SAP Installation become: true when: - platform != "ORACLE" - platform != "ORACLE-ASM" - ansible_os_family != "Windows" block: - 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: sap_sid: "{{ sid_to_be_deployed.sid }}" scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}" sidadm_uid: "{{ sid_to_be_deployed.sidadm_uid }}" 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 }}" sa_enabled: true loop: "{{ all_sids }}" loop_control: loop_var: sid_to_be_deployed tags: - 2.5-sap-users - name: Generic Users and Groups for SAP Installation for Oracle SCS High availability become: true when: - platform in ['ORACLE', 'ORACLE-ASM'] - scs_high_availability block: - name: Generic Users and Groups for SAP Installation for Oracle SCS High availability ansible.builtin.include_role: name: roles-sap-os/2.5-sap-users tasks_from: user_nw.yaml vars: sap_sid: "{{ sid_to_be_deployed.sid }}" scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}" sidadm_uid: "{{ sid_to_be_deployed.sidadm_uid }}" 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 SCS Install | # | | # +------------------------------------4--------------------------------------*/ - hosts: "{{ sap_sid | upper }}_SCS : {{ sap_sid | upper }}_DB" name: "SCS Installation Playbook: - SCS" 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: "SCS Installation Playbook: - Standalone SCS Setup" when: - not scs_high_availability - "'scs' in supported_tiers" block: - name: "SCS 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: "SCS 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 SCS Installation Playbook block: - name: "SCS Installation Playbook: - Print Instance Numbers" ansible.builtin.debug: msg: - "db_instance_number: {{ db_instance_number }}" - "scs_instance_number: {{ scs_instance_number }}" verbosity: 2 - name: "SCS Installation Playbook: - SCS Assertions" ansible.builtin.assert: that: - "scs_instance_number != db_instance_number" fail_msg: "Please ensure that the scs_instance_number is different from the db_instance_number" when: - single_server - platform == "HANA" - name: "SCS Installation Playbook: - Set 'scs' tier facts" ansible.builtin.set_fact: tier: scs 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 sa_enabled: true ha_identifier: "" tags: - always - name: "SCS Installation Playbook: - Show SAP password" ansible.builtin.debug: msg: "{{ hostvars.localhost.sap_password }}" verbosity: 4 - name: "Run the SCS Installation on Linux" become: true block: - name: "SCS Installation - Linux based systems" block: - name: "SCS Installation Playbook: - Install SAPInst" ansible.builtin.include_role: name: roles-sap/5.0.0-scs-install vars: scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}" loop: "{{ all_sids }}" loop_control: loop_var: sid_to_be_deployed - name: "SCS Installation Playbook: - Ensure scs-install-done flag exists" delegate_to: localhost become: false ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/scs-install-done" state: touch mode: 0755 when: - scs_already_installed is defined or (scs_installation.rc is defined and scs_installation.rc == 0) always: - name: "SCS Installation Playbook: - Get the Error lines from installation output" ansible.builtin.set_fact: error_lines: "{{ error_lines | default([]) + [item] }}" with_items: "{{ scs_installation.stdout_lines }}" when: - scs_installation.stdout_lines is defined - '"ERROR" in item' - scs_installation.rc > 0 - name: "SCS Installation Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_SCS" prefix: "{{ bom.product_ids.scs.replace('.', '/').replace('/ABAP', '').replace('/JAVA', '').split(':')[1] }}" path: 'INSTALL/DISTRIBUTED/{{ scs_bom_instance_type }}/{{ instance_type }}' tier: 'scs' this_sid: "{{ sid_to_be_deployed.sid | upper }}" work_log_component_name: "ASCS{{ scs_instance_number }}" loop: "{{ all_sids }}" loop_control: loop_var: sid_to_be_deployed - name: "SCS Installation Playbook: - Show errors from SCS installation" ansible.builtin.debug: msg: "{{ error_lines }}" when: - error_lines is defined tags: - 5.0.0-scs-install when: ansible_os_family != "Windows" - name: "Run the SCS Installation on Windows" become: false when: ansible_os_family == "Windows" block: - name: "SCS Installation - Windows based systems" block: - name: "SCS 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 scs_server: "{{ ansible_hostname }}" - name: "SCS Installation Playbook: - Install SAP Central Services" ansible.builtin.include_role: name: roles-sap/windows/5.0.0-scs-install vars: scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}" domain_user_password: "{{ hostvars.localhost.winadm_password }}" svc_password: "{{ hostvars.localhost.svcadm_password }}" primary_node: "{{ ansible_play_hosts_all[0] }}" secondary_node: "" loop: "{{ all_sids }}" loop_control: loop_var: sid_to_be_deployed - name: "SCS Installation Playbook: - Ensure scs-install-done flag exists" delegate_to: localhost become: false ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/scs-install-done" state: touch mode: 0755 when: - scs_already_installed is defined or (scs_installation.rc is defined and scs_installation.rc == 0) always: - name: "SCS Installation Playbook: - Get the Error lines from installation output" ansible.builtin.set_fact: error_lines: "{{ error_lines | default([]) + [item] }}" with_items: "{{ scs_installation.stdout_lines }}" when: - scs_installation.stdout_lines is defined - '"ERROR" or "html" in item' - scs_installation.rc > 0 - name: "SCS Installation Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/windows/7.0.0-post-install vars: suffix: "_SCS" tier: 'scs' domain_user_password: "{{ hostvars.localhost.winadm_password }}" work_log_component_name: "ASCS{{ scs_instance_number }}" - name: "SCS Installation Playbook: - Show errors from the installation" ansible.builtin.debug: msg: "{{ error_lines }}" when: - error_lines is defined - name: "SCS 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" tags: - 5.0.0-scs-install # /*---------------------------------------------------------------------------8 # | | # | Playbook for SAP SCS HA and Pacemaker Resources | # | | # +------------------------------------4--------------------------------------*/ - hosts: "{{ sap_sid | upper }}_SCS : {{ sap_sid | upper }}_ERS" name: "SCS HA Install and Pacemaker Resources" remote_user: "{{ orchestration_ansible_user }}" gather_facts: true # Important to collect hostvars information # serial: 1 # Run the playbook serially 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: "SCS HA Installation Playbook: - LNX - Preparation for SCS HA installation" become: true when: - ansible_os_family != "Windows" - scs_high_availability - "'scs' in supported_tiers or 'ers' in supported_tiers " block: - name: "SCS HA Installation Playbook: - Assertion" ansible.builtin.assert: that: - sap_mnt is defined fail_msg: A highly available SCS deployment requires a shared sap_mnt - name: "SCS HA Installation Playbook: - Initialize facts... General" 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 secondary_instance_name: "{{ ansible_play_hosts_all[1] }}" # Setting up Secondary Instance Name sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}" sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}" sa_enabled: true always_upload_jinja_templates: false scs_virtual_hostname: "{{ sap_sid | lower }}scs{{ scs_instance_number }}cl1" ers_virtual_hostname: "{{ sap_sid | lower }}ers{{ ers_instance_number }}cl2" tags: - always - name: "SCS HA Installation Playbook: - Initialize facts... Fencing" ansible.builtin.set_fact: 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 %}" when: - scs_cluster_type == "AFA" # scs_high_availability = true is already assumed tags: - always - name: "SCS HA Installation Playbook: - Ensure the repositories are registered" ansible.builtin.include_role: name: roles-os/1.3-repository tags: - 1.3-repository - name: "SCS HA Installation Playbook: - Ensure the packages are registered" ansible.builtin.include_role: name: roles-os/1.4-packages tags: - 1.4-packages - name: "SCS HA Installation Playbook: - Ensure the kernel parameters are set" ansible.builtin.include_role: name: roles-os/1.9-kernelparameters tags: - 1.9-kernelparameters - name: "SCS HA Installation Playbook: - Ensure the needed services are started" ansible.builtin.include_role: name: roles-os/1.16-services tags: - 1.16-services - name: "SCS HA 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 tags: - 1.17-generic-pacemaker - name: "SCS HA Installation Playbook: - Ensure the file systems are mounted" ansible.builtin.include_role: name: roles-sap-os/2.6-sap-mounts tags: - 2.6-sap-mounts - name: "SCS HA Installation Playbook: - LNX - HA SCS Setup" when: - scs_high_availability - "'scs' in supported_tiers or 'ers' in supported_tiers " - MULTI_SIDS is undefined - ansible_os_family != "Windows" block: - name: "SCS Installation 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: "SCS Installation Playbook: Define list of SIDs" ansible.builtin.set_fact: all_sids: "{% if MULTI_SIDS is defined %}{{ MULTI_SIDS }}{% else %}{{ [this_sid] }}{% endif %}" - name: Run the SCS HA Installation Playbook block: - name: "SCS HA Installation Playbook: - Configure Pacemaker and ASCS/ERS" ansible.builtin.include_role: name: roles-sap/5.6-scsers-pacemaker public: true vars: scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}" scs_virtual_hostname: "{{ custom_scs_virtual_hostname | default(sap_sid | lower ~ 'scs' ~ scs_instance_number ~ 'cl1', true) }}" ers_virtual_hostname: "{{ custom_ers_virtual_hostname | default(sap_sid | lower ~ 'ers' ~ ers_instance_number ~ 'cl2', true) }}" loop: "{{ all_sids }}" loop_control: loop_var: sid_to_be_deployed - name: "SCS Installation Playbook: - Ensure scs-install-done flag exists" delegate_to: localhost become: false ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/scs-install-done" state: touch mode: 0755 when: - scs_already_installed is defined or (scs_installation.rc is defined and scs_installation.rc == 0) - name: "ERS Installation Playbook: - Ensure ers-install-done flag exists" delegate_to: localhost become: false ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/ers-install-done" state: touch mode: 0755 when: - ers_already_installed is defined or (ers_installation.rc is defined and ers_installation.rc == 0) always: - name: "SCS HA Installation Playbook: - Run post installation routines SCS" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_SCS" prefix: "{{ scs_bom_id.replace('.', '/').replace('/JAVAHA', '').replace('/ABAPHA', '').replace('/HA', '').split(':')[1] }}" path: 'INSTALL/HA/{{ scs_bom_instance_type }}/{{ instance_type }}' tier: 'scs' this_sid: "{{ sap_sid | upper }}" work_log_component_name: "ASCS{{ scs_instance_number }}" when: - scs_bom_id is defined - node_tier == 'scs' - name: "SCS HA Installation Playbook: - Run post installation routines ERS" ansible.builtin.include_role: name: roles-sap/7.0.0-post-install vars: suffix: "_ERS" prefix: "{{ ers_bom_id.replace('.', '/').replace('/ABAPHA', '').replace('/JAVAHA', '').replace('/HA', '').split(':')[1] }}" path: 'INSTALL/HA/{{ ers_bom_instance_type }}/ERS' tier: 'ers' this_sid: "{{ sap_sid | upper }}" work_log_component_name: "ERS{{ ers_instance_number }}" when: - ers_bom_id is defined - node_tier == 'ers' - name: "SCS HA Installation Playbook: - Get the Error lines from installation output (SCS)" ansible.builtin.set_fact: error_lines: "{{ error_lines | default([]) + [item] }}" with_items: "{{ scs_installation.stdout_lines }}" when: - scs_installation.stdout_lines is defined - scs_installation.rc is defined - scs_installation.rc > 0 - '"ERROR" in item' - name: "SCS HA Installation Playbook: - Show errors from SCS installation" ansible.builtin.debug: msg: "{{ error_lines }}" when: - error_lines is defined - name: "SCS HA Installation Playbook: - Get the Error lines from installation output (ERS)" ansible.builtin.set_fact: error_lines: "{{ error_lines | default([]) + [item] }}" with_items: "{{ ers_installation.stdout_lines }}" when: - ers_installation.stdout_lines is defined - ers_installation.rc is defined - ers_installation.rc > 0 - '"ERROR" in item' - name: "SCS HA Installation Playbook: - Show errors from ERS installation" ansible.builtin.debug: msg: "{{ error_lines }}" when: - error_lines is defined tags: - 5.6-scsers-pacemaker - name: "SCS HA Installation Playbook: - Run HA SCS Installation on Windows" become: false when: - ansible_os_family == "Windows" - scs_high_availability block: - name: "SCS Installation - Windows based systems" block: - name: "SCS Installation Playbook: - Install using sapinst" ansible.builtin.include_role: name: roles-sap/windows/5.0.0-scs-install vars: scs_instance_number: "{{ sid_to_be_deployed.ascs_inst_no }}" main_password: "{{ hostvars.localhost.sap_password }}" 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 }}" sapbits_location_base_path: "{{ hostvars.localhost.sapbits_location_base_path }}" sapbits_sas_token: "{{ hostvars.localhost.sapbits_sas_token }}" sa_enabled: true primary_node: "{{ ansible_play_hosts_all[0] }}" secondary_node: "{{ ansible_play_hosts_all[1] }}" sap_cluster_ip_address: "{{ scs_clst_lb_ip }}" primary_node_ip_scs: "{{ hostvars[ansible_play_hosts_all[0]]['ansible_eth0']['ipv4']['address'] }}" secondary_node_ip_ers: "{{ hostvars[ansible_play_hosts_all[1]]['ansible_eth0']['ipv4']['address'] }}" ansible_winrm_transport: credssp ansible_winrm_server_cert_validation: ignore scs_virtual_hostname: "{{ custom_scs_virtual_hostname | default(sap_sid | lower ~ 'scs' ~ scs_instance_number ~ 'cl1', true) }}" ers_virtual_hostname: "{{ custom_ers_virtual_hostname | default(sap_sid | lower ~ 'ers' ~ ers_instance_number ~ 'cl2', true) }}" loop: "{{ all_sids }}" loop_control: loop_var: sid_to_be_deployed - name: "SCS Installation Playbook: - Ensure scs-install-done flag exists" delegate_to: localhost become: false ansible.builtin.file: path: "{{ _workspace_directory }}/.progress/scs-install-done" state: touch mode: 0755 when: - scs_already_installed is defined or (scs_installation.rc is defined and scs_installation.rc == 0) always: - name: "SCS Installation Playbook: - Get the Error lines from installation output" ansible.builtin.set_fact: error_lines: "{{ error_lines | default([]) + [item] }}" with_items: "{{ scs_installation.stdout_lines }}" when: - scs_installation.stdout_lines is defined - '"ERROR" or "html" in item' - scs_installation.rc > 0 - name: "SCS Installation Playbook: - Run post installation routines" ansible.builtin.include_role: name: roles-sap/windows/7.0.0-post-install vars: suffix: "_SCS" tier: 'scs' domain_user_password: "{{ hostvars.localhost.winadm_password }}" work_log_component_name: "ASCS{{ scs_instance_number }}" - name: "SCS Installation Playbook: - Show errors from the installation" ansible.builtin.debug: msg: "{{ error_lines }}" when: - error_lines is defined - name: "SCS 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" tags: - 5.0.0-scs-install ... # /*----------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/