deploy/ansible/roles-sap/windows/5.1-dbload/tasks/main.yaml (212 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # /*---------------------------------------------------------------------------8 # | | # | SAP: Register BOM | # | SAP DBLOAD: deploy DBLOAD Parameter file install template | # | SAP DBLOAD: Install | # | | # +------------------------------------4--------------------------------------*/ --- - name: "DBLoad: - Create run flag directory" ansible.windows.win_file: path: '{{ sap_deployment_automation }}\{{ sid_to_be_deployed.sid | upper }}' state: directory # - name: "DBLoad: - reset" # ansible.windows.win_file: # path: '{{ sap_deployment_automation }}\{{ sid_to_be_deployed.sid | upper }}\sap_deployment_dbload.txt' # state: absent # when: reinstall - name: "DBLoad: - check if {{ sid_to_be_deployed.sid | upper }} is installed" ansible.windows.win_stat: path: '{{ sap_deployment_automation }}\{{ sid_to_be_deployed.sid | upper }}\sap_deployment_dbload.txt' register: dbload_installed - name: "DBLoad: - 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: "DBLoad: - Set the DB Server name list" ansible.builtin.set_fact: db_server_temp: "{{ db_server_temp | default([]) + [item] }}" with_items: - "{{ query('inventory_hostnames', '{{ sap_sid | upper }}_DB') }}" - name: "DBLoad: - Set dbload facts" ansible.builtin.set_fact: sap_inifile: "{{ bom_base_name }}-dbload-{{ sid_to_be_deployed.sid | lower }}-{{ ansible_hostname }}.params" sap_inifile_template: "dbload-inifile-param.j2" scs_server: "{{ hostvars[scs_server_temp | first]['virtual_host'] }}" db_virtual_hostname: "{{ hostvars[db_server_temp | first]['virtual_host'] }}" scs_sapmnt_server: "{% if scs_high_availability %}{{ sid_to_be_deployed.sid | lower }}scs{{ scs_instance_number }}cl1{% else %}{{ hostvars[scs_server_temp | first]['virtual_host'] }}{% endif %}" dir_params: '{{ tmp_directory_windows }}\params' product_catalog: '{{ download_directory_windows }}\SWPM\product.catalog' - name: "DBLoad: - Set dbload facts" ansible.builtin.debug: msg: - "INIFILE: {{ sap_inifile }}" - "TEMPLATE: {{ sap_inifile_template }}" - "SAP SWPM SERVER: {{ custom_scs_virtual_hostname | default(scs_server, true) }}" - "DB VIRTUAL HOST: {{ custom_db_virtual_hostname | default(db_virtual_hostname, true) }}" - "DOWNLOAD DIR: {{ download_directory_windows }}" - "PARAMS DIR: {{ dir_params }}" - "CATALOG PATH: {{ product_catalog }}" # 0x) Create directory for parameter files - name: "DBLoad: Create a directory" ansible.windows.win_file: path: "{{ dir_params }}" state: directory - name: "DBLoad: Create temp directory for sid" ansible.windows.win_file: path: '{{ tmp_directory_windows }}\{{ sid_to_be_deployed.sid | upper }}' state: directory # 1x) Create directories for sapinst_extraction if not existing. - name: "DBLoad: Create sapinst Extraction Directory" ansible.windows.win_file: path: '{{ download_directory_windows }}\sap_extract' state: directory vars: ansible_become: true ansible_become_method: ansible.builtin.runas ansible_become_user: '{{ sap_sid }}adm@{{ domain_name }}' ansible_become_password: "{{ domain_user_password }}" - name: "DBLoad: Create log Directory" ansible.windows.win_file: path: '{{ log_dir_windows }}\sapinst_logs' state: directory # 2x) Install vcredist package then reboot. - name: "Install Visual C++ 2017 Redistributable package" ansible.windows.win_package: path: '{{ download_directory_windows }}\SWPM\NTPATCH\VCREDIST2017\VC_redist.x64.exe' product_id: '{CF2BEA3C-26EA-32F8-AA9B-331F7E34BA97}' state: present arguments: '/norestart /log vcredist_x64.log /quiet' vars: ansible_become: true ansible_become_method: ansible.builtin.runas ansible_become_user: '{{ sap_sid }}adm@{{ domain_name }}' ansible_become_password: "{{ domain_user_password }}" register: vcredist2017_output - name: "Reboot after package installation" ansible.windows.win_reboot: reboot_timeout: 600 post_reboot_delay: 120 when: vcredist2017_output.reboot_required - name: "DBLoad: Include 3.3.1-bom-utility role" ansible.builtin.include_role: name: roles-sap/windows/3.3.1-bom-utility tasks_from: bom-register vars: bom_name: "{{ bom_base_name }}" tier: dbload task_prefix: "DBLoad: " sa_enabled: true - name: "SQL Disks" ansible.builtin.set_fact: vm_data_disks: '{{ sql_disk_list[0] | join(",") }}' vm_log_disks: '{{ sql_disk_list[1] | join(",") }}' vars: sql_disk_list: "{{ lookup('template', 'sql_disks.j2') }}" - name: "Print SQL Disks" ansible.builtin.debug: msg: - "SQL DATA Disks: {{ vm_data_disks }}" - "SQL LOG Disks: {{ vm_log_disks }}" - name: "DBLoad: Create ini file {{ sap_inifile }}" ansible.windows.win_template: src: "{{ sap_inifile_template }}" dest: '{{ dir_params }}\{{ sap_inifile }}' force: true vars: sap_cd_package_cd2: sap_cd_package_cd3: sap_cd_package_cd4: sap_cd_package_cd5: sap_ciInstanceNumber: app_instance_number: sap_ciDialogWPNumber: sap_ciBtcWPNumber: sap_installSAPHostAgent: sap_profile_dir: '\\{{ scs_sapmnt_server }}\sapmnt\{{ sid_to_be_deployed.sid | upper }}\SYS\profile' sap_scs_hostname: "{{ scs_sapmnt_server }}" sap_db_hostname: "{{ custom_db_virtual_hostname | default(db_virtual_hostname, true) }}" sap_ciVirtualHostname: sap_appVirtualHostname: param_directory: "{{ dir_params }}" sap_sid: "{{ sid_to_be_deployed.sid }}" sidadm_uid: "{{ sid_to_be_deployed.sidadm_uid }}" data_disks: "{{ vm_data_disks }}" log_disks: "{{ vm_log_disks }}" - name: "DBLoad: install variables" ansible.builtin.debug: msg: - "INSTALLED: {{ dbload_installed.stat.exists }}" - "INIFILE: {{ sap_inifile }}" - "PRODUCT ID: {{ bom.product_ids.dbl }}" - "SCSHOST: {{ scs_sapmnt_server }}" - "DBHOST: {{ custom_db_virtual_hostname | default(db_virtual_hostname, true) }}" - "SID: {{ sid_to_be_deployed.sid | upper }}" - name: "DBLoad: - status" block: - name: "DBLoad: - status" ansible.builtin.debug: msg: "DBLoad is already performed ({{ sid_to_be_deployed.sid | upper }})" - name: "DBLoad: - return value" ansible.builtin.set_fact: dbload_already_performed: true when: - dbload_installed.stat.exists # - name: "DBLoad: - Include 4.4.1-mssql-create-DB task" # ansible.builtin.include_role: # name: roles-db/windows/4.4.0-mssql-install # tasks_from: 4.4.1-mssql-create-DB - name: "DBLoad: - Install" block: # *====================================4=======================================8 # SAP DBLOAD: Install # 2230669 - System Provisioning Using a Parameter Input File # # *====================================4=======================================8 - name: "DBLoad: progress" ansible.builtin.debug: msg: "Starting DBLoad for {{ sid_to_be_deployed.sid | upper }}. Please wait" - name: "DBLoad: sapinst Extraction" ansible.windows.win_shell: | {{ download_directory_windows }}\SWPM\sapinst.exe -extract args: chdir: '{{ download_directory_windows }}\sap_extract' creates: '{{ download_directory_windows }}\sap_extract\sapinst.exe' vars: ansible_become: true ansible_become_method: ansible.builtin.runas ansible_become_user: '{{ sap_sid }}adm@{{ domain_name }}' ansible_become_password: "{{ domain_user_password }}" register: scs_extraction failed_when: scs_extraction.rc > 0 - name: "DBLoad: - run SAPInst" ansible.windows.win_shell: | {{ download_directory_windows }}\sap_extract\sapinst.exe SAPINST_INPUT_PARAMETERS_URL={{ dir_params }}\{{ sap_inifile }} ` SAPINST_EXECUTE_PRODUCT_ID={{ bom.product_ids.dbl }} ` SAPINST_SKIP_DIALOGS=true ` SAPINST_START_GUI=false ` SAPINST_CONTROL_URL={{ product_catalog }} ` SAPINST_START_GUISERVER=false args: chdir: '{{ log_dir_windows }}\sapinst_logs' creates: '{{ sap_deployment_automation }}\{{ sid_to_be_deployed.sid | upper }}\sap_deployment_dbload.txt' vars: ansible_become: true ansible_become_method: ansible.builtin.runas ansible_become_user: '{{ sap_sid }}adm@{{ domain_name }}' ansible_become_password: "{{ domain_user_password }}" register: dbload_results failed_when: dbload_results.rc > 0 # async: 7200 # poll: 0 # - name: "DBLoad Install -Wait for asynchronous job to end" # ansible.builtin.async_status: # jid: "{{ dbload_results.ansible_job_id }}" # register: job_result # until: job_result.finished # retries: 120 # delay: 60 # when: dbload_results.ansible_job_id is defined # - name: "DBLoad: Installation results" # ansible.builtin.debug: # msg: # - "DBLoad : {{ dbload_results }}" # #- "Job result: {{ job_result }}" - name: "DBLoad: Installation results" ansible.builtin.debug: var: dbload_results when: - dbload_results is defined - dbload_results.rc > 0 - name: "DBLoad Install: Cleanup ini file {{ ansible_hostname }}" ansible.windows.win_file: path: '{{ dir_params }}\{{ sap_inifile }}' state: absent - name: "DBLoad Install: Installation results" ansible.builtin.debug: msg: "DBLoad Installation succeeded" when: - dbload_results.rc is defined - dbload_results.rc == 0 - name: "DBLoad: Find the installationSuccesfullyFinished.dat (SAPINST)" ansible.windows.win_find: paths: '{{ log_dir_windows }}\sapinst_logs' file_type: file patterns: 'installationSuccesfullyFinished.dat' recurse: true register: dbload_installed_according_to_sapinst - name: "DBLoad: - set completion flag" ansible.windows.win_file: path: '{{ sap_deployment_automation }}\{{ sid_to_be_deployed.sid | upper }}\sap_deployment_dbload.txt' state: touch when: - dbload_results is defined - dbload_results.rc == 0 - dbload_installed_according_to_sapinst is defined - dbload_installed_according_to_sapinst.matched > 0 when: - not dbload_installed.stat.exists ... # /*---------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/