deploy/ansible/roles-sap/5.0.0-scs-install/tasks/main.yaml (204 lines of code) (raw):

# Copyright (c) Microsoft Corporation. # Licensed under the MIT License. # /*---------------------------------------------------------------------------8 # | | # | SAP: Register BOM | # | SAP SCS: deploy SCS Parameter file install template | # | SAP SCS: Install | # | | # +------------------------------------4--------------------------------------*/ --- - name: "SCS Install" ansible.builtin.debug: msg: - "SID: {{ sid_to_be_deployed.sid | upper }}" - name: Get 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: "SCS Install: Set the SCS Server name" ansible.builtin.set_fact: scs_server: "{{ hostvars[scs_server_temp | first]['virtual_host'] }}" - name: "SCS Install: Set BOM facts" ansible.builtin.set_fact: sap_inifile: "{{ bom_base_name }}-scs-{{ sid_to_be_deployed.sid | lower }}-{{ ansible_hostname }}.params" sap_inifile_template: "scs-inifile-param.j2" dir_params: "{{ tmp_directory }}/.{{ sid_to_be_deployed.sid | lower }}-params" - name: "SCS Install: - Create directories" ansible.builtin.file: path: "{{ item.path }}" state: directory mode: '{{ item.mode }}' loop: - { mode: '0755', path: '{{ dir_params }}' } - { mode: '0755', path: '{{ tmp_directory }}/{{ sid_to_be_deployed.sid | upper }}' } - { mode: '0755', path: '/etc/sap_deployment_automation/{{ sap_sid | upper }}' } # ToDo: Validate this works # - name: "SCS Install: Find the installationSuccesfullyFinished.dat (SAPINST)" # ansible.builtin.find: # paths: "{{ tmp_directory }}/{{ sid_to_be_deployed.sid | upper }}/sapinst_instdir/{{ bom.product_ids.scs.replace('.', '/').replace('/ABAP', '').split(':')[1] }}/INSTALL/DISTRIBUTED/ABAP/ASCS" # file_type: file # patterns: 'installationSuccesfullyFinished.dat' # recurse: true # register: scs_installed_according_to_sapinst # - name: "SCS Install: show" # ansible.builtin.debug: # var: scs_installed_according_to_sapinst # verbosity: 2 # - name: "SCS Install: flag" # ansible.builtin.file: # path: "/etc/sap_deployment_automation/{{ sid_to_be_deployed.sid | upper }}/sap_deployment_scs.txt" # state: touch # mode: 0755 # when: # - scs_installed_according_to_sapinst is defined # - scs_installed_according_to_sapinst | length > 0 - name: "SCS Install: reset" ansible.builtin.file: path: "/etc/sap_deployment_automation/{{ sid_to_be_deployed.sid | upper }}/sap_deployment_scs.txt" state: absent when: reinstall - name: "SCS Install: check if {{ sid_to_be_deployed.sid | upper }} is installed" ansible.builtin.stat: path: "/etc/sap_deployment_automation/{{ sid_to_be_deployed.sid | upper }}/sap_deployment_scs.txt" register: scs_installed when: "'scs' in supported_tiers" - name: "SCS Install: check if installed" ansible.builtin.debug: var: scs_installed verbosity: 2 - name: "SCS Install: Include 3.3.1-bom-utility role" ansible.builtin.include_role: name: roles-sap/3.3.1-bom-utility tasks_from: bom-register vars: bom_name: "{{ bom_base_name }}" task_prefix: "SCS Install: " sa_enabled: true - name: "SCS Install: register variables" ansible.builtin.set_fact: scs_bom_id: "{{ bom.product_ids.scs }}" scs_bom_instance_type: "{% if bom.InstanceType is defined %}{{ bom.InstanceType | upper }}{% else %}ABAP{% endif %}" - name: "SCS Install: register additional variables" ansible.builtin.set_fact: installGateway: "{% if scs_bom_instance_type == 'ABAP' %}true{% else %}false{% endif %}" - name: "SCS Install" block: # *====================================4=======================================8 # | SAP SCS: Install | # | 2230669 - System Provisioning Using a Parameter Input File | # *====================================4=======================================8 - name: "SCS Install: check media exists" ansible.builtin.stat: path: "{{ target_media_location }}/SWPM/sapinst" register: sapinst_found - name: "ErrorHandling" ansible.builtin.fail: msg: "INSTALL:0002:Unable to find sapinst, please check that the installation media is mounted" when: not sapinst_found.stat.exists - name: "SCS Install: Template processing: Create ini file {{ sap_inifile }} from {{ sap_inifile_template }}" ansible.builtin.template: src: "{{ sap_inifile_template }}" dest: "{{ dir_params }}/{{ sap_inifile }}" mode: 0644 force: true vars: sap_scs_hostname: "{{ scs_virtual_hostname }}" param_directory: "{{ dir_params }}" 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 }}" set_ascsInstallGateway: "{{ installGateway | bool | lower }}" set_ascsInstallWebDispatcher: "{{ ascsInstallWebDispatcher | default(false) | bool | lower }}" - name: "SCS Install: install variables" ansible.builtin.debug: msg: - "INSTALLED: {{ scs_installed.stat.exists }}" - "INIFILE: {{ sap_inifile }}" - "PRODUCT ID: {{ bom.product_ids.scs }}" - "INSTANCE: {{ sid_to_be_deployed.ascs_inst_no }}" - "MEDIA: {{ target_media_location }}" - "HOST: {{ scs_virtual_hostname }}" - "SID: {{ sid_to_be_deployed.sid | upper }}" - name: "SCS Install: Default instance type" ansible.builtin.set_fact: instance_type: "ASCS" when: bom.InstanceType is not defined - name: "SCS Install: register instance type" ansible.builtin.set_fact: instance_type: >- {%- set _instance_type = 'ASCS' -%} {%- if bom.InstanceType == 'JAVA' -%} {%- set _instance_type = 'SCS' -%} {%- elif bom.InstanceType == 'ABAP' -%} {%- set _instance_type = 'ASCS' -%} {%- else -%} {%- set _instance_type = 'ASCS' -%} {%- endif -%} {{- _instance_type -}} public: true when: bom.InstanceType is defined - name: "SCS Install: register variables" ansible.builtin.set_fact: scs_bom_instance_type: "{% if bom.InstanceType is defined %}{{ bom.InstanceType }}{% else %}ABAP{% endif %}" public: true - name: "SCS Install: Create temp directory for sid" ansible.builtin.file: path: "{{ tmp_directory }}/{{ sid_to_be_deployed.sid | upper }}" state: directory mode: 0755 - name: "SCS Install: Comment out required message server prots in /etc/services" ansible.builtin.replace: path: /etc/services regexp: '^([a-z\-]+\s+36{{ scs_instance_number }}/.*)$' replace: '# \1' backup: true - name: "SCS Install: Create Symlink" ansible.builtin.import_tasks: ../../../roles-sap-os/2.10-sap-notes/tasks/2.10.3119751.yaml when: - ansible_os_family == 'RedHat' - "distribution_id != 'oraclelinux8'" - name: "SCS Install: Assign ownership" ansible.builtin.file: path: "{{ item.path }}" owner: '{{ sid_to_be_deployed.sidadm_uid }}' group: sapsys recurse: true state: directory loop: - { path: '/sapmnt/{{ sap_sid | upper }}' } - { path: '/usr/sap/{{ sap_sid | upper }}' } - name: "SCS Install: Progress" ansible.builtin.debug: msg: "Start SCS Installation" - name: "SCS Install: SAP SCS Install on {{ scs_virtual_hostname }}" ansible.builtin.shell: | umask {{ custom_umask | default('022') }} ; ./sapinst SAPINST_INPUT_PARAMETERS_URL={{ dir_params }}/{{ sap_inifile }} \ SAPINST_EXECUTE_PRODUCT_ID={{ bom.product_ids.scs }} \ SAPINST_SKIP_DIALOGS=true \ SAPINST_USE_HOSTNAME={{ scs_virtual_hostname }} \ SAPINST_START_GUISERVER=false args: chdir: "{{ target_media_location }}/SWPM" creates: "/etc/sap_deployment_automation/{{ sid_to_be_deployed.sid | upper }}/sap_deployment_scs.txt" environment: SAPSYSTEMNAME: "{{ sid_to_be_deployed.sid | upper }}" TMPDIR: "{{ tmp_directory }}/{{ sid_to_be_deployed.sid | upper }}" register: scs_installation failed_when: scs_installation.rc > 0 - name: "SCS Install: Cleanup ini file {{ ansible_hostname }}" ansible.builtin.file: path: "{{ dir_params }}/{{ sap_inifile }}" state: absent - name: "SCS Install: Installation results" ansible.builtin.debug: var: scs_installation when: scs_installation.rc > 0 - name: "SCS Install: Installation results" ansible.builtin.debug: msg: "SCS Installation succeeded" when: scs_installation.rc == 0 - name: "SCS Install: Find the installationSuccesfullyFinished.dat (SAPINST)" ansible.builtin.find: paths: "{{ tmp_directory }}/{{ sid_to_be_deployed.sid | upper }}/sapinst_instdir/{{ bom.product_ids.scs.replace('.', '/').replace('/ABAP', '').split(':')[1] }}/INSTALL/DISTRIBUTED/{{ scs_bom_instance_type }}/ASCS" file_type: file patterns: 'installationSuccesfullyFinished.dat' recurse: true register: scs_installed_according_to_sapinst - name: "SCS Install: show" ansible.builtin.debug: var: scs_installed_according_to_sapinst verbosity: 2 - name: "SCS Install: flag" ansible.builtin.file: path: "/etc/sap_deployment_automation/{{ sid_to_be_deployed.sid | upper }}/sap_deployment_scs.txt" state: touch mode: 0755 when: - scs_installation.rc == 0 - scs_installed_according_to_sapinst is defined - scs_installed_according_to_sapinst | length > 0 when: - "'scs' in supported_tiers" - not scs_installed.stat.exists - name: "SCS Install status" block: - name: "SCS Install status" ansible.builtin.debug: msg: "SCS is already installed" - name: "SCS: - return value" ansible.builtin.set_fact: scs_already_installed: true when: - scs_installed.stat.exists ... # /*---------------------------------------------------------------------------8 # | END | # +------------------------------------4--------------------------------------*/