---
schemaVersion: "2.2"
description: "Execute installation"
parameters:
  DbProductId:
    type: String
    description: "(Required) The id of the product to be installed"
    default: ''
  PasProductId:
    type: String
    description: "(Required) The id of the product to be installed"
    default: ''
  Sid:
    type: String
    description: "(Required) The system id of SAP system"
    default: ''
  Hostname:
    type: String
    description: '(Required) The Hostname of the instance'
    default: ''
  MasterPassword:
    type: String
    description: '(Required) SAP NetWeaver Master Password'
    default: ''
  PasIniFile:
    type: String
    description: '(Required) Path to INI file'
    default: '/sapmnt/software/pas.params'
  DbIniFile:
    type: String
    description: '(Required) Path to INI file'
    default: '/sapmnt/software/db.params'
  DbHostname:
    type: String
    description: '(Required) The hostname of HANA DB Host'
    default: ''
  DbPrivateIp:
    type: String
    description: '(Required) The IP of HANA DB Host'
    default: ''
  AscsHostname:
    type: String
    description: '(Required) The hostname of HANA DB Host'
    default: ''
  DnsPrivateZoneName:
    type: String
    description: "(Optional) DNS Zone name to specify FQDN in hosts"
    default: '${DNSPrivateZoneName}'
mainSteps:
- action: "aws:runShellScript"
  name: "Set_services_file"
  inputs:
    runCommand:
    - #!/bin/bash
    - cat /sapmnt/services >> /etc/services
- action: "aws:runShellScript"
  name: "Prepare_db_ini"
  inputs:
    runCommand:
    - #!/bin/bash
    - DB_INI_FILE={{ DbIniFile }}
    - SID=`echo {{ Sid }} | tr '[:lower:]' '[:upper:]'}`
    - sid=`echo {{ Sid }} | tr '[:upper:]' '[:lower:]'}`
    - SIDadmUID=1003
    - SAPsysGID=1004
    - SW_TARGET=/sapmnt/software
    - SAPInstanceNum=00
    - HOSTED_ZONE={{ DnsPrivateZoneName }}
    - SIDADM=$${sid}adm
    - SAP_SCHEMA_NAME=SAPHANADB
    - sed -i  "/NW_HDB_getDBInfo.dbhost/ c\NW_HDB_getDBInfo.dbhost = {{ DbHostname }}" $DB_INI_FILE    
    - #set the password from the SSM parameter store
    - sed -i  "/NW_HDB_getDBInfo.systemPassword/ c\NW_HDB_getDBInfo.systemPassword = {{ MasterPassword }}" $DB_INI_FILE
    - sed -i  "/storageBasedCopy.hdb.systemPassword/ c\storageBasedCopy.hdb.systemPassword = {{ MasterPassword }}" $DB_INI_FILE
    - sed -i  "/HDB_Schema_Check_Dialogs.schemaPassword/ c\HDB_Schema_Check_Dialogs.schemaPassword = {{ MasterPassword }}" $DB_INI_FILE
    - sed -i  "/NW_GetMasterPassword.masterPwd/ c\NW_GetMasterPassword.masterPwd = {{ MasterPassword }}" $DB_INI_FILE
    - sed -i  "/NW_HDB_DB.abapSchemaPassword/ c\NW_HDB_DB.abapSchemaPassword = {{ MasterPassword }}" $DB_INI_FILE
    - sed -i  "/NW_HDB_getDBInfo.systemDbPassword/ c\NW_HDB_getDBInfo.systemDbPassword = {{ MasterPassword }}" $DB_INI_FILE
    - sed -i  "/NW_Recovery_Install_HDB.sidAdmPassword/ c\NW_Recovery_Install_HDB.sidAdmPassword = {{ MasterPassword }}" $DB_INI_FILE
    - #set the SID and Schema
    - sed -i  "/NW_HDB_getDBInfo.dbsid/ c\NW_HDB_getDBInfo.dbsid = $${SID}" $DB_INI_FILE
    - sed -i  "/NW_readProfileDir.profileDir/ c\NW_readProfileDir.profileDir = /sapmnt/$${SID}/profile" $DB_INI_FILE
    - sed -i  "/NW_HDB_DB.abapSchemaName/ c\NW_HDB_DB.abapSchemaName = $${SAP_SCHEMA_NAME}" $DB_INI_FILE
    - sed -i  "/NW_Recovery_Install_HDB.sidAdmName/ c\NW_Recovery_Install_HDB.sidAdmName = $${SIDADM}" $DB_INI_FILE
    - sed -i  "/NW_HDB_getDBInfo.instanceNumber/ c\NW_HDB_getDBInfo.instanceNumber = $${SAPInstanceNum}" $DB_INI_FILE
    - sed -i  "/storageBasedCopy.hdb.instanceNumber/ c\storageBasedCopy.hdb.instanceNumber = $${SAPInstanceNum}" $DB_INI_FILE
    - #set the UID and GID
    - sed -i  "/nwUsers.sidAdmUID/ c\nwUsers.sidAdmUID = $${SIDadmUID}" $DB_INI_FILE
    - sed -i  "/nwUsers.sapsysGID/ c\nwUsers.sapsysGID = $${SAPsysGID}" $DB_INI_FILE
    # - #set the CD location based on $SW_TARGET
    - sed -i  "/archives.downloadBasket/ c\archives.downloadBasket = $${SW_TARGET}/S4H1909" $DB_INI_FILE
    - sed -i  "/NW_Recovery_Install_HDB.extractLocation/ c\NW_Recovery_Install_HDB.extractLocation = /backup/data/$${SID}" $DB_INI_FILE
- action: "aws:runShellScript"
  name: "Prepare_pas_ini"
  inputs:
    runCommand:
    - #!/bin/bash
    - PAS_INI_FILE={{ PasIniFile }}
    - SIDadmUID=1003
    - SAPsysGID=1004
    - SW_TARGET=/sapmnt/software
    - SAPInstanceNum=00
    - HOSTED_ZONE={{ DnsPrivateZoneName }}
    - LHOSTNAME=`hostname`
    - FQDN=$${LHOSTNAME}.$${HOSTED_ZONE}
    - ASCS_HOSTNAME={{ AscsHostname }}
    - SAPMasterPassword={{ MasterPassword }}
    - SID=`echo {{ Sid }} | tr '[:lower:]' '[:upper:]'}`
    - SAP_SCHEMA_NAME=SAPHANADB
    - #set the password from the SSM parameter store
    - sed -i  "/NW_GetMasterPassword.masterPwd/ c\NW_GetMasterPassword.masterPwd = {{ MasterPassword }}" $PAS_INI_FILE
    - sed -i  "/storageBasedCopy.hdb.systemPassword/ c\storageBasedCopy.hdb.systemPassword = {{ MasterPassword }}" $PAS_INI_FILE
    - sed -i  "/storageBasedCopy.abapSchemaPassword/ c\storageBasedCopy.abapSchemaPassword = {{ MasterPassword }}" $PAS_INI_FILE
    - sed -i  "/HDB_Schema_Check_Dialogs.schemaPassword/ c\HDB_Schema_Check_Dialogs.schemaPassword = {{ MasterPassword }}" $PAS_INI_FILE
    - sed -i  "/NW_HDB_getDBInfo.systemDbPassword/ c\NW_HDB_getDBInfo.systemDbPassword = {{ MasterPassword }}" $PAS_INI_FILE
    - sed -i  "/nwUsers.sidadmPasswod/ c\nwUsers.sidadmPassword = {{ MasterPassword }}" $PAS_INI_FILE
    - sed -i  "/hostAgent.sapAdmPassword/ c\hostAgent.sapAdmPassword = {{ MasterPassword }}" $PAS_INI_FILE
    - sed -i  "/NW_HDB_DB.abapSchemaPassword/ c\NW_HDB_DB.abapSchemaPassword = {{ MasterPassword }}" $PAS_INI_FILE
    - #set the profile directory
    - sed -i  "/NW_readProfileDir.profileDir/ c\NW_readProfileDir.profileDir = /sapmnt/$${SID}/profile" $PAS_INI_FILE
    - #set the SID and Schema
    - sed -i  "/NW_HDB_DB.abapSchemaName/ c\NW_HDB_DB.abapSchemaName = $${SAP_SCHEMA_NAME}" >> $PAS_INI_FILE
    - sed -i  "/storageBasedCopy.hdb.instanceNumber/ c\storageBasedCopy.hdb.instanceNumber = $${SAPInstanceNum}" $PAS_INI_FILE
    - sed -i  "/NW_CI_Instance.ascsInstanceNumber/ c\NW_CI_Instance.ascsInstanceNumber = $${SAPInstanceNum}" $PAS_INI_FILE
    - sed -i  "/NW_CI_Instance.ciInstanceNumber/ c\NW_CI_Instance.ciInstanceNumber = $${SAPInstanceNum}" $PAS_INI_FILE
    - #set the UID and GID
    - sed -i  "/nwUsers.sidAdmUID/ c\nwUsers.sidAdmUID = $${SIDadmUID}" $PAS_INI_FILE
    - sed -i  "/nwUsers.sapsysGID/ c\nwUsers.sapsysGID = $${SAPsysGID}" $PAS_INI_FILE
    - #set the CD location based on $SW_TARGET
    - sed -i  "/archives.downloadBasket/ c\archives.downloadBasket = $${SW_TARGET}/S4H1909" $PAS_INI_FILE
    - sed -i  "/NW_getFQDN.FQDN/ c\NW_getFQDN.FQDN = $${HOSTED_ZONE}" $PAS_INI_FILE
    - sed -i  "/NW_CI_Instance.ciVirtualHostname/ c\NW_CI_Instance.ciVirtualHostname = $${HOSTNAME}" $PAS_INI_FILE
    - sed -i  "/NW_CI_Instance.ascsVirtualHostname/ c\NW_CI_Instance.ascsVirtualHostname = $${ASCS_HOSTNAME}" $PAS_INI_FILE 
- action: "aws:runShellScript"
  name: "Execute_installation_of_db_instance"
  inputs:
    runCommand:
    - #!/bin/bash
    - echo '`date` Starting the Installation process of DB instance...' | tee -a $SSM_LOG_FILE
    - SWPMFILE=`find /sapmnt/software/SWPM-SUM/ -name SWPM*SAR`
    - chmod 775 /sapmnt/software/utils/sapcar
    - /sapmnt/software/utils/sapcar -xvf $SWPMFILE -R /sapmnt/software/SWPM    
    - SAPAliasName=`hostname`
    - chmod 755 /sapmnt/software/SWPM/sapinst
    - cd /sapmnt/software/SWPM
    - ./sapinst SAPINST_INPUT_PARAMETERS_URL=/sapmnt/software/db.params SAPINST_EXECUTE_PRODUCT_ID={{DbProductId}} SAPINST_USE_HOSTNAME=$${SAPAliasName} SAPINST_SKIP_DIALOGS="true" SAPINST_START_GUISERVER=false | tee -a $SSM_LOG_FILE
- action: "aws:runShellScript"
  name: "Execute_installation_of_pas_instance"
  inputs:
    runCommand:
    - #!/bin/bash
    - echo '`date` Starting the Installation process...' | tee -a $SSM_LOG_FILE
    - SAPAliasName=`hostname`
    - chmod 755 /sapmnt/software/SWPM/sapinst
    - cd /sapmnt/software/SWPM
    - ./sapinst SAPINST_INPUT_PARAMETERS_URL=/sapmnt/software/pas.params SAPINST_EXECUTE_PRODUCT_ID={{PasProductId}} SAPINST_USE_HOSTNAME=$${SAPAliasName} SAPINST_SKIP_DIALOGS="true" SAPINST_START_GUISERVER=false | tee -a $SSM_LOG_FILE
- action: "aws:runShellScript"
  name: "Validate_Installation"
  inputs:
    runCommand:
    - #!/bin/bash
    - sid=`echo {{ Sid }} | tr '[:upper:]' '[:lower:]'}`
    - SID=`echo {{ Sid }} | tr '[:lower:]' '[:upper:]'}`
    - HOSTNAME=`hostname`
    - SIDADM=$${sid}adm
    - chown -R $${SIDADM}:sapsys /usr/sap/trans
    - su - $SIDADM -c "stopsap $HOSTNAME" | tee -a $SSM_LOG_FILE
    - su - $SIDADM -c "startsap $HOSTNAME" | tee -a $SSM_LOG_FILE
    - sleep 15
    - _SAP_UP=$(netstat -an | grep 3200 | grep tcp | grep LISTEN | wc -l )
    - echo "This is the value of SAP_UP - $_SAP_UP" | tee -a $SSM_LOG_FILE
    - if [ "$_SAP_UP" -eq 1 ]
    - then
    -   echo "$(date) __ done installing PAS." | tee -a $SSM_LOG_FILE
    -   exit 0
    - else 
    -   echo "$(date) __ PAS could not be installed successfully. Fix the issue and rerun the automation" | tee -a $SSM_LOG_FILE
    -   exit 1
    - fi