diff --git a/README.md b/README.md
index 88a9678..a1b93c1 100644
--- a/README.md
+++ b/README.md
@@ -1,7 +1,7 @@
# Three Tier SAP S/4HANA Stack Deployment using Terraform and Ansible integration
## Description
-This automation solution is designed for the deployment of **Three Tier SAP S/4HANA Stack** using IBM Cloud Schematics or CLI. The SAP solution will be deployed on top of one of the following Operating Systems: **SUSE Linux Enterprise Server 15 SP 4 for SAP, SUSE Linux Enterprise Server 15 SP 3 for SAP, Red Hat Enterprise Linux 8.6 for SAP, Red Hat Enterprise Linux 8.4 for SAP** in an existing IBM Cloud Gen2 VPC, using an existing [bastion host with secure remote SSH access](https://github.com/IBM-Cloud/sap-bastion-setup).
+This automation solution is designed for the deployment of **Three Tier SAP S/4HANA Stack** using IBM Cloud Schematics or CLI. The SAP solution will be deployed on top of one of the following Operating Systems: **Red Hat Enterprise Linux 8.6 for SAP, Red Hat Enterprise Linux 8.4 for SAP, SUSE Linux Enterprise Server 15 SP 4 for SAP, SUSE Linux Enterprise Server 15 SP 3 for SAP** in an existing IBM Cloud Gen2 VPC, using an existing [bastion host with secure remote SSH access](https://github.com/IBM-Cloud/sap-bastion-setup).
The solution is based on Terraform remote-exec and Ansible playbooks executed by Schematics and it is implementing a 'reasonable' set of best practices for SAP VSI host configuration.
@@ -28,12 +28,12 @@ IBM Cloud Activity Tracker service collects and stores audit records for API cal
- [3.1 Related links](#31-related-links)
## 1.1 Installation media
-SAP HANA installation media used for this deployment is the default one for **SAP HANA, platform edition 2.0 SPS05** available at SAP Support Portal under *INSTALLATION AND UPGRADE* area and it has to be provided manually in the input parameter file.
+SAP HANA installation media used for this deployment is the default one for **SAP HANA, platform edition 2.0 SPS07** available at SAP Support Portal under *INSTALLATION AND UPGRADE* area and it has to be provided manually in the input parameter file.
SAP S/4HANA installation media used for this deployment is the default one for **SAP S/4HANA 2.0** available at SAP Support Portal under *INSTALLATION AND UPGRADE* area and it has to be provided manually in the input parameter file.
## 1.2 VSI Configuration
-The VSIs are deployed with one of the following Operating Systems for DB server: **Suse Linux Enterprise Server 15 SP 4 for SAP HANA (amd64), Suse Linux Enterprise Server 15 SP 3 for SAP HANA (amd6), Red Hat Enterprise Linux 8.6 for SAP HANA (amd64), Red Hat Enterprise Linux 8.4 for SAP HANA (amd64)** and with one of the following Operating Systems for APP server: **Suse Enterprise Linux 15 SP4 for SAP Applications (amd64), Suse Enterprise Linux 15 SP3 for SAP Applications (amd64), Red Hat Enterprise Linux 8.6 for SAP Applications (amd64), Red Hat Enterprise Linux 8.4 for SAP Applications (amd64)**. The SSH keys are configured to allow root user access. The following storage volumes are creating during the provisioning:
+The VSIs are deployed with one of the following Operating Systems for DB server: **Red Hat Enterprise Linux 8.6 for SAP HANA (amd64)**, **Red Hat Enterprise Linux 8.4 for SAP HANA (amd64)**, **Suse Linux Enterprise Server 15 SP 4 for SAP HANA (amd64)**, **Suse Linux Enterprise Server 15 SP 3 for SAP HANA (amd6)** and with one of the following Operating Systems for APP server: **Red Hat Enterprise Linux 8.6 for SAP Applications (amd64)**, **Red Hat Enterprise Linux 8.4 for SAP Applications (amd64)**, **Suse Enterprise Linux 15 SP4 for SAP Applications (amd64)**, **Suse Enterprise Linux 15 SP3 for SAP Applications (amd64)**. The SSH keys are configured to allow root user access. The following storage volumes are creating during the provisioning:
HANA DB VSI Disks:
- the disk sizes depend on the selected profile, according to [Intel Virtual Server certified profiles on VPC infrastructure for SAP HANA](https://cloud.ibm.com/docs/sap?topic=sap-hana-iaas-offerings-profiles-intel-vs-vpc) - Updated on 2023-03-08
@@ -96,10 +96,10 @@ SUBNET | The name of an EXISTING Subnet. The list of Subnets is available [here]
SECURITY_GROUP | The name of an EXISTING Security group. The list of Security Groups is available [here](https://cloud.ibm.com/vpc-ext/network/securityGroups).
DB_HOSTNAME | The Hostname for the HANA VSI. The hostname should be up to 13 characters as required by SAP. For more information on rules regarding hostnames for SAP systems, check [SAP Note 611361: Hostnames of SAP ABAP Platform servers](https://launchpad.support.sap.com/#/notes/%20611361)
DB_PROFILE | The instance profile used for the HANA VSI. The list of certified profiles for HANA VSIs is available [here](https://cloud.ibm.com/docs/sap?topic=sap-hana-iaas-offerings-profiles-intel-vs-vpc).
Details about all x86 instance profiles are available [here](https://cloud.ibm.com/docs/vpc?topic=vpc-profiles).
For more information about supported DB/OS and IBM Gen 2 Virtual Server Instances (VSI), check [SAP Note 2927211: SAP Applications on IBM Virtual Private Cloud](https://launchpad.support.sap.com/#/notes/2927211)
Default value: "mx2-16x128"
-DB_IMAGE | The OS image used for HANA VSI (See Obs*). A list of images is available [here](https://cloud.ibm.com/docs/vpc?topic=vpc-about-images).
Default value: ibm-redhat-8-6-amd64-sap-hana-4
+DB_IMAGE | The OS image used for HANA VSI (See Obs*). A list of images is available [here](https://cloud.ibm.com/docs/vpc?topic=vpc-about-images).
Default value: ibm-redhat-8-6-amd64-sap-hana-5
APP_HOSTNAME | The Hostname for the SAP Application VSI. The hostname should be up to 13 characters as required by SAP. For more information on rules regarding hostnames for SAP systems, check [SAP Note 611361: Hostnames of SAP ABAP Platform servers](https://launchpad.support.sap.com/#/notes/%20611361)
APP_PROFILE | The instance profile used for SAP Application VSI. A list of profiles is available [here](https://cloud.ibm.com/docs/vpc?topic=vpc-profiles)
For more information about supported DB/OS and IBM Gen 2 Virtual Server Instances (VSI), check [SAP Note 2927211: SAP Applications on IBM Virtual Private Cloud](https://launchpad.support.sap.com/#/notes/2927211)
Default value: "bx2-4x16"
-APP_IMAGE | The OS image used for SAP Application VSI (See Obs*). A list of images is available [here](https://cloud.ibm.com/docs/vpc?topic=vpc-about-images).
Default value: ibm-redhat-8-6-amd64-sap-applications-4
+APP_IMAGE | The OS image used for SAP Application VSI (See Obs*). A list of images is available [here](https://cloud.ibm.com/docs/vpc?topic=vpc-about-images).
Default value: ibm-redhat-8-6-amd64-sap-applications-5
**Activity Tracker input parameters**
@@ -112,6 +112,7 @@ ATR_NAME | ATR_NAME The name of an existent Activity Tracker instance, in the sa
Parameter | Description | Requirements
----------|-------------|-------------
+S4HANA_VERSION | The version of S/4HANA | The version can take one of the following values: 2020, 2021, 2022, 2023.
HANA_SID | The SAP system ID identifies the SAP HANA system
_(See Obs.*)_ |
- Consists of exactly three alphanumeric characters
- Has a letter for the first character
- Does not include any of the reserved IDs listed in SAP Note 1979280
|
HANA_SYSNO | Specifies the instance number of the SAP HANA system| - Two-digit number from 00 to 97
- Must be unique on a host
HANA_SYSTEM_USAGE | System Usage | Default: custom
Valid values: production, test, development, custom
@@ -144,18 +145,134 @@ HANA_MAIN_PASSWORD | HANA system master password | - It must be 8 to 14 ch
- **Sensitive** - The variable value is not displayed in your Schematics logs and it is hidden in the input field.
- The following parameters should have the same values as the ones set for the BASTION server: REGION, ZONE, VPC, SUBNET, SECURITYGROUP.
- For any manual change in the terraform code, you have to make sure that you use a certified image based on the SAP NOTE: 2927211.
-- OS **image** for **DB VSI.** Supported OS images for DB VSIs: ibm-sles-15-4-amd64-sap-hana-5, ibm-sles-15-3-amd64-sap-hana-8, ibm-redhat-8-6-amd64-sap-hana-4, ibm-redhat-8-4-amd64-sap-hana-7.
+- OS **image** for **DB VSI.** Supported OS images for DB VSIs: ibm-sles-15-4-amd64-sap-hana-5, ibm-sles-15-3-amd64-sap-hana-8, ibm-redhat-8-6-amd64-sap-hana-5, ibm-redhat-8-4-amd64-sap-hana-7.
- The list of available VPC Operating Systems supported by SAP: SAP note '2927211 - SAP Applications on IBM Virtual Private Cloud (VPC) Infrastructure environment' https://launchpad.support.sap.com/#/notes/2927211; The list of all available OS images: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images
- - Default variable: DB_IMAGE = "ibm-redhat-8-6-amd64-sap-hana-4"
-- OS **image** for **SAP APP VSI**. Supported OS images for APP VSIs: ibm-sles-15-4-amd64-sap-applications-6, ibm-sles-15-3-amd64-sap-applications-9, ibm-redhat-8-6-amd64-sap-applications-7, ibm-redhat-8-4-amd64-sap-applications-4
+ - Default variable: DB_IMAGE = "ibm-redhat-8-6-amd64-sap-hana-5"
+- OS **image** for **SAP APP VSI**. Supported OS images for APP VSIs: ibm-sles-15-4-amd64-sap-applications-6, ibm-sles-15-3-amd64-sap-applications-9, ibm-redhat-8-6-amd64-sap-applications-5, ibm-redhat-8-4-amd64-sap-applications-4
.
- The list of available VPC Operating Systems supported by SAP: SAP note '2927211 - SAP Applications on IBM Virtual Private Cloud (VPC) Infrastructure environment' https://launchpad.support.sap.com/#/notes/2927211; The list of all available OS images: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images
- - Default variable: APP_IMAGE = "ibm-redhat-8-6-amd64-sap-applications-4"
+ - Default variable: APP_IMAGE = "ibm-redhat-8-6-amd64-sap-applications-5"
- SAP **HANA Installation path kit**
- Supported SAP HANA versions on RHEL8.6, RHEL8.4, SLES15.4 and SLES15.3: HANA 2.0 SP 5 Rev 57, kit file: 51055299.ZIP
- Example for RHEL8 or SLES15: KIT_SAPHANA_FILE = "/storage/HANADB/51055299.ZIP"
- Default variable: KIT_SAPHANA_FILE = "/storage/HANADB/51055299.ZIP"
+**Installation media validated for this solution:**
+
+---
+S/4HANA 2023
+---
+
+Component | Version | Filename
+----------|-------------|-------------
+SAPCAR | 7.22 | SAPCAR_1010-70006178.EXE
+SOFTWARE PROVISIONING MGR | 2.0 SP17 PL 0 | SWPM20SP17_0-80003424.SAR
+SAP KERNEL | 7.93 64-BIT UNICODE | SAPEXE_60-70007807.SAR
SAPEXEDB_60-70007806.SAR
+SAP IGS | 7.81 PL 4 | igsexe_4-70005417.sar
+SAP IGS HELPER | PL 17 | igshelper_17-10010245.sar
+SAP HOST AGENT | 7.22 SP61 | SAPHOSTAGENT61_61-80004822.SAR
+HANA CLIENT | 2.18 | IMDB_CLIENT20_018_27-80002082.SAR
+HANA DB | 2.0 SPS07 rev73 | 51057281.ZIP
+
+**OS images validated for this solution:**
+
+OS version | Image | Role
+-----------|-----------|-----------
+Red Hat Enterprise Linux 8.6 for SAP HANA (amd64) | ibm-redhat-8-6-amd64-sap-hana-5 | DB
+Red Hat Enterprise Linux 8.6 for SAP Applications (amd64) | ibm-redhat-8-6-amd64-sap-applications-5 | APP
+SUSE Linux Enterprise Server 15 SP4 for SAP HANA | ibm-sles-15-4-amd64-sap-hana-6 | DB
+SUSE Linux Enterprise Server 15 SP4 for SAP Applications | ibm-sles-15-4-amd64-sap-applications-7 | APP
+Red Hat Enterprise Linux 8.4 for SAP HANA (amd64) | ibm-redhat-8-4-amd64-sap-hana-9 | DB
+Red Hat Enterprise Linux 8.4 for SAP Applications (amd64) | ibm-redhat-8-4-amd64-sap-applications-9 | APP
+SUSE Linux Enterprise Server 15 SP3 for SAP HANA | ibm-sles-15-3-amd64-sap-hana-9 | DB
+SUSE Linux Enterprise Server 15 SP3 for SAP Applications | ibm-sles-15-3-amd64-sap-applications-10 | APP
+
+---
+S/4HANA 2022
+---
+
+Component | Version | Filename
+----------|-------------|-------------
+SAPCAR | 7.22 | SAPCAR_1010-70006178.EXE
+SOFTWARE PROVISIONING MGR | 2.0 SP15 PL 5 | SWPM20SP15_5-80003424.SAR
+SAP KERNEL | 7.89 64-BIT UNICODE PL 200| SAPEXE_200-70006642.SAR
SAPEXEDB_200-70006641.SAR
+SAP IGS | 7.81 PL 4 | igsexe_4-70005417.sar
+SAP IGS HELPER | PL 17 | igshelper_17-10010245.sar
+SAP HOST AGENT | 7.22 SP61 | SAPHOSTAGENT61_61-80004822.SAR
+HANA CLIENT | 2.18 | IMDB_CLIENT20_018_27-80002082.SAR
+HANA DB | 2.0 SPS07 rev73 | 51057281.ZIP
+
+**OS images validated for this solution:**
+
+OS version | Image | Role
+-----------|-----------|-----------
+Red Hat Enterprise Linux 8.6 for SAP HANA (amd64) | ibm-redhat-8-6-amd64-sap-hana-5 | DB
+Red Hat Enterprise Linux 8.6 for SAP Applications (amd64) | ibm-redhat-8-6-amd64-sap-applications-5 | APP
+SUSE Linux Enterprise Server 15 SP4 for SAP HANA | ibm-sles-15-4-amd64-sap-hana-6 | DB
+SUSE Linux Enterprise Server 15 SP4 for SAP Applications | ibm-sles-15-4-amd64-sap-applications-7 | APP
+Red Hat Enterprise Linux 8.4 for SAP HANA (amd64) | ibm-redhat-8-4-amd64-sap-hana-9 | DB
+Red Hat Enterprise Linux 8.4 for SAP Applications (amd64) | ibm-redhat-8-4-amd64-sap-applications-9 | APP
+SUSE Linux Enterprise Server 15 SP3 for SAP HANA | ibm-sles-15-3-amd64-sap-hana-9 | DB
+SUSE Linux Enterprise Server 15 SP3 for SAP Applications | ibm-sles-15-3-amd64-sap-applications-10 | APP
+
+---
+S/4HANA 2021
+---
+
+Component | Version | Filename
+----------|-------------|-------------
+SAPCAR | 7.22 | SAPCAR_1010-70006178.EXE
+SOFTWARE PROVISIONING MGR | 2.0 SP15 PL 5 | SWPM20SP15_5-80003424.SAR
+SAP KERNEL | 7.89 64-BIT UNICODE PL 200| SAPEXE_200-70006642.SAR
SAPEXEDB_200-70006641.SAR
+SAP IGS | 7.81 PL 4 | igsexe_4-70005417.sar
+SAP IGS HELPER | PL 17 | igshelper_17-10010245.sar
+SAP HOST AGENT | 7.22 SP61 | SAPHOSTAGENT61_61-80004822.SAR
+HANA CLIENT | 2.18 | IMDB_CLIENT20_018_27-80002082.SAR
+HANA DB | 2.0 SPS07 rev73 | 51057281.ZIP
+
+**OS images validated for this solution:**
+
+OS version | Image | Role
+-----------|-----------|-----------
+Red Hat Enterprise Linux 8.6 for SAP HANA (amd64) | ibm-redhat-8-6-amd64-sap-hana-5 | DB
+Red Hat Enterprise Linux 8.6 for SAP Applications (amd64) | ibm-redhat-8-6-amd64-sap-applications-5 | APP
+SUSE Linux Enterprise Server 15 SP4 for SAP HANA | ibm-sles-15-4-amd64-sap-hana-6 | DB
+SUSE Linux Enterprise Server 15 SP4 for SAP Applications | ibm-sles-15-4-amd64-sap-applications-7 | APP
+Red Hat Enterprise Linux 8.4 for SAP HANA (amd64) | ibm-redhat-8-4-amd64-sap-hana-9 | DB
+Red Hat Enterprise Linux 8.4 for SAP Applications (amd64) | ibm-redhat-8-4-amd64-sap-applications-9 | APP
+SUSE Linux Enterprise Server 15 SP3 for SAP HANA | ibm-sles-15-3-amd64-sap-hana-9 | DB
+SUSE Linux Enterprise Server 15 SP3 for SAP Applications | ibm-sles-15-3-amd64-sap-applications-10 | APP
+
+---
+S/4HANA 2020
+---
+
+Component | Version | Filename
+----------|-------------|-------------
+SAPCAR | 7.22 | SAPCAR_1010-70006178.EXE
+SOFTWARE PROVISIONING MGR | 2.0 SP15 PL 5 | SWPM20SP15_5-80003424.SAR
+SAP KERNEL | 7.81 64-BIT UNICODE PL 100| SAPEXE_100-70005283.SAR
SAPEXEDB_100-70005282.SAR
+SAP KERNEL | 7.85 64-BIT UNICODE PL 300| SAPEXE_300-80005374.SAR
SAPEXEDB_300-80005373.SAR
+SAP KERNEL | 7.89 64-BIT UNICODE PL 200| SAPEXE_200-70006642.SAR
SAPEXEDB_200-70006641.SAR
+SAP IGS | 7.81 PL 1 | igsexe_1-70005417.sar
+SAP IGS | 7.81 PL 3 | igsexe_3-70005417.sar
+SAP IGS | 7.81 PL 4 | igsexe_4-70005417.sar
+SAP IGS HELPER | PL 17 | igshelper_17-10010245.sar
+SAP HOST AGENT | 7.22 SP61 | SAPHOSTAGENT61_61-80004822.SAR
+HANA CLIENT | 2.17 | IMDB_CLIENT20_017_22-80002082.SAR
+HANA CLIENT | 2.18 | IMDB_CLIENT20_018_27-80002082.SAR
+HANA DB | 2.0 SPS05 rev59.05 | 51056441.ZIP
+HANA DB | 2.0 SPS07 rev73 | 51057281.ZIP
+
+**OS images validated for this solution:**
+
+OS version | Image | Role
+-----------|-----------|-----------
+Red Hat Enterprise Linux 8.6 for SAP HANA (amd64) | ibm-redhat-8-6-amd64-sap-hana-5 | DB
+Red Hat Enterprise Linux 8.6 for SAP Applications (amd64) | ibm-redhat-8-6-amd64-sap-applications-5 | APP
+SUSE Linux Enterprise Server 15 SP4 for SAP HANA | ibm-sles-15-4-amd64-sap-hana-5 | DB
+SUSE Linux Enterprise Server 15 SP4 for SAP Applications | ibm-sles-15-4-amd64-sap-applications-6 | APP
+
## 2.1 Executing the deployment of **Three Tiers SAP S/4HANA Stack** in GUI (Schematics)
### IBM Cloud API Key
@@ -266,7 +383,7 @@ ID_RSA_FILE_PATH = "ansible/id_rsa"
# Activity Tracker variables:
##########################################################
-ATR_NAME="Activity-Tracker-SAP-eu-de"
+ATR_NAME = "Activity-Tracker-SAP-eu-de"
# The name of the Activity Tracker instance, in the same region chosen for SAP system deployment.
# Example: ATR_NAME="Activity-Tracker-SAP-eu-de"
@@ -284,10 +401,10 @@ DB_PROFILE = "mx2-16x128"
# For more information about supported DB/OS and IBM Gen 2 Virtual Server Instances (VSI), check [SAP Note 2927211: SAP Applications on IBM Virtual Private Cloud](https://launchpad.support.sap.com/#/notes/2927211)
# Default value: "mx2-16x128"
-DB_IMAGE = "ibm-redhat-8-6-amd64-sap-hana-4"
-# OS image for DB VSI. Supported OS images for DB VSIs: ibm-sles-15-3-amd64-sap-hana-8, ibm-sles-15-4-amd64-sap-hana-5, ibm-redhat-8-4-amd64-sap-hana-7, ibm-redhat-8-6-amd64-sap-hana-4.
+DB_IMAGE = "ibm-redhat-8-6-amd64-sap-hana-5"
+# OS image for DB VSI. Validated OS images for DB VSIs: ibm-redhat-8-6-amd64-sap-hana-5, ibm-redhat-8-4-amd64-sap-hana-9, ibm-sles-15-4-amd64-sap-hana-6, ibm-sles-15-3-amd64-sap-hana-9.
# The list of available VPC Operating Systems supported by SAP: SAP note '2927211 - SAP Applications on IBM Virtual Private Cloud (VPC) Infrastructure environment' https://launchpad.support.sap.com/#/notes/2927211; The list of all available OS images: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images
-# Example: DB_IMAGE = "ibm-sles-15-4-amd64-sap-hana-5"
+# Example: DB_IMAGE = "ibm-sles-15-4-amd64-sap-hana-6"
##########################################################
# SAP APP VSI variables:
@@ -300,15 +417,23 @@ APP_HOSTNAME = "ic4sapapp"
APP_PROFILE = "bx2-4x16"
# The APP VSI profile. Supported profiles: bx2-4x16. The list of available profiles: https://cloud.ibm.com/docs/vpc?topic=vpc-profiles&interface=ui
-APP_IMAGE = "ibm-redhat-8-6-amd64-sap-applications-4"
-# OS image for SAP APP VSI. Supported OS images for APP VSIs: ibm-sles-15-3-amd64-sap-applications-9, ibm-sles-15-4-amd64-sap-applications-6, ibm-redhat-8-4-amd64-sap-applications-7, ibm-redhat-8-6-amd64-sap-applications-4.
+APP_IMAGE = "ibm-redhat-8-6-amd64-sap-applications-5"
+# OS image for SAP APP VSI. Validated OS images for APP VSIs: ibm-redhat-8-6-amd64-sap-applications-5, ibm-redhat-8-4-amd64-sap-applications-9, ibm-sles-15-4-amd64-sap-applications-7, ibm-sles-15-3-amd64-sap-applications-10.
# The list of available VPC Operating Systems supported by SAP: SAP note '2927211 - SAP Applications on IBM Virtual Private Cloud (VPC) Infrastructure environment' https://launchpad.support.sap.com/#/notes/2927211; The list of all available OS images: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images
-# Example: APP-IMAGE = "ibm-sles-15-4-amd64-sap-applications-6"
+# Example: APP-IMAGE = "ibm-sles-15-4-amd64-sap-applications-7"
```
Edit your SAP system configuration variables that will be passed to the ansible automated deployment:
```shell
+##########################################################
+# S/4HANA version
+##########################################################
+
+S4HANA_VERSION = "2023"
+# The version of S/4HANA. The version can take one of the following values: 2020, 2021, 2022, 2023.
+# Example: S4HANA_VERSION = "2022"
+
##########################################################
# SAP HANA configuration
##########################################################
@@ -329,10 +454,9 @@ HANA_COMPONENTS = "server"
# SAP HANA Components. Default: server. Supported values: all, client, es, ets, lcapps, server, smartda, streaming, rdsync, xs, studio, afl, sca, sop, eml, rme, rtl, trp
# Example: HANA_COMPONENTS = "server"
-KIT_SAPHANA_FILE = "/storage/HANADB/51055299.ZIP"
+KIT_SAPHANA_FILE = "/storage/HANADB/51057281_SPS07_rev73.ZIP"
# SAP HANA Installation kit path
-# Supported SAP HANA versions on RHEL8.4, RHEL8.6, SLES15.3 and SLES15.4: HANA 2.0 SP 5 Rev 57, kit file: 51055299.ZIP
-# Example for Red Hat 8 or Suse 15: KIT_SAPHANA_FILE = "/storage/HANADB/51055299.ZIP"
+# Example for Red Hat 8 or Suse 15: KIT_SAPHANA_FILE = "/storage/HANADB/51057281_SPS07_rev73.ZIP"
##########################################################
# SAP system configuration
@@ -357,14 +481,14 @@ HDB_CONCURRENT_JOBS = "23"
##########################################################
KIT_SAPCAR_FILE = "/storage/S4HANA/SAPCAR_1010-70006178.EXE"
-KIT_SWPM_FILE = "/storage/S4HANA/SWPM20SP09_4-80003424.SAR"
-KIT_SAPEXE_FILE = "/storage/S4HANA/SAPEXE_400-80004393.SAR"
-KIT_SAPEXEDB_FILE = "/storage/S4HANA/SAPEXEDB_400-80004392.SAR"
-KIT_IGSEXE_FILE = "/storage/S4HANA/igsexe_13-80003187.sar"
+KIT_SWPM_FILE = "/storage/S4HANA/SWPM20SP17_0-80003424.SAR"
+KIT_SAPEXE_FILE = "/storage/S4HANA/KERNEL/793/SAPEXE_60-70007807.SAR"
+KIT_SAPEXEDB_FILE = "/storage/S4HANA/KERNEL/793/SAPEXEDB_60-70007806.SAR"
+KIT_IGSEXE_FILE = "/storage/S4HANA/KERNEL/793/igsexe_4-70005417.sar"
KIT_IGSHELPER_FILE = "/storage/S4HANA/igshelper_17-10010245.sar"
-KIT_SAPHOSTAGENT_FILE = "/storage/S4HANA/SAPHOSTAGENT51_51-20009394.SAR"
-KIT_HDBCLIENT_FILE = "/storage/S4HANA/IMDB_CLIENT20_009_28-80002082.SAR"
-KIT_S4HANA_EXPORT = "/storage/S4HANA/export"
+KIT_SAPHOSTAGENT_FILE = "/storage/S4HANA/SAPHOSTAGENT61_61-80004822.SAR"
+KIT_HDBCLIENT_FILE = "/storage/S4HANA/IMDB_CLIENT20_018_27-80002082.SAR"
+KIT_S4HANA_EXPORT = "/storage/S4HANA/2023"
```
## Steps to reproduce
diff --git a/ansible/roles/s4appfs/defaults/main.yml b/ansible/roles/s4appfs/defaults/main.yml
new file mode 100644
index 0000000..d016f15
--- /dev/null
+++ b/ansible/roles/s4appfs/defaults/main.yml
@@ -0,0 +1,41 @@
+---
+#Disk size config
+sap_disk_size: "128.00 GB"
+swap_disk_size: "40.00 GB"
+
+#Logical volume size config
+# swap_lv_size: "30g"
+usrsap_lv_size: "5g"
+sap_lv_size: "20g"
+sapmnt_lv_size: "20g"
+saptrans_lv_size: "50g"
+
+swap_lv:
+ - size: 38
+ ram_min: 32
+ ram_max: 63
+ - size: 38
+ ram_min: 64
+ ram_max: 127
+ - size: 38
+ ram_min: 128
+ ram_max: 255
+ - size: 38
+ ram_min: 256
+ ram_max: 511
+ - size: 38
+ ram_min: 512
+ ram_max: 1023
+ - size: 224
+ ram_min: 1024
+ ram_max: 2047
+ - size: 38
+ ram_min: 2048
+ ram_max: 4095
+ - size: 288
+ ram_min: 4096
+ ram_max: 8191
+ - size: 38
+ ram_min: 8192
+ ram_max: 20000
+...
diff --git a/ansible/roles/s4appreq/tasks/configurations/filesystems.yml b/ansible/roles/s4appfs/tasks/main.yml
similarity index 99%
rename from ansible/roles/s4appreq/tasks/configurations/filesystems.yml
rename to ansible/roles/s4appfs/tasks/main.yml
index 72401e3..fbb0c67 100644
--- a/ansible/roles/s4appreq/tasks/configurations/filesystems.yml
+++ b/ansible/roles/s4appfs/tasks/main.yml
@@ -64,7 +64,6 @@
- name: Get the swap logical volume size for RAM higher than 8192
set_fact:
- # swap_lv_size: "320g"
swap_lv_size: "32g"
when: app_ram | int >= 8192
diff --git a/ansible/roles/s4appinst/defaults/main.yml b/ansible/roles/s4appinst/defaults/main.yml
index f66cbda..6d578e1 100644
--- a/ansible/roles/s4appinst/defaults/main.yml
+++ b/ansible/roles/s4appinst/defaults/main.yml
@@ -1,6 +1,6 @@
---
#Sapinst product-id
-sap_product_id: "NW_ABAP_OneHost:S4HANA2020.CORE.HDB.ABAP"
+sap_product_id: "NW_ABAP_OneHost:S4HANA{{ s4hana_version }}.CORE.HDB.ABAP"
#Target files location
s4app_kit: "/usr/sap/trans/kit"
diff --git a/ansible/roles/s4appinst/tasks/main.yml b/ansible/roles/s4appinst/tasks/main.yml
index 17958ce..dd09185 100644
--- a/ansible/roles/s4appinst/tasks/main.yml
+++ b/ansible/roles/s4appinst/tasks/main.yml
@@ -4,7 +4,7 @@
- name: Generate parameter file for sapinst
template:
- src: sapinst.cfg
+ src: sapinst_{{ s4hana_version }}.cfg
dest: "{{ s4app_kit }}/inifile.params"
- name: Check if S/4HANA Application Server was already installed
diff --git a/ansible/roles/s4appinst/templates/sapinst.cfg b/ansible/roles/s4appinst/templates/sapinst_2020.cfg
similarity index 100%
rename from ansible/roles/s4appinst/templates/sapinst.cfg
rename to ansible/roles/s4appinst/templates/sapinst_2020.cfg
diff --git a/ansible/roles/s4appinst/templates/sapinst_2021.cfg b/ansible/roles/s4appinst/templates/sapinst_2021.cfg
new file mode 100644
index 0000000..f1f5f1f
--- /dev/null
+++ b/ansible/roles/s4appinst/templates/sapinst_2021.cfg
@@ -0,0 +1,390 @@
+# Password for the Diagnostics Agent specific adm user. Provided value may be encoded.
+# DiagnosticsAgent.dasidAdmPassword =
+
+# Windows domain in which the Diagnostics Agent users must be created. This is an optional property (Windows only).
+# DiagnosticsAgent.domain =
+
+# Windows only: Password for the Diagnostics Agent specific 'SAPService' user.
+# DiagnosticsAgent.sapServiceDASIDPassword =
+
+# Specify whether Software Provisioning Manager is to drop the schema if it exists.
+# HDB_Schema_Check_Dialogs.dropSchema = false
+
+# The name of the database schema.
+HDB_Schema_Check_Dialogs.schemaName = SAPHANADB
+
+# The password of the database schema.
+HDB_Schema_Check_Dialogs.schemaPassword = {{ sap_main_password }}
+
+# Specify whether Software Provisioning Manager is to validate the schema name. The schema name must only contain numbers and capital letters. It must not start with '_' . It cannot be 'SYS' or 'SYSTEM'.
+# HDB_Schema_Check_Dialogs.validateSchemaName = true
+
+# Use SAP HANA Media on CD, do not ask for SAR archives
+# HDB_Software_Dialogs.useMediaCD = false
+
+# HDB_System_Check_Dialogs.initTopology = false
+
+# Name for container (folder) for the HANA Userstore files.
+# HDB_Userstore.HDB_USE_IDENT =
+
+# Database hostnames that will be set directly in hdbuserstore without resolving them in HANA. Comma separated. Example (host1,host2)
+# HDB_Userstore.doNotResolveHostnames =
+
+# Alternative port for SystemDB to be used in hdbuserstore
+# HDB_Userstore.systemDBPort =
+
+# Use ABAP secure store instead of HANA userstore. Default: false for HANA user store.
+# HDB_Userstore.useABAPSSFS = false
+
+# If set to 'true', an 'ms_acl_info' file is created. It manages the hosts from which the Message Server accepts connections.
+# MessageServer.configureAclInfo = false
+
+# Location of the input file for the 'ABAP SecureStore' key. The input file must have two lines: 'key = ', 'key-id = '. You can generate a key using 'rsecssfx'. Leave empty if you want to use the default key.
+# NW_ABAP_SSFS_CustomKey.ssfsKeyInputFile =
+
+# Standard system only: Add gateway process to ASCS instance
+# NW_CI_Instance.ascsInstallGateway = false
+
+# Standard system only: Add web dispatcher process to ASCS instance
+# NW_CI_Instance.ascsInstallWebDispatcher = false
+
+# Standard system with AS ABAP only: ASCS instance number. Leave empty for default.
+NW_CI_Instance.ascsInstanceNumber = {{ sap_ascs_instance_number }}
+
+# Standard system with AS ABAP only: Virtual host name for the ASCS instance. Leave empty for default.
+NW_CI_Instance.ascsVirtualHostname = {{ ansible_hostname }}
+
+# Instance number of the primary application server instance. Leave empty for default.
+NW_CI_Instance.ciInstanceNumber = {{ sap_ci_instance_number }}
+
+# The ABAP message server port. Leave empty for default.
+# NW_CI_Instance.ciMSPort =
+
+# The internal ABAP message server port. Leave empty for default.
+# NW_CI_Instance.ciMSPortInternal =
+
+# Virtual host name of the primary application server instance . Leave empty for default.
+NW_CI_Instance.ciVirtualHostname = {{ ansible_hostname }}
+
+# Create file 'prxyinfo(.DAT)' in the global directory, if it does not already exist and set 'gw/prxy_info' in the default profile accordingly. Default is 'false'.
+# NW_CI_Instance.createGlobalProxyInfoFile = false
+
+# Create file 'reginfo(.DAT)' in the global directory. Default is 'false'.
+# NW_CI_Instance.createGlobalRegInfoFile = false
+
+# User-defined number of Java server nodes. Depends on NW_CI_Instance.nodesNumber.
+# NW_CI_Instance.nodesNum =
+
+# Number of Java server nodes. Possible values: 'defNodes' - default number; 'srcNodes' - copy from source; 'userNodes' - user-defined number. Default is 'defNodes'
+# NW_CI_Instance.nodesNumber = defNodes
+
+# Standard system with AS Java only: The SCS instance number. Leave empty for default.
+# NW_CI_Instance.scsInstanceNumber =
+
+# The internal Java message server port. Leave empty for default.
+# NW_CI_Instance.scsMSPortInternal =
+
+# Standard system with AS Java only: Virtual host name for the SCS instance. Leave empty for default.
+NW_CI_Instance.scsVirtualHostname = {{ ansible_hostname }}
+
+# Specify new password of the DDIC user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.ddic000Password =
+
+# Activate ICF node '/SAP/BC/REST/SLPROTOCOL'
+# NW_CI_Instance_ABAP_Reports.enableActivateICFService = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableSPAMUpdateWithoutStackXml = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableTMSConfigWithoutStackXml = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableTransportsWithoutStackXml = false
+
+# Need specific new password of the DDIC user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.needNewDDIC000Password = false
+
+# Need specific new password of the SAP* user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.needNewSapStar000Password = false
+
+# Specify new password of the SAP* user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.sapStar000Password =
+
+# System copy AS Java with product instance Process Integration and/or Development Infrastructure: Specify whether the target system should replace the source system. Possible values are 'true' or 'false'.
+# NW_CreateDBandLoad.movePVCforUsagePiAndDi =
+
+# Password of the DDIC user in client 000
+# NW_DDIC_Password.ddic000Password =
+
+# Password of the DDIC user in client 001
+# NW_DDIC_Password.ddic001Password =
+
+# Are the passwords for the DDIC users different from the default value? Possible values are 'true' or 'false'. Leave empty for default.
+NW_DDIC_Password.needDDICPasswords = false
+
+# Specify whether the all operating system users are to be removed from group 'sapinst' after the execution of Software Provisioning Manager has completed.
+NW_Delete_Sapinst_Users.removeUsers = true
+
+# Master password
+NW_GetMasterPassword.masterPwd = {{ sap_main_password }}
+
+# Human readable form of the default login language to be preselected in SAPGUI. This Parameter is potentialy prompted in addition in the screen that also asks for the . It is only prompted in systems that have an ABAP stack. It is prompted for installation but not for system copy. It is asked in those installations, that perform the ABAP load. That could be the database load installation in case of a distributed system szenario, or in case of a standard system installation with all instances on one host. This Parameter is saved in the 'DEFAULT' profile. It is has no influence on language settings in a Java stack. Valid names are stored in a table of subcomponent 'NW_languagesInLoadChecks'. The available languages must be declaired in the 'LANGUAGES_IN_LOAD' parameter of the 'product.xml' file . In this file, the one-character representation of the languages is used. Check the same table in subcomponent 'NW_languagesInLoadChecks'.
+# NW_GetSidNoProfiles.SAP_GUI_DEFAULT_LANGUAGE =
+
+# Windows only: The drive to use
+# NW_GetSidNoProfiles.sapdrive =
+
+# Unix only: The SAP mount directory path. Default value is '/sapmnt'.
+# NW_GetSidNoProfiles.sapmnt = /sapmnt
+
+# The SAP system ID of the system to be installed
+NW_GetSidNoProfiles.sid = {{ sap_sid|upper }}
+
+# Only use this parameter if recommended by SAP.
+# NW_GetSidNoProfiles.strictSidCheck = true
+
+# Specify whether this system is to be a Unicode system.
+# NW_GetSidNoProfiles.unicode = true
+
+# ABAP schema name
+NW_HDB_DB.abapSchemaName = SAPHANADB
+
+# Password of the ABAP schema user
+NW_HDB_DB.abapSchemaPassword = {{ sap_main_password }}
+
+# Password of the DBACOCKPIT user
+NW_HDB_DB.dbacockpitPassword = {{ sap_main_password }}
+
+# Install SAP Predictive Analytics integrator (PAi) in UDI mode. Possiable values 'stack', 'true' or 'false'. Default value is 'stack'(install PAi is found in stack.xml).
+NW_HDB_DB.installPAi = false
+
+# JAVA schema name
+# NW_HDB_DB.javaSchemaName =
+
+# Password of the JAVA schema user
+# NW_HDB_DB.javaSchemaPassword =
+
+# Skip checking if creating a HANA user store is needed. Default value is 'true'. If set to 'false', a valid HANA userstore must exists.
+# NW_HDB_DBClient.checkCreateUserstore = true
+
+# Install the SAP HANA database client in a central or local directory. Possible values are: 'SAPCPE', 'LOCAL'
+# NW_HDB_DBClient.clientPathStrategy = LOCAL
+
+# Set the ABAP schema password to the same given to for userstore. Possible values are: true or false(default)
+# NW_HDB_DBClient.setNewSchemaPassword = false
+
+# Set X.509 certificate authentication for ABAP user
+# NW_HDB_DBClient.useCertificateAuthentication = false
+
+# Set the path to the X.509 certificate for authentication
+# NW_HDB_DBClient.x509CertificatePath =
+
+# Data has already been loaded.
+# NW_HDB_getDBInfo.dataAlreadyLoaded = false
+
+# The DB admin user for SAP HANA tenant database. Default value: SYSTEM
+# NW_HDB_getDBInfo.dbadmin = SYSTEM
+
+# Database host
+NW_HDB_getDBInfo.dbhost = {{ hdb_host }}
+
+# Database system ID
+NW_HDB_getDBInfo.dbsid = {{ hdb_sid|upper }}
+
+# The instance number of the SAP HANA database server
+NW_HDB_getDBInfo.instanceNumber = {{ hdb_instance_number }}
+
+# Password of user 'SYSTEM' within the 'SystemDB' tenant in an SAP HANA MultiDB server
+NW_HDB_getDBInfo.systemDbPassword = {{ hdb_main_password }}
+
+# Password of SAP HANA administration database user.'
+NW_HDB_getDBInfo.systemPassword = {{ hdb_main_password }}
+
+# Password of user 'SYSTEM' inside the SAP HANA database server from a backup
+# NW_HDB_getDBInfo.systemPasswordBackup =
+
+# SAP HANA system ID
+NW_HDB_getDBInfo.systemid = {{ hdb_sid|upper }}
+
+# A dedicated OS group for the tenant database, required for SAP HANA multitenant database containers with high isolation level.
+# NW_HDB_getDBInfo.tenantOsGroup =
+
+# A dedicated OS user for the tenant database, required for SAP HANA multitenant database containers with high isolation level.
+# NW_HDB_getDBInfo.tenantOsUser =
+
+# The SQL port for SAP HANA tenant database
+# NW_HDB_getDBInfo.tenantPort =
+
+# Connect using SSL/TLS. Default value: false.
+# NW_HDB_getDBInfo.usingSSL = false
+
+# Password of the webadm user.
+NW_IcmAuth.webadmPassword = {{ sap_main_password }}
+
+# Location for HANA backup files on the HANA database host (as delivered by SAP).
+# NW_Recovery_Install_HDB.backupLocationHANA =
+
+# Location for HANA backup files on the SAP Application Server host.
+# NW_Recovery_Install_HDB.backupLocationSAP =
+
+# NW_Recovery_Install_HDB.checkIntegrity = false
+
+# Location for HANA backup files on the HANA database host (Target location for ABAP export archives). Default value: /usr/sap//HDB/backup/data/
+NW_Recovery_Install_HDB.extractLocation = /usr/sap/{{ hdb_sid|upper }}/HDB{{ hdb_instance_number }}/backup/data/DB_{{ hdb_sid|upper }}
+
+# Number of concurrent jobs used to load and/or extract archives to HANA Host
+NW_Recovery_Install_HDB.extractParallelJobs = {{ hdb_concurrent_jobs }}
+
+# Archives or backup files are to be loaded by SWPM or are already available(mounted) on the HANA host. Possible values are: load (default) or mount.
+# NW_Recovery_Install_HDB.loadOrMount = load
+
+# Certificate to access HTTPS SAPContorl WSDL.
+# NW_Recovery_Install_HDB.sapControlWsdlCertificatePath =
+
+# URL use to access SAPContorl WSDL.
+NW_Recovery_Install_HDB.sapControlWsdlUrl = http://{{ hdb_host }}:50013/SAPControl?wsdl
+
+# The OS user of the HANA 'adm' user
+NW_Recovery_Install_HDB.sidAdmName = {{ hdb_sid|lower }}adm
+
+# The password of the OS HANA 'adm' user
+NW_Recovery_Install_HDB.sidAdmPassword = {{ hdb_main_password }}
+
+# DEPRECATED, DO NOT USE!
+NW_SAPCrypto.SAPCryptoFile = {{ s4app_kit }}/sapexe.sar
+
+# Enable the instance agent (sapstartsrv) data supplier to send operating system information to the System Landscape Directory (SLD). Default is 'false'.
+# NW_SLD_Configuration.configureSld = false
+
+# Host of the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldHost =
+
+# Port used to connect to the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldPort =
+
+# Use HTTPS. Default is 'false'.
+# NW_SLD_Configuration.sldUseHttps = false
+
+# The user that is to authenticate towards the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldUser =
+
+# User password to authenticate towards the System Landscape Directory (SLD). Note: The connection is not checked by Software Provisioning Manager.
+# NW_SLD_Configuration.sldUserPassword =
+
+# SAP INTERNAL USE ONLY
+# NW_System.installSAPHostAgent = true
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.dbaToolsSar =
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.igsExeSar = {{ s4app_kit }}/igsexe.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.igsHelperSar = {{ s4app_kit }}/igshelper.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.sapExeDbSar = {{ s4app_kit }}/sapexedb.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.sapExeSar = {{ s4app_kit }}/sapexe.sar
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.sapJvmSar =
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.xs2Sar =
+
+# Number of Batch Work Processes. Leave empty for default.
+# NW_WPConfiguration.ciBtcWPNumber = 6
+
+# Number of Dialog Work Processes. Leave empty for default.
+# NW_WPConfiguration.ciDialogWPNumber = 10
+
+# SAP offers the option to skip setting of security profile parameters (NOT recommended) only for compatibility reasons. Set to true and the file with recommended security settings will not be taken into consideration. See SAP Note 2714839 for security recommendations.
+# NW_adaptProfile.skipSecurityProfileSettings = false
+
+# SAP INTERNAL USE ONLY
+# NW_adaptProfile.templateFiles =
+
+# The FQDN of the system
+# NW_getFQDN.FQDN =
+
+# SAP INTERNAL USE ONLY
+# NW_getFQDN.resolve = true
+
+# Specify whether you want to set FQDN for the system.
+NW_getFQDN.setFQDN = false
+
+# Manual configuration and execution of Migration Monitor or manual native database copy method.
+# NW_getLoadType.importManuallyExecuted = false
+
+# The load type chosen by the user. Valid values are: 'SAP', 'STD', 'OBR', 'HCP', 'MDA', 'HBR', 'SBR'
+NW_getLoadType.loadType = SAP
+
+# Password of the database manager operator user 'control' for liveCache
+# NW_liveCache.controlUserPwd =
+
+# Host name for liveCache
+# NW_liveCache.liveCacheHost =
+
+# Database ID for liveCache
+# NW_liveCache.liveCacheID =
+
+# Database schema for liveCache
+# NW_liveCache.liveCacheUser =
+
+# Password of database schema for liveCache
+# NW_liveCache.liveCacheUserPwd =
+
+# Specify whether you want to use liveCache. Default value is 'true'.
+# NW_liveCache.useLiveCache = false
+
+# The ASP device name where the SAP system will be in installed. The property is IBM i only.
+# Values from 1 to 256 can be specified. The default is 1, the System ASP.
+# OS4.DestinationASP =
+
+# The folder containing all archives that have been downloaded from http://support.sap.com/swdc and are supposed to be used in this procedure
+archives.downloadBasket = {{ s4app_kit }}
+
+# DBACOCKPIT user is to be created. Default value is 'true'.
+# hdb.create.dbacockpit.user = true
+
+# Windows only: The domain of the SAP Host Agent user
+# hostAgent.domain =
+
+# Password for the 'sapadm' user of the SAP Host Agent
+hostAgent.sapAdmPassword = {{ sap_main_password }}
+
+# installation_export.archivesFolder =
+
+# Windows only: The domain of all users of this SAP system. Leave empty for default.
+# nwUsers.sapDomain =
+
+# Windows only: The password of the 'SAPServiceSID' user
+# nwUsers.sapServiceSIDPassword =
+
+# UNIX only: The user ID of the 'sapadm' user, leave empty for default. The ID is ignored if the user already exists.
+# nwUsers.sapadmUID =
+
+# UNIX only: The group id of the 'sapsys' group, leave empty for default. The ID is ignored if the group already exists.
+# nwUsers.sapsysGID =
+
+# UNIX only: The user id of the adm user, leave empty for default. The ID is ignored if the user already exists.
+# nwUsers.sidAdmUID =
+
+# The password of the 'adm' user
+nwUsers.sidadmPassword = {{ sap_main_password }}
+
+# ABAP schema password
+# storageBasedCopy.abapSchemaPassword =
+
+# Instance number of the SAP HANA Database server
+storageBasedCopy.hdb.instanceNumber = {{ hdb_instance_number }}
+
+# Password of user 'SYSTEM' inside the SAP HANA Database Server
+# storageBasedCopy.hdb.systemPassword =
+
+# Sets the SAPDB schema password using a parameter file.
+# storageBasedCopy.javaSchemaPassword =
diff --git a/ansible/roles/s4appinst/templates/sapinst_2022.cfg b/ansible/roles/s4appinst/templates/sapinst_2022.cfg
new file mode 100644
index 0000000..7e5a30b
--- /dev/null
+++ b/ansible/roles/s4appinst/templates/sapinst_2022.cfg
@@ -0,0 +1,384 @@
+# Password for the Diagnostics Agent specific adm user. Provided value may be encoded.
+# DiagnosticsAgent.dasidAdmPassword =
+
+# Windows domain in which the Diagnostics Agent users must be created. This is an optional property (Windows only).
+# DiagnosticsAgent.domain =
+
+# Windows only: Password for the Diagnostics Agent specific 'SAPService' user.
+# DiagnosticsAgent.sapServiceDASIDPassword =
+
+# Specify whether Software Provisioning Manager is to drop the schema if it exists.
+# HDB_Schema_Check_Dialogs.dropSchema = false
+
+# The name of the database schema.
+HDB_Schema_Check_Dialogs.schemaName = SAPHANADB
+
+# The password of the database schema.
+HDB_Schema_Check_Dialogs.schemaPassword = {{ sap_main_password }}
+
+# Specify whether Software Provisioning Manager is to validate the schema name. The schema name must only contain numbers and capital letters. It must not start with '_' . It cannot be 'SYS' or 'SYSTEM'.
+# HDB_Schema_Check_Dialogs.validateSchemaName = true
+
+# Use SAP HANA Media on CD, do not ask for SAR archives
+# HDB_Software_Dialogs.useMediaCD = false
+
+# HDB_System_Check_Dialogs.initTopology = false
+
+# Name for container (folder) for the HANA Userstore files.
+# HDB_Userstore.HDB_USE_IDENT =
+
+# Database hostnames that will be set directly in hdbuserstore without resolving them in HANA. Comma separated. Example (host1,host2)
+# HDB_Userstore.doNotResolveHostnames =
+
+# Alternative port for SystemDB to be used in hdbuserstore
+# HDB_Userstore.systemDBPort =
+
+# Use ABAP secure store instead of HANA userstore. Default: false for HANA user store.
+# HDB_Userstore.useABAPSSFS = false
+
+# If set to 'true', an 'ms_acl_info' file is created. It manages the hosts from which the Message Server accepts connections.
+# MessageServer.configureAclInfo = false
+
+# Location of the input file for the 'ABAP SecureStore' key. The input file must have two lines: 'key = ', 'key-id = '. You can generate a key using 'rsecssfx'. Leave empty if you want to use the default key.
+# NW_ABAP_SSFS_CustomKey.ssfsKeyInputFile =
+
+# Standard system only: Add gateway process to ASCS instance
+# NW_CI_Instance.ascsInstallGateway = false
+
+# Standard system only: Add web dispatcher process to ASCS instance
+# NW_CI_Instance.ascsInstallWebDispatcher = false
+
+# Standard system with AS ABAP only: ASCS instance number. Leave empty for default.
+NW_CI_Instance.ascsInstanceNumber = {{ sap_ascs_instance_number }}
+
+# Standard system with AS ABAP only: Virtual host name for the ASCS instance. Leave empty for default.
+NW_CI_Instance.ascsVirtualHostname = {{ ansible_hostname }}
+
+# Instance number of the primary application server instance. Leave empty for default.
+NW_CI_Instance.ciInstanceNumber = {{ sap_ci_instance_number }}
+
+# The ABAP message server port. Leave empty for default.
+# NW_CI_Instance.ciMSPort =
+
+# The internal ABAP message server port. Leave empty for default.
+# NW_CI_Instance.ciMSPortInternal =
+
+# Virtual host name of the primary application server instance . Leave empty for default.
+NW_CI_Instance.ciVirtualHostname = {{ ansible_hostname }}
+
+# Create file 'prxyinfo(.DAT)' in the global directory, if it does not already exist and set 'gw/prxy_info' in the default profile accordingly. Default is 'false'.
+# NW_CI_Instance.createGlobalProxyInfoFile = false
+
+# Create file 'reginfo(.DAT)' in the global directory. Default is 'false'.
+# NW_CI_Instance.createGlobalRegInfoFile = false
+
+# User-defined number of Java server nodes. Depends on NW_CI_Instance.nodesNumber.
+# NW_CI_Instance.nodesNum =
+
+# Number of Java server nodes. Possible values: 'defNodes' - default number; 'srcNodes' - copy from source; 'userNodes' - user-defined number. Default is 'defNodes'
+# NW_CI_Instance.nodesNumber = defNodes
+
+# Standard system with AS Java only: The SCS instance number. Leave empty for default.
+# NW_CI_Instance.scsInstanceNumber =
+
+# The internal Java message server port. Leave empty for default.
+# NW_CI_Instance.scsMSPortInternal =
+
+# Standard system with AS Java only: Virtual host name for the SCS instance. Leave empty for default.
+NW_CI_Instance.scsVirtualHostname = {{ ansible_hostname }}
+
+# Specify new password of the DDIC user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.ddic000Password =
+
+# Activate ICF node '/SAP/BC/REST/SLPROTOCOL'
+# NW_CI_Instance_ABAP_Reports.enableActivateICFService = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableSPAMUpdateWithoutStackXml = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableTMSConfigWithoutStackXml = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableTransportsWithoutStackXml = false
+
+# Need specific new password of the DDIC user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.needNewDDIC000Password = false
+
+# Need specific new password of the SAP* user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.needNewSapStar000Password = false
+
+# Specify new password of the SAP* user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.sapStar000Password =
+
+# System copy AS Java with product instance Process Integration and/or Development Infrastructure: Specify whether the target system should replace the source system. Possible values are 'true' or 'false'.
+# NW_CreateDBandLoad.movePVCforUsagePiAndDi =
+
+# Password of the DDIC user in client 000
+# NW_DDIC_Password.ddic000Password =
+
+# Password of the DDIC user in client 001
+# NW_DDIC_Password.ddic001Password =
+
+# Are the passwords for the DDIC users different from the default value? Possible values are 'true' or 'false'. Leave empty for default.
+NW_DDIC_Password.needDDICPasswords = false
+
+# Specify whether the all operating system users are to be removed from group 'sapinst' after the execution of Software Provisioning Manager has completed.
+NW_Delete_Sapinst_Users.removeUsers = true
+
+# Master password
+NW_GetMasterPassword.masterPwd = {{ sap_main_password }}
+
+# Human readable form of the default login language to be preselected in SAPGUI. This Parameter is potentialy prompted in addition in the screen that also asks for the . It is only prompted in systems that have an ABAP stack. It is prompted for installation but not for system copy. It is asked in those installations, that perform the ABAP load. That could be the database load installation in case of a distributed system szenario, or in case of a standard system installation with all instances on one host. This Parameter is saved in the 'DEFAULT' profile. It is has no influence on language settings in a Java stack. Valid names are stored in a table of subcomponent 'NW_languagesInLoadChecks'. The available languages must be declaired in the 'LANGUAGES_IN_LOAD' parameter of the 'product.xml' file . In this file, the one-character representation of the languages is used. Check the same table in subcomponent 'NW_languagesInLoadChecks'.
+# NW_GetSidNoProfiles.SAP_GUI_DEFAULT_LANGUAGE =
+
+# Unix only: The SAP mount directory path. Default value is '/sapmnt'.
+# NW_GetSidNoProfiles.sapmnt = /sapmnt
+
+# The SAP system ID of the system to be installed
+NW_GetSidNoProfiles.sid = {{ sap_sid|upper }}
+
+# Only use this parameter if recommended by SAP.
+# NW_GetSidNoProfiles.strictSidCheck = true
+
+# ABAP schema name
+NW_HDB_DB.abapSchemaName = SAPHANADB
+
+# Password of the ABAP schema user
+NW_HDB_DB.abapSchemaPassword = {{ sap_main_password }}
+
+# Password of the DBACOCKPIT user
+NW_HDB_DB.dbacockpitPassword = {{ sap_main_password }}
+
+# Install SAP Predictive Analytics integrator (PAi) in UDI mode. Possiable values 'stack', 'true' or 'false'. Default value is 'stack'(install PAi is found in stack.xml).
+NW_HDB_DB.installPAi = false
+
+# JAVA schema name
+# NW_HDB_DB.javaSchemaName =
+
+# Password of the JAVA schema user
+# NW_HDB_DB.javaSchemaPassword =
+
+# Skip checking if creating a HANA user store is needed. Default value is 'true'. If set to 'false', a valid HANA userstore must exists.
+# NW_HDB_DBClient.checkCreateUserstore = true
+
+# Install the SAP HANA database client in a central or local directory. Possible values are: 'SAPCPE', 'LOCAL'
+# NW_HDB_DBClient.clientPathStrategy = LOCAL
+
+# Set the ABAP schema password to the same given to for userstore. Possible values are: true or false(default)
+# NW_HDB_DBClient.setNewSchemaPassword = false
+
+# Set X.509 certificate authentication for ABAP user
+# NW_HDB_DBClient.useCertificateAuthentication = false
+
+# Set the path to the X.509 certificate for authentication
+# NW_HDB_DBClient.x509CertificatePath =
+
+# Data has already been loaded.
+# NW_HDB_getDBInfo.dataAlreadyLoaded = false
+
+# The DB admin user for SAP HANA tenant database. Default value: SYSTEM
+# NW_HDB_getDBInfo.dbadmin = SYSTEM
+
+# Database host
+NW_HDB_getDBInfo.dbhost = {{ hdb_host }}
+
+# Database system ID
+NW_HDB_getDBInfo.dbsid = {{ hdb_sid|upper }}
+
+# The instance number of the SAP HANA database server
+NW_HDB_getDBInfo.instanceNumber = {{ hdb_instance_number }}
+
+# Password of user 'SYSTEM' within the 'SystemDB' tenant in an SAP HANA MultiDB server
+NW_HDB_getDBInfo.systemDbPassword = {{ hdb_main_password }}
+
+# Password of SAP HANA administration database user.'
+NW_HDB_getDBInfo.systemPassword = {{ hdb_main_password }}
+
+# Password of user 'SYSTEM' inside the SAP HANA database server from a backup
+# NW_HDB_getDBInfo.systemPasswordBackup =
+
+# SAP HANA system ID
+NW_HDB_getDBInfo.systemid = {{ hdb_sid|upper }}
+
+# A dedicated OS group for the tenant database, required for SAP HANA multitenant database containers with high isolation level.
+# NW_HDB_getDBInfo.tenantOsGroup =
+
+# A dedicated OS user for the tenant database, required for SAP HANA multitenant database containers with high isolation level.
+# NW_HDB_getDBInfo.tenantOsUser =
+
+# The SQL port for SAP HANA tenant database
+# NW_HDB_getDBInfo.tenantPort =
+
+# Connect using SSL/TLS. Default value: false.
+# NW_HDB_getDBInfo.usingSSL = false
+
+# Password of the webadm user.
+NW_IcmAuth.webadmPassword = {{ sap_main_password }}
+
+# Location for HANA backup files on the HANA database host (as delivered by SAP).
+# NW_Recovery_Install_HDB.backupLocationHANA =
+
+# Location for HANA backup files on the SAP Application Server host.
+# NW_Recovery_Install_HDB.backupLocationSAP =
+
+# NW_Recovery_Install_HDB.checkIntegrity = false
+
+# Location for HANA backup files on the HANA database host (Target location for ABAP export archives). Default value: /usr/sap//HDB/backup/data/
+NW_Recovery_Install_HDB.extractLocation = /usr/sap/{{ hdb_sid|upper }}/HDB{{ hdb_instance_number }}/backup/data/DB_{{ hdb_sid|upper }}
+
+# Number of concurrent jobs used to load and/or extract archives to HANA Host
+NW_Recovery_Install_HDB.extractParallelJobs = {{ hdb_concurrent_jobs }}
+
+# Archives or backup files are to be loaded by SWPM or are already available(mounted) on the HANA host. Possible values are: load (default) or mount.
+# NW_Recovery_Install_HDB.loadOrMount = load
+
+# Certificate to access HTTPS SAPContorl WSDL.
+# NW_Recovery_Install_HDB.sapControlWsdlCertificatePath =
+
+# URL use to access SAPContorl WSDL.
+NW_Recovery_Install_HDB.sapControlWsdlUrl = http://{{ hdb_host }}:50013/SAPControl?wsdl
+
+# The OS user of the HANA 'adm' user
+NW_Recovery_Install_HDB.sidAdmName = {{ hdb_sid|lower }}adm
+
+# The password of the OS HANA 'adm' user
+NW_Recovery_Install_HDB.sidAdmPassword = {{ hdb_main_password }}
+
+# DEPRECATED, DO NOT USE!
+NW_SAPCrypto.SAPCryptoFile = {{ s4app_kit }}/sapexe.sar
+
+# Enable the instance agent (sapstartsrv) data supplier to send operating system information to the System Landscape Directory (SLD). Default is 'false'.
+# NW_SLD_Configuration.configureSld = false
+
+# Host of the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldHost =
+
+# Port used to connect to the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldPort =
+
+# Use HTTPS. Default is 'false'.
+# NW_SLD_Configuration.sldUseHttps = false
+
+# The user that is to authenticate towards the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldUser =
+
+# User password to authenticate towards the System Landscape Directory (SLD). Note: The connection is not checked by Software Provisioning Manager.
+# NW_SLD_Configuration.sldUserPassword =
+
+# SAP INTERNAL USE ONLY
+# NW_System.installSAPHostAgent = true
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.dbaToolsSar =
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.igsExeSar = {{ s4app_kit }}/igsexe.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.igsHelperSar = {{ s4app_kit }}/igshelper.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.sapExeDbSar = {{ s4app_kit }}/sapexedb.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.sapExeSar = {{ s4app_kit }}/sapexe.sar
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.sapJvmSar =
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.xs2Sar =
+
+# Number of Batch Work Processes. Leave empty for default.
+# NW_WPConfiguration.ciBtcWPNumber = 6
+
+# Number of Dialog Work Processes. Leave empty for default.
+# NW_WPConfiguration.ciDialogWPNumber = 10
+
+# SAP offers the option to skip setting of security profile parameters (NOT recommended) only for compatibility reasons. Set to true and the file with recommended security settings will not be taken into consideration. See SAP Note 2714839 for security recommendations.
+# NW_adaptProfile.skipSecurityProfileSettings = false
+
+# SAP INTERNAL USE ONLY
+# NW_adaptProfile.templateFiles =
+
+# The FQDN of the system
+# NW_getFQDN.FQDN =
+
+# SAP INTERNAL USE ONLY
+# NW_getFQDN.resolve = true
+
+# Specify whether you want to set FQDN for the system.
+NW_getFQDN.setFQDN = false
+
+# Manual configuration and execution of Migration Monitor or manual native database copy method.
+# NW_getLoadType.importManuallyExecuted = false
+
+# The load type chosen by the user. Valid values are: 'SAP', 'STD', 'OBR', 'HCP', 'MDA', 'HBR', 'SBR'
+NW_getLoadType.loadType = SAP
+
+# Password of the database manager operator user 'control' for liveCache
+# NW_liveCache.controlUserPwd =
+
+# Host name for liveCache
+# NW_liveCache.liveCacheHost =
+
+# Database ID for liveCache
+# NW_liveCache.liveCacheID =
+
+# Database schema for liveCache
+# NW_liveCache.liveCacheUser =
+
+# Password of database schema for liveCache
+# NW_liveCache.liveCacheUserPwd =
+
+# Specify whether you want to use liveCache. Default value is 'true'.
+# NW_liveCache.useLiveCache = false
+
+# The ASP device name where the SAP system will be in installed. The property is IBM i only.
+# Values from 1 to 256 can be specified. The default is 1, the System ASP.
+# OS4.DestinationASP =
+
+# The folder containing all archives that have been downloaded from http://support.sap.com/swdc and are supposed to be used in this procedure
+archives.downloadBasket = {{ s4app_kit }}
+
+# DBACOCKPIT user is to be created. Default value is 'true'.
+# hdb.create.dbacockpit.user = true
+
+# Windows only: The domain of the SAP Host Agent user
+# hostAgent.domain =
+
+# Password for the 'sapadm' user of the SAP Host Agent
+hostAgent.sapAdmPassword = {{ sap_main_password }}
+
+# installation_export.archivesFolder =
+
+# Windows only: The domain of all users of this SAP system. Leave empty for default.
+# nwUsers.sapDomain =
+
+# Windows only: The password of the 'SAPServiceSID' user
+# nwUsers.sapServiceSIDPassword =
+
+# UNIX only: The user ID of the 'sapadm' user, leave empty for default. The ID is ignored if the user already exists.
+# nwUsers.sapadmUID =
+
+# UNIX only: The group id of the 'sapsys' group, leave empty for default. The ID is ignored if the group already exists.
+# nwUsers.sapsysGID =
+
+# UNIX only: The user id of the adm user, leave empty for default. The ID is ignored if the user already exists.
+# nwUsers.sidAdmUID =
+
+# The password of the 'adm' user
+nwUsers.sidadmPassword = {{ sap_main_password }}
+
+# ABAP schema password
+# storageBasedCopy.abapSchemaPassword =
+
+# Instance number of the SAP HANA Database server
+storageBasedCopy.hdb.instanceNumber = {{ hdb_instance_number }}
+
+# Password of user 'SYSTEM' inside the SAP HANA Database Server
+# storageBasedCopy.hdb.systemPassword =
+
+# Sets the SAPDB schema password using a parameter file.
+# storageBasedCopy.javaSchemaPassword =
diff --git a/ansible/roles/s4appinst/templates/sapinst_2023.cfg b/ansible/roles/s4appinst/templates/sapinst_2023.cfg
new file mode 100644
index 0000000..6463fca
--- /dev/null
+++ b/ansible/roles/s4appinst/templates/sapinst_2023.cfg
@@ -0,0 +1,396 @@
+# Password for the Diagnostics Agent specific adm user. Provided value may be encoded.
+# DiagnosticsAgent.dasidAdmPassword =
+
+# Windows domain in which the Diagnostics Agent users must be created. This is an optional property (Windows only).
+# DiagnosticsAgent.domain =
+
+# Windows only: Password for the Diagnostics Agent specific 'SAPService' user.
+# DiagnosticsAgent.sapServiceDASIDPassword =
+
+# Specify whether Software Provisioning Manager is to drop the schema if it exists.
+# HDB_Schema_Check_Dialogs.dropSchema = false
+
+# The name of the database schema.
+HDB_Schema_Check_Dialogs.schemaName = SAPHANADB
+
+# The password of the database schema.
+HDB_Schema_Check_Dialogs.schemaPassword = {{ sap_main_password }}
+
+# Specify whether Software Provisioning Manager is to validate the schema name. The schema name must only contain numbers and capital letters. It must not start with '_' . It cannot be 'SYS' or 'SYSTEM'.
+# HDB_Schema_Check_Dialogs.validateSchemaName = true
+
+# Use SAP HANA Media on CD, do not ask for SAR archives
+# HDB_Software_Dialogs.useMediaCD = false
+
+# HDB_System_Check_Dialogs.initTopology = false
+
+# Name for container (folder) for the HANA Userstore files.
+# HDB_Userstore.HDB_USE_IDENT =
+
+# Database hostnames that will be set directly in hdbuserstore without resolving them in HANA. Comma separated. Example (host1,host2)
+# HDB_Userstore.doNotResolveHostnames =
+
+# Alternative port for SystemDB to be used in hdbuserstore
+# HDB_Userstore.systemDBPort =
+
+# Use ABAP secure store instead of HANA userstore. Default: false for HANA user store.
+# HDB_Userstore.useABAPSSFS = false
+
+# Set root key backup password.
+# HDB_Volume_Encryption.rootkeysBackupPassword = aes256(1kiBPY1K+xqx9P2h6PO2bg==)
+
+# Enable Data At Rest Encryption by starting encryption on all persistence layers. Default value: true.
+HDB_Volume_Encryption.volumeEncryptionSetup = false
+
+# If set to 'true', an 'ms_acl_info' file is created. It manages the hosts from which the Message Server accepts connections.
+# MessageServer.configureAclInfo = false
+
+# Location of the input file for the 'ABAP SecureStore' key. The input file must have two lines: 'key = ', 'key-id = '. You can generate a key using 'rsecssfx'. Leave empty if you want to use the default key.
+# NW_ABAP_SSFS_CustomKey.ssfsKeyInputFile =
+
+# Standard system only: Add gateway process to ASCS instance
+# NW_CI_Instance.ascsInstallGateway = false
+
+# Standard system only: Add web dispatcher process to ASCS instance
+# NW_CI_Instance.ascsInstallWebDispatcher = false
+
+# Standard system with AS ABAP only: ASCS instance number. Leave empty for default.
+NW_CI_Instance.ascsInstanceNumber = {{ sap_ascs_instance_number }}
+
+# Standard system with AS ABAP only: Virtual host name for the ASCS instance. Leave empty for default.
+NW_CI_Instance.ascsVirtualHostname = {{ ansible_hostname }}
+
+# Instance number of the primary application server instance. Leave empty for default.
+NW_CI_Instance.ciInstanceNumber = {{ sap_ci_instance_number }}
+
+# The ABAP message server port. Leave empty for default.
+# NW_CI_Instance.ciMSPort =
+
+# The internal ABAP message server port. Leave empty for default.
+# NW_CI_Instance.ciMSPortInternal =
+
+# Virtual host name of the primary application server instance . Leave empty for default.
+NW_CI_Instance.ciVirtualHostname = {{ ansible_hostname }}
+
+# Create file 'prxyinfo(.DAT)' in the global directory, if it does not already exist and set 'gw/prxy_info' in the default profile accordingly. Default is 'false'.
+# NW_CI_Instance.createGlobalProxyInfoFile = false
+
+# Create file 'reginfo(.DAT)' in the global directory. Default is 'false'.
+# NW_CI_Instance.createGlobalRegInfoFile = false
+
+# User-defined number of Java server nodes. Depends on NW_CI_Instance.nodesNumber.
+# NW_CI_Instance.nodesNum =
+
+# Number of Java server nodes. Possible values: 'defNodes' - default number; 'srcNodes' - copy from source; 'userNodes' - user-defined number. Default is 'defNodes'
+# NW_CI_Instance.nodesNumber = defNodes
+
+# Standard system with AS Java only: The SCS instance number. Leave empty for default.
+# NW_CI_Instance.scsInstanceNumber =
+
+# The internal Java message server port. Leave empty for default.
+# NW_CI_Instance.scsMSPortInternal =
+
+# Standard system with AS Java only: Virtual host name for the SCS instance. Leave empty for default.
+NW_CI_Instance.scsVirtualHostname = {{ ansible_hostname }}
+
+# Specify new password of the DDIC user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.ddic000Password =
+
+# Activate ICF node '/SAP/BC/REST/SLPROTOCOL'
+# NW_CI_Instance_ABAP_Reports.enableActivateICFService = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableSPAMUpdateWithoutStackXml = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableTMSConfigWithoutStackXml = false
+
+# SAP INTERNAL USE ONLY
+# NW_CI_Instance_ABAP_Reports.enableTransportsWithoutStackXml = false
+
+# Need specific new password of the DDIC user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.needNewDDIC000Password = false
+
+# Need specific new password of the SAP* user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.needNewSapStar000Password = false
+
+# Specify new password of the SAP* user in client 000, different from Master Password
+# NW_CI_Instance_ABAP_Reports.sapStar000Password =
+
+# System copy AS Java with product instance Process Integration and/or Development Infrastructure: Specify whether the target system should replace the source system. Possible values are 'true' or 'false'.
+# NW_CreateDBandLoad.movePVCforUsagePiAndDi =
+
+# Password of the DDIC user in client 000
+# NW_DDIC_Password.ddic000Password =
+
+# Password of the DDIC user in client 001
+# NW_DDIC_Password.ddic001Password =
+
+# Are the passwords for the DDIC users different from the default value? Possible values are 'true' or 'false'. Leave empty for default.
+NW_DDIC_Password.needDDICPasswords = false
+
+# Specify whether the all operating system users are to be removed from group 'sapinst' after the execution of Software Provisioning Manager has completed.
+NW_Delete_Sapinst_Users.removeUsers = true
+
+# Master password
+NW_GetMasterPassword.masterPwd = {{ sap_main_password }}
+
+# Human readable form of the default login language to be preselected in SAPGUI. This Parameter is potentialy prompted in addition in the screen that also asks for the . It is only prompted in systems that have an ABAP stack. It is prompted for installation but not for system copy. It is asked in those installations, that perform the ABAP load. That could be the database load installation in case of a distributed system szenario, or in case of a standard system installation with all instances on one host. This Parameter is saved in the 'DEFAULT' profile. It is has no influence on language settings in a Java stack. Valid names are stored in a table of subcomponent 'NW_languagesInLoadChecks'. The available languages must be declaired in the 'LANGUAGES_IN_LOAD' parameter of the 'product.xml' file . In this file, the one-character representation of the languages is used. Check the same table in subcomponent 'NW_languagesInLoadChecks'.
+# NW_GetSidNoProfiles.SAP_GUI_DEFAULT_LANGUAGE =
+
+# Windows only: The drive to use
+# NW_GetSidNoProfiles.sapdrive =
+
+# Unix only: The SAP mount directory path. Default value is '/sapmnt'.
+# NW_GetSidNoProfiles.sapmnt = /sapmnt
+
+# The SAP system ID of the system to be installed
+NW_GetSidNoProfiles.sid = {{ sap_sid|upper }}
+
+# Only use this parameter if recommended by SAP.
+# NW_GetSidNoProfiles.strictSidCheck = true
+
+# Specify whether this system is to be a Unicode system.
+# NW_GetSidNoProfiles.unicode = true
+
+# ABAP schema name
+NW_HDB_DB.abapSchemaName = SAPHANADB
+
+# Password of the ABAP schema user
+NW_HDB_DB.abapSchemaPassword = {{ sap_main_password }}
+
+# Password of the DBACOCKPIT user
+NW_HDB_DB.dbacockpitPassword = {{ sap_main_password }}
+
+# Install SAP Predictive Analytics integrator (PAi) in UDI mode. Possiable values 'stack', 'true' or 'false'. Default value is 'stack'(install PAi is found in stack.xml).
+NW_HDB_DB.installPAi = false
+
+# JAVA schema name
+# NW_HDB_DB.javaSchemaName =
+
+# Password of the JAVA schema user
+# NW_HDB_DB.javaSchemaPassword =
+
+# Skip checking if creating a HANA user store is needed. Default value is 'true'. If set to 'false', a valid HANA userstore must exists.
+# NW_HDB_DBClient.checkCreateUserstore = true
+
+# Install the SAP HANA database client in a central or local directory. Possible values are: 'SAPCPE', 'LOCAL'
+# NW_HDB_DBClient.clientPathStrategy = LOCAL
+
+# Set the ABAP schema password to the same given to for userstore. Possible values are: true or false(default)
+# NW_HDB_DBClient.setNewSchemaPassword = false
+
+# Set X.509 certificate authentication for ABAP user
+# NW_HDB_DBClient.useCertificateAuthentication = false
+
+# Set the path to the X.509 certificate for authentication
+# NW_HDB_DBClient.x509CertificatePath =
+
+# Data has already been loaded.
+# NW_HDB_getDBInfo.dataAlreadyLoaded = false
+
+# The DB admin user for SAP HANA tenant database. Default value: SYSTEM
+# NW_HDB_getDBInfo.dbadmin = SYSTEM
+
+# Database host
+NW_HDB_getDBInfo.dbhost = {{ hdb_host }}
+
+# Database system ID
+NW_HDB_getDBInfo.dbsid = {{ hdb_sid|upper }}
+
+# The instance number of the SAP HANA database server
+NW_HDB_getDBInfo.instanceNumber = {{ hdb_instance_number }}
+
+# Password of user 'SYSTEM' within the 'SystemDB' tenant in an SAP HANA MultiDB server
+NW_HDB_getDBInfo.systemDbPassword = {{ hdb_main_password }}
+
+# Password of SAP HANA administration database user.'
+NW_HDB_getDBInfo.systemPassword = {{ hdb_main_password }}
+
+# Password of user 'SYSTEM' inside the SAP HANA database server from a backup
+# NW_HDB_getDBInfo.systemPasswordBackup =
+
+# SAP HANA system ID
+NW_HDB_getDBInfo.systemid = {{ hdb_sid|upper }}
+
+# A dedicated OS group for the tenant database, required for SAP HANA multitenant database containers with high isolation level.
+# NW_HDB_getDBInfo.tenantOsGroup =
+
+# A dedicated OS user for the tenant database, required for SAP HANA multitenant database containers with high isolation level.
+# NW_HDB_getDBInfo.tenantOsUser =
+
+# The SQL port for SAP HANA tenant database
+# NW_HDB_getDBInfo.tenantPort =
+
+# Connect using SSL/TLS. Default value: false.
+# NW_HDB_getDBInfo.usingSSL = false
+
+# Password of the webadm user.
+NW_IcmAuth.webadmPassword = {{ sap_main_password }}
+
+# Location for HANA backup files on the HANA database host (as delivered by SAP).
+# NW_Recovery_Install_HDB.backupLocationHANA =
+
+# Location for HANA backup files on the SAP Application Server host.
+# NW_Recovery_Install_HDB.backupLocationSAP =
+
+# NW_Recovery_Install_HDB.checkIntegrity = false
+
+# Location for HANA backup files on the HANA database host (Target location for ABAP export archives). Default value: /usr/sap//HDB/backup/data/
+NW_Recovery_Install_HDB.extractLocation = /usr/sap/{{ hdb_sid|upper }}/HDB{{ hdb_instance_number }}/backup/data/DB_{{ hdb_sid|upper }}
+
+# Number of concurrent jobs used to load and/or extract archives to HANA Host
+NW_Recovery_Install_HDB.extractParallelJobs = {{ hdb_concurrent_jobs }}
+
+# Archives or backup files are to be loaded by SWPM or are already available(mounted) on the HANA host. Possible values are: load (default) or mount.
+# NW_Recovery_Install_HDB.loadOrMount = load
+
+# Certificate to access HTTPS SAPContorl WSDL.
+# NW_Recovery_Install_HDB.sapControlWsdlCertificatePath =
+
+# URL use to access SAPControl WSDL. The URL format is: http://:513/SAPControl?wsdl or https://:514/SAPControl?wsdl
+NW_Recovery_Install_HDB.sapControlWsdlUrl = http://{{ hdb_host }}:50013/SAPControl?wsdl
+
+# The OS user of the HANA 'adm' user
+NW_Recovery_Install_HDB.sidAdmName = {{ hdb_sid|lower }}adm
+
+# The password of the OS HANA 'adm' user
+NW_Recovery_Install_HDB.sidAdmPassword = {{ hdb_main_password }}
+
+# DEPRECATED, DO NOT USE!
+NW_SAPCrypto.SAPCryptoFile = {{ s4app_kit }}/sapexe.sar
+
+# Enable the instance agent (sapstartsrv) data supplier to send operating system information to the System Landscape Directory (SLD). Default is 'false'.
+# NW_SLD_Configuration.configureSld = false
+
+# Host of the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldHost =
+
+# Port used to connect to the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldPort =
+
+# Use HTTPS. Default is 'false'.
+# NW_SLD_Configuration.sldUseHttps = false
+
+# The user that is to authenticate towards the System Landscape Directory (SLD)
+# NW_SLD_Configuration.sldUser =
+
+# User password to authenticate towards the System Landscape Directory (SLD). Note: The connection is not checked by Software Provisioning Manager.
+# NW_SLD_Configuration.sldUserPassword =
+
+# SAP INTERNAL USE ONLY
+# NW_System.installSAPHostAgent = true
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.dbaToolsSar =
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.igsExeSar = {{ s4app_kit }}/igsexe.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.igsHelperSar = {{ s4app_kit }}/igshelper.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.sapExeDbSar = {{ s4app_kit }}/sapexedb.sar
+
+# DEPRECATED, DO NOT USE!
+NW_Unpack.sapExeSar = {{ s4app_kit }}/sapexe.sar
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.sapJvmSar =
+
+# DEPRECATED, DO NOT USE!
+# NW_Unpack.xs2Sar =
+
+# Number of Batch Work Processes. Leave empty for default.
+# NW_WPConfiguration.ciBtcWPNumber = 6
+
+# Number of Dialog Work Processes. Leave empty for default.
+# NW_WPConfiguration.ciDialogWPNumber = 10
+
+# SAP offers the option to skip setting of security profile parameters (NOT recommended) only for compatibility reasons. Set to true and the file with recommended security settings will not be taken into consideration. See SAP Note 2714839 for security recommendations.
+# NW_adaptProfile.skipSecurityProfileSettings = false
+
+# SAP INTERNAL USE ONLY
+# NW_adaptProfile.templateFiles =
+
+# The FQDN of the system
+# NW_getFQDN.FQDN =
+
+# SAP INTERNAL USE ONLY
+# NW_getFQDN.resolve = true
+
+# Specify whether you want to set FQDN for the system.
+NW_getFQDN.setFQDN = false
+
+# Manual configuration and execution of Migration Monitor or manual native database copy method.
+# NW_getLoadType.importManuallyExecuted = false
+
+# The load type chosen by the user. Valid values are: 'SAP', 'STD', 'OBR', 'HCP', 'MDA', 'HBR', 'SBR'
+NW_getLoadType.loadType = SAP
+
+# Password of the database manager operator user 'control' for liveCache
+# NW_liveCache.controlUserPwd =
+
+# Host name for liveCache
+# NW_liveCache.liveCacheHost =
+
+# Database ID for liveCache
+# NW_liveCache.liveCacheID =
+
+# Database schema for liveCache
+# NW_liveCache.liveCacheUser =
+
+# Password of database schema for liveCache
+# NW_liveCache.liveCacheUserPwd =
+
+# Specify whether you want to use liveCache. Default value is 'true'.
+# NW_liveCache.useLiveCache = false
+
+# The ASP device name where the SAP system will be in installed. The property is IBM i only.
+# Values from 1 to 256 can be specified. The default is 1, the System ASP.
+# OS4.DestinationASP =
+
+# The folder containing all archives that have been downloaded from http://support.sap.com/swdc and are supposed to be used in this procedure
+archives.downloadBasket = {{ s4app_kit }}
+
+# DBACOCKPIT user is to be created. Default value is 'true'.
+# hdb.create.dbacockpit.user = true
+
+# Windows only: The domain of the SAP Host Agent user
+# hostAgent.domain =
+
+# Password for the 'sapadm' user of the SAP Host Agent
+hostAgent.sapAdmPassword = {{ sap_main_password }}
+
+# installation_export.archivesFolder =
+
+# Windows only: The domain of all users of this SAP system. Leave empty for default.
+# nwUsers.sapDomain =
+
+# Windows only: The password of the 'SAPServiceSID' user
+# nwUsers.sapServiceSIDPassword =
+
+# UNIX only: The user ID of the 'sapadm' user, leave empty for default. The ID is ignored if the user already exists.
+# nwUsers.sapadmUID =
+
+# UNIX only: The group id of the 'sapsys' group, leave empty for default. The ID is ignored if the group already exists.
+# nwUsers.sapsysGID =
+
+# UNIX only: The user id of the adm user, leave empty for default. The ID is ignored if the user already exists.
+# nwUsers.sidAdmUID =
+
+# The password of the 'adm' user
+nwUsers.sidadmPassword = {{ sap_main_password }}
+
+# ABAP schema password
+# storageBasedCopy.abapSchemaPassword =
+
+# Instance number of the SAP HANA Database server
+storageBasedCopy.hdb.instanceNumber = {{ hdb_instance_number }}
+
+# Password of user 'SYSTEM' inside the SAP HANA Database Server
+# storageBasedCopy.hdb.systemPassword =
+
+# Sets the SAPDB schema password using a parameter file.
+# storageBasedCopy.javaSchemaPassword =
diff --git a/ansible/roles/s4appreq/defaults/main.yml b/ansible/roles/s4appreq/defaults/main.yml
index 753139a..c81cf5b 100644
--- a/ansible/roles/s4appreq/defaults/main.yml
+++ b/ansible/roles/s4appreq/defaults/main.yml
@@ -1,73 +1,3 @@
---
-#Disk size config
-sap_disk_size: "128.00 GB"
-swap_disk_size: "40.00 GB"
-#Logical volume size config
-# swap_lv_size: "30g"
-usrsap_lv_size: "5g"
-sap_lv_size: "20g"
-sapmnt_lv_size: "20g"
-saptrans_lv_size: "50g"
-
-# SWAP size GB
-# SAP note 1597355
-# Commented until terraform code update
-# swap_lv:
-# - size: 64
-# ram_min: 32
-# ram_max: 63
-# - size: 96
-# ram_min: 64
-# ram_max: 127
-# - size: 128
-# ram_min: 128
-# ram_max: 255
-# - size: 160
-# ram_min: 256
-# ram_max: 511
-# - size: 192
-# ram_min: 512
-# ram_max: 1023
-# - size: 224
-# ram_min: 1024
-# ram_max: 2047
-# - size: 256
-# ram_min: 2048
-# ram_max: 4095
-# - size: 288
-# ram_min: 4096
-# ram_max: 8191
-# - size: 320
-# ram_min: 8192
-# ram_max: 20000
-
-swap_lv:
- - size: 38
- ram_min: 32
- ram_max: 63
- - size: 38
- ram_min: 64
- ram_max: 127
- - size: 38
- ram_min: 128
- ram_max: 255
- - size: 38
- ram_min: 256
- ram_max: 511
- - size: 38
- ram_min: 512
- ram_max: 1023
- - size: 224
- ram_min: 1024
- ram_max: 2047
- - size: 38
- ram_min: 2048
- ram_max: 4095
- - size: 288
- ram_min: 4096
- ram_max: 8191
- - size: 38
- ram_min: 8192
- ram_max: 20000
...
diff --git a/ansible/roles/s4appreq/tasks/configurations/compatlibs.yml b/ansible/roles/s4appreq/tasks/configurations/compatlibs.yml
index 75db0b5..3e1f675 100644
--- a/ansible/roles/s4appreq/tasks/configurations/compatlibs.yml
+++ b/ansible/roles/s4appreq/tasks/configurations/compatlibs.yml
@@ -1,14 +1,13 @@
---
-#2560024 - /lib64/libstdc++.so.6: version `GLIBCXX_3.4.22' not found
- name: Create /usr/sap/lib directory
file:
path: /usr/sap/lib
state: directory
- mode: 0755
+ mode: 0775
-- name: Create link to compat-sap-c++-6 lib
+- name: Create symlink to compat library
file:
- src: /opt/rh/SAP/lib64/compat-sap-c++-6.so
+ src: /opt/rh/SAP/lib64/compat-sap-c++-11.so
dest: /usr/sap/lib/libstdc++.so.6
state: link
...
diff --git a/ansible/roles/s4appreq/tasks/configurations/hostname_fix_RedHat.yml b/ansible/roles/s4appreq/tasks/configurations/hostname_fix_RedHat.yml
deleted file mode 100644
index 6e3dd62..0000000
--- a/ansible/roles/s4appreq/tasks/configurations/hostname_fix_RedHat.yml
+++ /dev/null
@@ -1,19 +0,0 @@
----
-- name: Disable manage_etc_hosts in /etc/cloud/cloud.cfg
- replace:
- path: /etc/cloud/cloud.cfg
- regexp: '(.*manage_etc_hosts.*)'
- replace: '#\1'
-
-- name: Get short hostname
- command: hostname -s
- register: sap_short_hostname
- changed_when: False
-
-#1054467 - Local host name refers to loopback address
-- name: Disable default hostname resolve to loopback address
- replace:
- path: /etc/hosts
- regexp: "^(?!{{ ansible_default_ipv4.address }}.*{{ sap_short_hostname.stdout }})(.*)({{ sap_short_hostname.stdout }}.*)"
- replace: '\1'
-...
diff --git a/ansible/roles/s4appreq/tasks/configurations/kdump.yml b/ansible/roles/s4appreq/tasks/configurations/kdump.yml
deleted file mode 100644
index e8a8be5..0000000
--- a/ansible/roles/s4appreq/tasks/configurations/kdump.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- name: Get the list of services
- service_facts:
-
-- name: Stop and disable kdump
- systemd:
- name: kdump
- state: stopped
- enabled: no
- when: "'kdump.service' in services"
-...
diff --git a/ansible/roles/s4appreq/tasks/configurations/kernel_RedHat8.yml b/ansible/roles/s4appreq/tasks/configurations/kernel_RedHat8.yml
index a262bc2..2e31d22 100644
--- a/ansible/roles/s4appreq/tasks/configurations/kernel_RedHat8.yml
+++ b/ansible/roles/s4appreq/tasks/configurations/kernel_RedHat8.yml
@@ -1,5 +1,5 @@
---
-- name: Set recommended kernel parameters for SAP NW on RedHat 8
+- name: Set recommended kernel parameters for SAP AP on RedHat 8
sysctl:
sysctl_file: /etc/sysctl.d/sap.conf
name: "{{ kernel_param.name }}"
@@ -11,6 +11,9 @@
- { name: vm.max_map_count, value: 2147483647 }
- { name: kernel.pid_max, value: 4194304 }
- { name: kernel.sem, value: "32000 1024000000 500 32000" }
+ - { name: net.ipv4.tcp_keepalive_time, value: 300 }
+ - { name: net.ipv4.tcp_keepalive_intvl, value: 75 }
+ - { name: net.ipv4.tcp_keepalive_probes, value: 9 }
loop_control:
loop_var: kernel_param
...
diff --git a/ansible/roles/s4appreq/tasks/configurations/limits.yml b/ansible/roles/s4appreq/tasks/configurations/limits.yml
index e0b72f0..97b44f9 100644
--- a/ansible/roles/s4appreq/tasks/configurations/limits.yml
+++ b/ansible/roles/s4appreq/tasks/configurations/limits.yml
@@ -25,7 +25,7 @@
loop_control:
loop_var: ltype
-- name: Set core limits
+- name: Set core limits
lineinfile:
path: /etc/security/limits.conf
line: "{{ corelimit }}"
diff --git a/ansible/roles/s4appreq/tasks/configurations/repository_RedHat.yml b/ansible/roles/s4appreq/tasks/configurations/repository_RedHat.yml
deleted file mode 100644
index aacebff..0000000
--- a/ansible/roles/s4appreq/tasks/configurations/repository_RedHat.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-- name: Wait for cloud init to finish
- cloud_init_data_facts:
- filter: status
- register: res
- until: "res.cloud_init_data_facts.status.v1.stage is defined and not res.cloud_init_data_facts.status.v1.stage"
- retries: 60
- delay: 10
-...
diff --git a/ansible/roles/s4appreq/tasks/configurations/reqpkg.yml b/ansible/roles/s4appreq/tasks/configurations/reqpkg.yml
index 8f1e2b7..7361143 100644
--- a/ansible/roles/s4appreq/tasks/configurations/reqpkg.yml
+++ b/ansible/roles/s4appreq/tasks/configurations/reqpkg.yml
@@ -2,5 +2,5 @@
- name: Import required packages
package:
state: present
- name: "{{ s4app_required_packages }}"
+ name: "{{ ap_required_packages }}"
...
diff --git a/ansible/roles/s4appreq/tasks/configurations/reqpkggroups_RedHat.yml b/ansible/roles/s4appreq/tasks/configurations/reqpkggroups_RedHat.yml
deleted file mode 100644
index ba551d6..0000000
--- a/ansible/roles/s4appreq/tasks/configurations/reqpkggroups_RedHat.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: Import requierd package groups
- dnf:
- state: present
- name: "{{ s4app_required_package_groups }}"
-...
diff --git a/ansible/roles/s4appreq/tasks/configurations/saptune.yml b/ansible/roles/s4appreq/tasks/configurations/saptune.yml
index b10231f..70480c0 100644
--- a/ansible/roles/s4appreq/tasks/configurations/saptune.yml
+++ b/ansible/roles/s4appreq/tasks/configurations/saptune.yml
@@ -14,4 +14,4 @@
- name: Select NETWEAVER profile for saptune
command: /usr/sbin/saptune solution apply NETWEAVER
when: "'NETWEAVER' not in netweaver_profile.stdout"
-...
+...
\ No newline at end of file
diff --git a/ansible/roles/s4appreq/tasks/configurations/tmpfs.yml b/ansible/roles/s4appreq/tasks/configurations/tmpfs.yml
new file mode 100644
index 0000000..ac7b1ee
--- /dev/null
+++ b/ansible/roles/s4appreq/tasks/configurations/tmpfs.yml
@@ -0,0 +1,26 @@
+---
+# TMPFS sizing
+# SAP Notes:
+# - 2772999 - Red Hat Enterprise Linux 8.x: Installation and Configuration (v22)
+# - 941735 - SAP memory management system for 64-bit Linux systems (v11)
+
+- name: Update target hosts variables
+ gather_facts:
+
+- name: Compute new tmpfs size
+ set_fact:
+ tmpfs_size_g: "{{ ((( ansible_memory_mb.real.total | int + ansible_memory_mb.swap.total | int) * 0.75) / 1024) | round | int }}"
+
+- name: Add tmpfs device to /etc/fstab
+ lineinfile:
+ path: /etc/fstab
+ regexp: "^/dev/shm (.*)$"
+ line: "tmpfs /dev/shm tmpfs size={{ tmpfs_size_g }}G,rw,nosuid,nodev 0 0"
+
+- name: Remount tmpfs
+ mount:
+ path: /dev/shm
+ src: tmpfs
+ fstype: tmpfs
+ state: remounted
+...
diff --git a/ansible/roles/s4appreq/tasks/configurations/umask_RHEL.yml b/ansible/roles/s4appreq/tasks/configurations/umask_RHEL.yml
deleted file mode 100644
index e38746c..0000000
--- a/ansible/roles/s4appreq/tasks/configurations/umask_RHEL.yml
+++ /dev/null
@@ -1,12 +0,0 @@
----
-- name: Configure default umask
- replace:
- path: "{{ file }}"
- regexp: '(.*umask 077.*)'
- replace: 'umask 022'
- loop:
- - /etc/profile
- - /etc/bashrc
- loop_control:
- loop_var: file
-...
diff --git a/ansible/roles/s4appreq/tasks/main.yml b/ansible/roles/s4appreq/tasks/main.yml
index bc0c392..31f3933 100644
--- a/ansible/roles/s4appreq/tasks/main.yml
+++ b/ansible/roles/s4appreq/tasks/main.yml
@@ -2,7 +2,7 @@
- name: Import OS distribution variables
include_vars: "{{ ansible_distribution }}{{ ansible_distribution_major_version }}.yml"
-- name: Make specific OS configurations as recommended by SAP for S/4HANA APP
+- name: Make specific OS configurations as recommended by SAP for ABAP Platform
include_tasks: "configurations/{{ item }}.yml"
- loop: "{{ s4app_required_configurations }}"
+ loop: "{{ ap_required_configurations }}"
...
diff --git a/ansible/roles/s4appreq/vars/RedHat8.yml b/ansible/roles/s4appreq/vars/RedHat8.yml
index ceb0eb4..a21fc04 100644
--- a/ansible/roles/s4appreq/vars/RedHat8.yml
+++ b/ansible/roles/s4appreq/vars/RedHat8.yml
@@ -1,53 +1,14 @@
---
-s4app_required_packages:
- - cairo
- - graphviz
- - iptraf-ng
- - lm_sensors
- - net-tools
- - uuidd
- - libnsl
- - tcsh
- - psmisc
- - nfs-utils
- - bind-utils
- - expect
- - gtk2
- - krb5-workstation
- - krb5-libs
- - libaio
- - libcanberra-gtk2
- - libibverbs
- - libicu
- - libtool-ltdl
- - numactl
- - openssl
- - PackageKit-gtk3-module
- - rsyslog
- - sudo
- - xfsprogs
- - xorg-x11-xauth
- - libatomic
- - chrony
- - lvm2
- - unzip
+ap_required_packages:
+ - "compat-sap-c++-10"
+ - "compat-sap-c++-11"
+ - "libatomic"
-s4app_required_configurations:
- - "repository_RedHat"
- - "update_RedHat8"
+ap_required_configurations:
- "reqpkg"
- - "hostname_fix_RedHat"
- - "hostname"
- "kernel_RedHat8"
- - "umask_RHEL"
- - "reboot"
- - "filesystems"
- - "SELinux"
- - "firewalld"
- - "uuidd"
- - "abrtd"
- - "kdump"
+ - "tmpfs"
- "limits"
- - "tmpfiles"
+ - "compatlibs"
- "reboot"
...
diff --git a/ansible/roles/s4appreq/vars/SLES_SAP15.yml b/ansible/roles/s4appreq/vars/SLES_SAP15.yml
index 7b061f2..fd4acdf 100644
--- a/ansible/roles/s4appreq/vars/SLES_SAP15.yml
+++ b/ansible/roles/s4appreq/vars/SLES_SAP15.yml
@@ -1,19 +1,13 @@
---
-s4app_required_packages:
- - lvm2
- - uuidd
+ap_required_packages:
+ - libgcc_s1
+ - libstdc++6
+ - libatomic1
-s4app_required_configurations:
- - "repository_SLES"
- - "update_SLES_SAP"
+ap_required_configurations:
- "reqpkg"
- - "umask_SLES"
- - "hostname"
- - "reboot"
- - "filesystems"
+ - "tmpfs"
- "limits"
- - "tmpfiles"
- - "uuidd"
- "saptune"
- "reboot"
...
diff --git a/ansible/roles/sapbasereq/defaults/main.yml b/ansible/roles/sapbasereq/defaults/main.yml
new file mode 100644
index 0000000..c81cf5b
--- /dev/null
+++ b/ansible/roles/sapbasereq/defaults/main.yml
@@ -0,0 +1,3 @@
+---
+
+...
diff --git a/ansible/roles/s4appreq/files/sap.conf b/ansible/roles/sapbasereq/files/sap.conf
similarity index 100%
rename from ansible/roles/s4appreq/files/sap.conf
rename to ansible/roles/sapbasereq/files/sap.conf
diff --git a/ansible/roles/s4appreq/tasks/configurations/SELinux.yml b/ansible/roles/sapbasereq/tasks/configurations/SELinux.yml
similarity index 89%
rename from ansible/roles/s4appreq/tasks/configurations/SELinux.yml
rename to ansible/roles/sapbasereq/tasks/configurations/SELinux.yml
index 967003c..2277489 100644
--- a/ansible/roles/s4appreq/tasks/configurations/SELinux.yml
+++ b/ansible/roles/sapbasereq/tasks/configurations/SELinux.yml
@@ -2,4 +2,4 @@
- name: Disable SELinux
selinux:
state: disabled
-...
\ No newline at end of file
+...
\ No newline at end of file
diff --git a/ansible/roles/s4appreq/tasks/configurations/abrtd.yml b/ansible/roles/sapbasereq/tasks/configurations/abrtd.yml
similarity index 79%
rename from ansible/roles/s4appreq/tasks/configurations/abrtd.yml
rename to ansible/roles/sapbasereq/tasks/configurations/abrtd.yml
index a77e224..a708bcd 100644
--- a/ansible/roles/s4appreq/tasks/configurations/abrtd.yml
+++ b/ansible/roles/sapbasereq/tasks/configurations/abrtd.yml
@@ -7,5 +7,5 @@
name: abrtd
state: stopped
enabled: no
- when: "'abrtd.service' in services"
+ when: "'abrtd.service' in services"
...
diff --git a/ansible/roles/s4appreq/tasks/configurations/firewalld.yml b/ansible/roles/sapbasereq/tasks/configurations/firewalld.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/firewalld.yml
rename to ansible/roles/sapbasereq/tasks/configurations/firewalld.yml
diff --git a/ansible/roles/s4appreq/tasks/configurations/hostname.yml b/ansible/roles/sapbasereq/tasks/configurations/hostname.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/hostname.yml
rename to ansible/roles/sapbasereq/tasks/configurations/hostname.yml
diff --git a/ansible/roles/sapbasereq/tasks/configurations/hostname_fix_RedHat.yml b/ansible/roles/sapbasereq/tasks/configurations/hostname_fix_RedHat.yml
new file mode 100644
index 0000000..bdd6ee9
--- /dev/null
+++ b/ansible/roles/sapbasereq/tasks/configurations/hostname_fix_RedHat.yml
@@ -0,0 +1,20 @@
+---
+- name: Disable manage_etc_hosts in /etc/cloud/cloud.cfg
+ replace:
+ path: /etc/cloud/cloud.cfg
+ regexp: '(.*manage_etc_hosts.*)'
+ replace: '#\1'
+
+#1054467 - Local host name refers to loopback address
+- name: Disable default hostname resolve to loopback address
+ replace:
+ path: /etc/hosts
+ regexp: "(.*{{ ansible_hostname }}.*)"
+ replace: '#\1'
+
+- name: Disable ipv6 loopback address
+ replace:
+ path: /etc/hosts
+ regexp: "(.*::1.*)"
+ replace: '#\1'
+...
\ No newline at end of file
diff --git a/ansible/roles/saphanareq/tasks/configurations/kdump.yml b/ansible/roles/sapbasereq/tasks/configurations/kdump.yml
similarity index 79%
rename from ansible/roles/saphanareq/tasks/configurations/kdump.yml
rename to ansible/roles/sapbasereq/tasks/configurations/kdump.yml
index 3c55657..7647dec 100644
--- a/ansible/roles/saphanareq/tasks/configurations/kdump.yml
+++ b/ansible/roles/sapbasereq/tasks/configurations/kdump.yml
@@ -7,5 +7,5 @@
name: kdump
state: stopped
enabled: no
- when: "'kdump.service' in services"
+ when: "'kdump.service' in services"
...
\ No newline at end of file
diff --git a/ansible/roles/sapbasereq/tasks/configurations/reboot.yml b/ansible/roles/sapbasereq/tasks/configurations/reboot.yml
new file mode 100644
index 0000000..7287953
--- /dev/null
+++ b/ansible/roles/sapbasereq/tasks/configurations/reboot.yml
@@ -0,0 +1,6 @@
+---
+- name: Reboot target host
+ reboot:
+ connect_timeout: 5
+ post_reboot_delay: 10
+...
diff --git a/ansible/roles/saphanareq/tasks/configurations/repository_RedHat.yml b/ansible/roles/sapbasereq/tasks/configurations/repository_RHEL.yml
similarity index 89%
rename from ansible/roles/saphanareq/tasks/configurations/repository_RedHat.yml
rename to ansible/roles/sapbasereq/tasks/configurations/repository_RHEL.yml
index aacebff..57206e4 100644
--- a/ansible/roles/saphanareq/tasks/configurations/repository_RedHat.yml
+++ b/ansible/roles/sapbasereq/tasks/configurations/repository_RHEL.yml
@@ -4,6 +4,6 @@
filter: status
register: res
until: "res.cloud_init_data_facts.status.v1.stage is defined and not res.cloud_init_data_facts.status.v1.stage"
- retries: 60
- delay: 10
+ retries: 50
+ delay: 5
...
diff --git a/ansible/roles/s4appreq/tasks/configurations/repository_SLES.yml b/ansible/roles/sapbasereq/tasks/configurations/repository_SLES.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/repository_SLES.yml
rename to ansible/roles/sapbasereq/tasks/configurations/repository_SLES.yml
diff --git a/ansible/roles/sapbasereq/tasks/configurations/reqpkg.yml b/ansible/roles/sapbasereq/tasks/configurations/reqpkg.yml
new file mode 100644
index 0000000..ac68308
--- /dev/null
+++ b/ansible/roles/sapbasereq/tasks/configurations/reqpkg.yml
@@ -0,0 +1,6 @@
+---
+- name: Import required packages
+ package:
+ state: present
+ name: "{{ sapbase_required_packages }}"
+...
diff --git a/ansible/roles/s4appreq/tasks/configurations/tmpfiles.yml b/ansible/roles/sapbasereq/tasks/configurations/tmpfiles.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/tmpfiles.yml
rename to ansible/roles/sapbasereq/tasks/configurations/tmpfiles.yml
diff --git a/ansible/roles/saphanareq/tasks/configurations/umask_RHEL.yml b/ansible/roles/sapbasereq/tasks/configurations/umask_RHEL.yml
similarity index 90%
rename from ansible/roles/saphanareq/tasks/configurations/umask_RHEL.yml
rename to ansible/roles/sapbasereq/tasks/configurations/umask_RHEL.yml
index e38746c..a500b85 100644
--- a/ansible/roles/saphanareq/tasks/configurations/umask_RHEL.yml
+++ b/ansible/roles/sapbasereq/tasks/configurations/umask_RHEL.yml
@@ -6,7 +6,7 @@
replace: 'umask 022'
loop:
- /etc/profile
- - /etc/bashrc
+ - /etc/bashrc
loop_control:
loop_var: file
...
diff --git a/ansible/roles/s4appreq/tasks/configurations/umask_SLES.yml b/ansible/roles/sapbasereq/tasks/configurations/umask_SLES.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/umask_SLES.yml
rename to ansible/roles/sapbasereq/tasks/configurations/umask_SLES.yml
diff --git a/ansible/roles/s4appreq/tasks/configurations/update_RedHat8.yml b/ansible/roles/sapbasereq/tasks/configurations/update_RedHat8.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/update_RedHat8.yml
rename to ansible/roles/sapbasereq/tasks/configurations/update_RedHat8.yml
diff --git a/ansible/roles/s4appreq/tasks/configurations/update_SLES_SAP.yml b/ansible/roles/sapbasereq/tasks/configurations/update_SLES_SAP.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/update_SLES_SAP.yml
rename to ansible/roles/sapbasereq/tasks/configurations/update_SLES_SAP.yml
diff --git a/ansible/roles/s4appreq/tasks/configurations/uuidd.yml b/ansible/roles/sapbasereq/tasks/configurations/uuidd.yml
similarity index 100%
rename from ansible/roles/s4appreq/tasks/configurations/uuidd.yml
rename to ansible/roles/sapbasereq/tasks/configurations/uuidd.yml
diff --git a/ansible/roles/sapbasereq/tasks/main.yml b/ansible/roles/sapbasereq/tasks/main.yml
new file mode 100644
index 0000000..46b2462
--- /dev/null
+++ b/ansible/roles/sapbasereq/tasks/main.yml
@@ -0,0 +1,8 @@
+---
+- name: Import OS distribution variables
+ include_vars: "{{ ansible_distribution }}{{ ansible_distribution_major_version }}.yml"
+
+- name: Make specific OS configurations
+ include_tasks: "configurations/{{ item }}.yml"
+ loop: "{{ sapbase_required_configurations }}"
+...
diff --git a/ansible/roles/sapbasereq/vars/RedHat8.yml b/ansible/roles/sapbasereq/vars/RedHat8.yml
new file mode 100644
index 0000000..713e3fe
--- /dev/null
+++ b/ansible/roles/sapbasereq/vars/RedHat8.yml
@@ -0,0 +1,27 @@
+---
+sapbase_required_packages:
+ - uuidd
+ - libnsl
+ - tcsh
+ - psmisc
+ - nfs-utils
+ - bind-utils
+ - chrony
+ - lvm2
+ - unzip
+
+sapbase_required_configurations:
+ - "repository_RHEL"
+ - "update_RedHat8"
+ - "reqpkg"
+ - "hostname_fix_RedHat"
+ - "hostname"
+ - "umask_RHEL"
+ - "SELinux"
+ - "firewalld"
+ - "uuidd"
+ - "abrtd"
+ - "kdump"
+ - "tmpfiles"
+ - "reboot"
+...
diff --git a/ansible/roles/sapbasereq/vars/SLES_SAP15.yml b/ansible/roles/sapbasereq/vars/SLES_SAP15.yml
new file mode 100644
index 0000000..90928d8
--- /dev/null
+++ b/ansible/roles/sapbasereq/vars/SLES_SAP15.yml
@@ -0,0 +1,19 @@
+---
+sapbase_required_packages:
+ - uuidd
+ - tcsh
+ - nfs-utils
+ - bind-utils
+ - lvm2
+ - unzip
+
+sapbase_required_configurations:
+ - "repository_SLES"
+ - "update_SLES_SAP"
+ - "reqpkg"
+ - "hostname"
+ - "umask_SLES"
+ - "tmpfiles"
+ - "uuidd"
+ - "reboot"
+...
diff --git a/ansible/roles/saphanareq/defaults/main.yml b/ansible/roles/saphanareq/defaults/main.yml
index 8b13789..880045c 100644
--- a/ansible/roles/saphanareq/defaults/main.yml
+++ b/ansible/roles/saphanareq/defaults/main.yml
@@ -1 +1,3 @@
+---
+...
\ No newline at end of file
diff --git a/ansible/roles/saphanareq/tasks/configurations/SELinux.yml b/ansible/roles/saphanareq/tasks/configurations/SELinux.yml
deleted file mode 100644
index 967003c..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/SELinux.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- name: Disable SELinux
- selinux:
- state: disabled
-...
\ No newline at end of file
diff --git a/ansible/roles/saphanareq/tasks/configurations/abrtd.yml b/ansible/roles/saphanareq/tasks/configurations/abrtd.yml
deleted file mode 100644
index a77e224..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/abrtd.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- name: Get the list of services
- service_facts:
-
-- name: Stop and disable abrtd
- systemd:
- name: abrtd
- state: stopped
- enabled: no
- when: "'abrtd.service' in services"
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/filesystems.yml b/ansible/roles/saphanareq/tasks/configurations/filesystems.yml
index 2cf0a0a..4dccade 100644
--- a/ansible/roles/saphanareq/tasks/configurations/filesystems.yml
+++ b/ansible/roles/saphanareq/tasks/configurations/filesystems.yml
@@ -1,8 +1,8 @@
---
# Storage sizing
-# https://cloud.ibm.com/docs/sap?topic=sap-hana-iaas-offerings-profiles-intel-vs-vpc (Last updated 2022-01-28)
-# https://cloud.ibm.com/docs/sap?topic=sap-storage-design-considerations#hana-iaas-mx2-16x128-32x256-configure (Last updated 2022-05-19)
-# https://cloud.ibm.com/docs/sap?topic=sap-storage-design-considerations#hana-iaas-mx2-48x384-configure (Last updated 2022-05-19)
+# https://cloud.ibm.com/docs/sap?topic=sap-hana-iaas-offerings-profiles-intel-vs-vpc (Updated on 2023-03-08)
+# https://cloud.ibm.com/docs/sap?topic=sap-storage-design-considerations#hana-iaas-mx2-16x128-32x256-configure (Updated on 2022-05-19)
+# https://cloud.ibm.com/docs/sap?topic=sap-storage-design-considerations#hana-iaas-mx2-48x384-configure (Updated on 2022-05-19)
# SAP Notes:
# - 2779331 - HANA services use large SWAP memory (v5)
diff --git a/ansible/roles/saphanareq/tasks/configurations/firewalld.yml b/ansible/roles/saphanareq/tasks/configurations/firewalld.yml
deleted file mode 100644
index c627f7c..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/firewalld.yml
+++ /dev/null
@@ -1,11 +0,0 @@
----
-- name: Get the list of services
- service_facts:
-
-- name: Stop and disable firewalld
- systemd:
- name: firewalld
- state: stopped
- enabled: no
- when: "'firewalld.service' in services"
-...
\ No newline at end of file
diff --git a/ansible/roles/saphanareq/tasks/configurations/hostname.yml b/ansible/roles/saphanareq/tasks/configurations/hostname.yml
deleted file mode 100644
index 6dae370..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/hostname.yml
+++ /dev/null
@@ -1,31 +0,0 @@
----
-#2718300 - Physical and Virtual hostname length limitations
-- name: Get short hostname
- command: hostname -s
- register: hana_short_hostname
- changed_when: False
-
-- name: Get FQDN
- set_fact:
- hana_host_fqdn: "{{ ansible_fqdn }}"
-
-- name: Check if hostname has 13 or less characters as per SAP requirement
- fail:
- msg: "Hostname {{ hana_short_hostname.stdout }} has more than 13 characters"
- when: hana_short_hostname.stdout|length > 13
-
-- name: Line to be added in /etc/hosts if FQDN is set
- set_fact:
- line_to_add: "{{ ansible_default_ipv4.address }} {{ hana_host_fqdn }} {{ hana_short_hostname.stdout }}"
- when: hana_short_hostname.stdout != hana_host_fqdn
-
-- name: Line to be added in /etc/hosts if FQDN is not set
- set_fact:
- line_to_add: "{{ ansible_default_ipv4.address }} {{ hana_short_hostname.stdout }}"
- when: hana_short_hostname.stdout == hana_host_fqdn
-
-- name: Enable hostname resolve to internal IP
- lineinfile:
- path: /etc/hosts
- line: "{{ line_to_add }}"
-...
\ No newline at end of file
diff --git a/ansible/roles/saphanareq/tasks/configurations/hostname_fix_RedHat.yml b/ansible/roles/saphanareq/tasks/configurations/hostname_fix_RedHat.yml
deleted file mode 100644
index 6e3dd62..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/hostname_fix_RedHat.yml
+++ /dev/null
@@ -1,19 +0,0 @@
----
-- name: Disable manage_etc_hosts in /etc/cloud/cloud.cfg
- replace:
- path: /etc/cloud/cloud.cfg
- regexp: '(.*manage_etc_hosts.*)'
- replace: '#\1'
-
-- name: Get short hostname
- command: hostname -s
- register: sap_short_hostname
- changed_when: False
-
-#1054467 - Local host name refers to loopback address
-- name: Disable default hostname resolve to loopback address
- replace:
- path: /etc/hosts
- regexp: "^(?!{{ ansible_default_ipv4.address }}.*{{ sap_short_hostname.stdout }})(.*)({{ sap_short_hostname.stdout }}.*)"
- replace: '\1'
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/repository_SLES.yml b/ansible/roles/saphanareq/tasks/configurations/repository_SLES.yml
deleted file mode 100644
index bb3ef8d..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/repository_SLES.yml
+++ /dev/null
@@ -1,5 +0,0 @@
----
-- name: Wait for SLES repo configurations
- wait_for:
- path: /etc/SUSEConnect
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/reqpkggroups_RedHat.yml b/ansible/roles/saphanareq/tasks/configurations/reqpkggroups_RedHat.yml
deleted file mode 100644
index 4a603e9..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/reqpkggroups_RedHat.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: Import requierd package groups
- dnf:
- state: present
- name: "{{ saphana_required_package_groups }}"
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/symlinks.yml b/ansible/roles/saphanareq/tasks/configurations/symlinks.yml
deleted file mode 100644
index c7ed6e4..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/symlinks.yml
+++ /dev/null
@@ -1,13 +0,0 @@
----
-- name: Create link to ssl lib
- file:
- src: /usr/lib64/libssl.so.10
- dest: /usr/lib64/libssl.so.1.0.1
- state: link
-
-- name: Create link to crypto lib
- file:
- src: /usr/lib64/libcrypto.so.10
- dest: /usr/lib64/libcrypto.so.1.0.1
- state: link
-...
\ No newline at end of file
diff --git a/ansible/roles/saphanareq/tasks/configurations/tmpfiles.yml b/ansible/roles/saphanareq/tasks/configurations/tmpfiles.yml
deleted file mode 100644
index fa91c36..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/tmpfiles.yml
+++ /dev/null
@@ -1,9 +0,0 @@
----
-- name: Configure tmpfiles exceptions
- copy:
- src: sap.conf
- dest: /etc/tmpfiles.d/sap.conf
- owner: root
- group: root
- mode: 0644
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/umask_SLES.yml b/ansible/roles/saphanareq/tasks/configurations/umask_SLES.yml
deleted file mode 100644
index 438a784..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/umask_SLES.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Configure default umask
- replace:
- path: /etc/login.defs
- regexp: '(.*UMASK 027.*)'
- replace: 'UMASK 022'
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/update_RedHat8.yml b/ansible/roles/saphanareq/tasks/configurations/update_RedHat8.yml
deleted file mode 100644
index 8b238d5..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/update_RedHat8.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: Update all packages
- yum:
- name: '*'
- state: latest
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/update_SLES_SAP.yml b/ansible/roles/saphanareq/tasks/configurations/update_SLES_SAP.yml
deleted file mode 100644
index a71f4c5..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/update_SLES_SAP.yml
+++ /dev/null
@@ -1,6 +0,0 @@
----
-- name: Update all packages
- zypper:
- name: '*'
- state: latest
-...
diff --git a/ansible/roles/saphanareq/tasks/configurations/uuidd.yml b/ansible/roles/saphanareq/tasks/configurations/uuidd.yml
deleted file mode 100644
index 4178e50..0000000
--- a/ansible/roles/saphanareq/tasks/configurations/uuidd.yml
+++ /dev/null
@@ -1,7 +0,0 @@
----
-- name: Configuring uuidd
- systemd:
- name: uuidd
- state: started
- enabled: yes
-...
diff --git a/ansible/roles/saphanareq/vars/RedHat8.yml b/ansible/roles/saphanareq/vars/RedHat8.yml
index 1e4d31b..31b03db 100644
--- a/ansible/roles/saphanareq/vars/RedHat8.yml
+++ b/ansible/roles/saphanareq/vars/RedHat8.yml
@@ -5,17 +5,12 @@ saphana_required_packages:
- iptraf-ng
- lm_sensors
- net-tools
- - uuidd
- - libnsl
- - tcsh
- - psmisc
- - nfs-utils
- - bind-utils
- expect
- gtk2
- krb5-workstation
- krb5-libs
- libaio
+ - libatomic
- libcanberra-gtk2
- libibverbs
- libicu
@@ -29,29 +24,15 @@ saphana_required_packages:
- xfsprogs
- xorg-x11-xauth
- compat-sap-c++-9
- - libatomic
- - chrony
- - lvm2
- - unzip
+ - compat-sap-c++-10
+ - compat-sap-c++-11
saphana_required_configurations:
- - "repository_RedHat"
- - "update_RedHat8"
- "reqpkg"
- - "hostname_fix_RedHat"
- - "hostname"
- - "umask_RHEL"
- "kernel_RedHat8"
- - "reboot"
- "filesystems"
- "tmpfs"
- "tuned"
- - "SELinux"
- - "firewalld"
- - "uuidd"
- - "abrtd"
- - "kdump"
- "limits"
- - "tmpfiles"
- "reboot"
...
diff --git a/ansible/roles/saphanareq/vars/SLES_SAP15.yml b/ansible/roles/saphanareq/vars/SLES_SAP15.yml
index f6b78e2..1e84679 100644
--- a/ansible/roles/saphanareq/vars/SLES_SAP15.yml
+++ b/ansible/roles/saphanareq/vars/SLES_SAP15.yml
@@ -1,20 +1,14 @@
---
saphana_required_packages:
- - lvm2
- - uuidd
-
+ - libgcc_s1
+ - libstdc++6
+ - libatomic1
saphana_required_configurations:
- - "repository_SLES"
- - "update_SLES_SAP"
- "reqpkg"
- - "umask_SLES"
- - "hostname"
- "kernel_SLES_SAP15"
- - "reboot"
- "filesystems"
- - "limits"
- - "tmpfiles"
- - "uuidd"
+ - "tmpfs"
- "saptune"
+ - "limits"
- "reboot"
...
diff --git a/ansible/sap-s-hana.yml b/ansible/sap-s4hana.yml
similarity index 100%
rename from ansible/sap-s-hana.yml
rename to ansible/sap-s4hana.yml
diff --git a/ansible/saphana.yml b/ansible/saphana.yml
index 843601a..58cc5ff 100644
--- a/ansible/saphana.yml
+++ b/ansible/saphana.yml
@@ -5,6 +5,7 @@
- name: Import playbook variables
include_vars: "saphana-vars.yml"
roles:
+ - sapbasereq
- saphanareq
- saphanainst
...
diff --git a/ansible/saps4app.yml b/ansible/saps4app.yml
index 651075d..d200d4d 100644
--- a/ansible/saps4app.yml
+++ b/ansible/saps4app.yml
@@ -5,6 +5,8 @@
- name: Import playbook variables
include_vars: "saps4app-vars.yml"
roles:
+ - sapbasereq
+ - s4appfs
- s4appreq
- s4appinst
...
diff --git a/input.auto.tfvars b/input.auto.tfvars
index 914ebe8..8467907 100644
--- a/input.auto.tfvars
+++ b/input.auto.tfvars
@@ -60,10 +60,10 @@ DB_PROFILE = "mx2-16x128"
# For more information about supported DB/OS and IBM Gen 2 Virtual Server Instances (VSI), check [SAP Note 2927211: SAP Applications on IBM Virtual Private Cloud](https://launchpad.support.sap.com/#/notes/2927211)
# Default value: "mx2-16x128"
-DB_IMAGE = "ibm-redhat-8-6-amd64-sap-hana-4"
-# OS image for DB VSI. Supported OS images for DB VSIs: ibm-sles-15-3-amd64-sap-hana-8, ibm-sles-15-4-amd64-sap-hana-5, ibm-redhat-8-4-amd64-sap-hana-7, ibm-redhat-8-6-amd64-sap-hana-4.
+DB_IMAGE = "ibm-redhat-8-6-amd64-sap-hana-5"
+# OS image for DB VSI. Validated OS images for DB VSIs: ibm-redhat-8-6-amd64-sap-hana-5, ibm-redhat-8-4-amd64-sap-hana-9, ibm-sles-15-4-amd64-sap-hana-6, ibm-sles-15-3-amd64-sap-hana-9.
# The list of available VPC Operating Systems supported by SAP: SAP note '2927211 - SAP Applications on IBM Virtual Private Cloud (VPC) Infrastructure environment' https://launchpad.support.sap.com/#/notes/2927211; The list of all available OS images: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images
-# Example: DB_IMAGE = "ibm-sles-15-4-amd64-sap-hana-5"
+# Example: DB_IMAGE = "ibm-sles-15-4-amd64-sap-hana-6"
##########################################################
# SAP APP VSI variables:
@@ -76,10 +76,18 @@ APP_HOSTNAME = ""
APP_PROFILE = "bx2-4x16"
# The APP VSI profile. Supported profiles: bx2-4x16. The list of available profiles: https://cloud.ibm.com/docs/vpc?topic=vpc-profiles&interface=ui
-APP_IMAGE = "ibm-redhat-8-6-amd64-sap-applications-4"
-# OS image for SAP APP VSI. Supported OS images for APP VSIs: ibm-sles-15-3-amd64-sap-applications-9, ibm-sles-15-4-amd64-sap-applications-6, ibm-redhat-8-4-amd64-sap-applications-7, ibm-redhat-8-6-amd64-sap-applications-4.
+APP_IMAGE = "ibm-redhat-8-6-amd64-sap-applications-5"
+# OS image for SAP APP VSI. Validated OS images for APP VSIs: ibm-redhat-8-6-amd64-sap-applications-5, ibm-redhat-8-4-amd64-sap-applications-9, ibm-sles-15-4-amd64-sap-applications-7, ibm-sles-15-3-amd64-sap-applications-10.
# The list of available VPC Operating Systems supported by SAP: SAP note '2927211 - SAP Applications on IBM Virtual Private Cloud (VPC) Infrastructure environment' https://launchpad.support.sap.com/#/notes/2927211; The list of all available OS images: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images
-# Example: APP-IMAGE = "ibm-sles-15-4-amd64-sap-applications-6"
+# Example: APP-IMAGE = "ibm-sles-15-4-amd64-sap-applications-7"
+
+##########################################################
+# S/4HANA version
+##########################################################
+
+S4HANA_VERSION = "2023"
+# The version of S/4HANA. The version can take one of the following values: 2020, 2021, 2022, 2023.
+# Example: S4HANA_VERSION = "2022"
##########################################################
# SAP HANA configuration
@@ -101,10 +109,9 @@ HANA_COMPONENTS = "server"
# SAP HANA Components. Default: server. Supported values: all, client, es, ets, lcapps, server, smartda, streaming, rdsync, xs, studio, afl, sca, sop, eml, rme, rtl, trp
# Example: HANA_COMPONENTS = "server"
-KIT_SAPHANA_FILE = "/storage/HANADB/51055299.ZIP"
+KIT_SAPHANA_FILE = "/storage/HANADB/51057281_SPS07_rev73.ZIP"
# SAP HANA Installation kit path
-# Supported SAP HANA versions on Red Hat 8.4 and Suse 15.3: HANA 2.0 SP 5 Rev 57, kit file: 51055299.ZIP
-# Example for Red Hat 8 or Suse 15: KIT_SAPHANA_FILE = "/storage/HANADB/51055299.ZIP"
+# Example for Red Hat 8 or Suse 15: KIT_SAPHANA_FILE = "/storage/HANADB/51057281_SPS07_rev73.ZIP"
##########################################################
# SAP system configuration
@@ -129,11 +136,11 @@ HDB_CONCURRENT_JOBS = "23"
##########################################################
KIT_SAPCAR_FILE = "/storage/S4HANA/SAPCAR_1010-70006178.EXE"
-KIT_SWPM_FILE = "/storage/S4HANA/SWPM20SP09_4-80003424.SAR"
-KIT_SAPEXE_FILE = "/storage/S4HANA/SAPEXE_100-70005283.SAR"
-KIT_SAPEXEDB_FILE = "/storage/S4HANA/SAPEXEDB_100-70005282.SAR"
-KIT_IGSEXE_FILE = "/storage/S4HANA/igsexe_1-70005417.sar"
+KIT_SWPM_FILE = "/storage/S4HANA/SWPM20SP17_0-80003424.SAR"
+KIT_SAPEXE_FILE = "/storage/S4HANA/KERNEL/793/SAPEXE_60-70007807.SAR"
+KIT_SAPEXEDB_FILE = "/storage/S4HANA/KERNEL/793/SAPEXEDB_60-70007806.SAR"
+KIT_IGSEXE_FILE = "/storage/S4HANA/KERNEL/793/igsexe_4-70005417.sar"
KIT_IGSHELPER_FILE = "/storage/S4HANA/igshelper_17-10010245.sar"
-KIT_SAPHOSTAGENT_FILE = "/storage/S4HANA/SAPHOSTAGENT51_51-20009394.SAR"
-KIT_HDBCLIENT_FILE = "/storage/S4HANA/IMDB_CLIENT20_009_28-80002082.SAR"
-KIT_S4HANA_EXPORT = "/storage/S4HANA/export"
+KIT_SAPHOSTAGENT_FILE = "/storage/S4HANA/SAPHOSTAGENT61_61-80004822.SAR"
+KIT_HDBCLIENT_FILE = "/storage/S4HANA/IMDB_CLIENT20_018_27-80002082.SAR"
+KIT_S4HANA_EXPORT = "/storage/S4HANA/2023"
diff --git a/integration.tf b/integration.tf
index 91aecdf..39b4865 100644
--- a/integration.tf
+++ b/integration.tf
@@ -18,19 +18,19 @@ resource "local_file" "app_ansible_saps4app-vars" {
depends_on = [ module.db-vsi ]
content = <<-DOC
---
-#Ansible vars_file containing variable values passed from Terraform.
-#Generated by "terraform plan&apply" command.
+# Ansible vars_file containing variable values passed from Terraform.
+# Generated by "terraform plan&apply" command.
-#SAP system configuration
+# SAP system configuration
sap_sid: "${var.SAP_SID}"
app_profile: "${var.APP_PROFILE}"
sap_ascs_instance_number: "${var.SAP_ASCS_INSTANCE_NUMBER}"
sap_ci_instance_number: "${var.SAP_CI_INSTANCE_NUMBER}"
sap_main_password: "${var.SAP_MAIN_PASSWORD}"
-#db_host: "${module.db-vsi.PRIVATE-IP}"
-#db_hostname: "${var.DB_HOSTNAME}"
+# db_host: "${module.db-vsi.PRIVATE-IP}"
+# db_hostname: "${var.DB_HOSTNAME}"
-#HANA config
+# HANA config
hdb_host: "${module.db-vsi.PRIVATE-IP}"
hdb_sid: "${var.HANA_SID}"
hdb_instance_number: "${var.HANA_SYSNO}"
@@ -39,7 +39,8 @@ hdb_main_password: "${var.HANA_MAIN_PASSWORD}"
hdb_concurrent_jobs: "${var.HDB_CONCURRENT_JOBS}"
-#SAP S4HANA APP Installation kit path
+# SAP S4HANA APP Installation kit path
+s4hana_version: "${var.S4HANA_VERSION}"
kit_sapcar_file: "${var.KIT_SAPCAR_FILE}"
kit_swpm_file: "${var.KIT_SWPM_FILE}"
kit_sapexe_file: "${var.KIT_SAPEXE_FILE}"
@@ -53,6 +54,7 @@ kit_s4hana_export: "${var.KIT_S4HANA_EXPORT}"
DOC
filename = "ansible/saps4app-vars.yml"
}
+
# Export Terraform variable values to an Ansible var_file
resource "local_file" "db_ansible_saphana-vars" {
depends_on = [ module.db-vsi ]
@@ -62,7 +64,7 @@ resource "local_file" "db_ansible_saphana-vars" {
# Generated by "terraform plan&apply" command.
hana_profile: "${var.DB_PROFILE}"
-#HANA DB configuration
+# HANA DB configuration
hana_sid: "${var.HANA_SID}"
hana_sysno: "${var.HANA_SYSNO}"
hana_main_password: "${var.HANA_MAIN_PASSWORD}"
diff --git a/main.tf b/main.tf
index 123109d..c3466f7 100644
--- a/main.tf
+++ b/main.tf
@@ -76,7 +76,7 @@ module "app-ansible-exec-schematics" {
depends_on = [ module.app-vsi, local_file.ansible_inventory, local_file.db_ansible_saphana-vars, local_file.app_ansible_saps4app-vars, local_file.tf_ansible_hana_storage_generated_file ]
count = (var.PRIVATE_SSH_KEY == "n.a" && var.BASTION_FLOATING_IP == "localhost" ? 0 : 1)
IP = data.ibm_is_instance.db-vsi.primary_network_interface[0].primary_ip[0].address
- PLAYBOOK = "sap-s-hana.yml"
+ PLAYBOOK = "sap-s4hana.yml"
BASTION_FLOATING_IP = var.BASTION_FLOATING_IP
ID_RSA_FILE_PATH = var.ID_RSA_FILE_PATH
PRIVATE_SSH_KEY = var.PRIVATE_SSH_KEY
@@ -90,6 +90,6 @@ module "ansible-exec-cli" {
IP = data.ibm_is_instance.db-vsi.primary_network_interface[0].primary_ip[0].address
ID_RSA_FILE_PATH = var.ID_RSA_FILE_PATH
SAP_MAIN_PASSWORD = var.SAP_MAIN_PASSWORD
- PLAYBOOK = "sap-s-hana.yml"
+ PLAYBOOK = "sap-s4hana.yml"
}
diff --git a/provider.tf b/provider.tf
index 77dfc34..8413ba1 100644
--- a/provider.tf
+++ b/provider.tf
@@ -1,5 +1,5 @@
variable "IBMCLOUD_API_KEY" {
- description = "IBM Cloud API key"
+ description = "IBM Cloud API key (Sensitive value). The IBM Cloud API Key can be created at https://cloud.ibm.com/iam/apikeys"
sensitive = true
validation {
condition = length(var.IBMCLOUD_API_KEY) > 43 #&& substr(var.IBMCLOUD_API_KEY, 14, 15) == "-"
diff --git a/variables.tf b/variables.tf
index 551434a..9ae8b27 100644
--- a/variables.tf
+++ b/variables.tf
@@ -110,7 +110,7 @@ variable "DB_PROFILE" {
variable "DB_IMAGE" {
type = string
description = "The OS image used for HANA VSI. A list of images is available here: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images."
- default = "ibm-redhat-8-6-amd64-sap-hana-4"
+ default = "ibm-redhat-8-6-amd64-sap-hana-5"
validation {
condition = length(regexall("^(ibm-redhat-8-(4|6)-amd64-sap-hana|ibm-sles-15-(3|4)-amd64-sap-hana)-[0-9][0-9]*", var.DB_IMAGE)) > 0
error_message = "The OS SAP DB_IMAGE must be one of \"ibm-sles-15-3-amd64-sap-hana-x\", \"ibm-sles-15-4-amd64-sap-hana-x\", \"ibm-redhat-8-4-amd64-sap-hana-x\" or \"ibm-redhat-8-6-amd64-sap-hana-x\"."
@@ -135,7 +135,7 @@ variable "APP_PROFILE" {
variable "APP_IMAGE" {
type = string
description = "The OS image used for SAP Application VSI. A list of images is available here: https://cloud.ibm.com/docs/vpc?topic=vpc-about-images."
- default = "ibm-redhat-8-6-amd64-sap-applications-4"
+ default = "ibm-redhat-8-6-amd64-sap-applications-5"
validation {
condition = length(regexall("^(ibm-redhat-8-(4|6)-amd64-sap-applications|ibm-sles-15-(3|4)-amd64-sap-applications)-[0-9][0-9]*", var.APP_IMAGE)) > 0
error_message = "The OS SAP APP_IMAGE must be one of \"ibm-sles-15-3-amd64-sap-applications-x\", \"ibm-sles-15-4-amd64-sap-applications-x\", \"ibm-redhat-8-4-amd64-sap-applications-x\" or \"ibm-redhat-8-6-amd64-sap-applications-x\"."
@@ -166,6 +166,16 @@ variable "ATR_NAME" {
# The variables and data sources used in SAP Ansible Modules.
##############################################################
+variable "S4HANA_VERSION" {
+ type = string
+ description = "The version of S/4HANA. The version can take one of the following values: 2023, 2022, 2021, 2020."
+ default = "2023"
+ validation {
+ condition = contains(["2023", "2022", "2021", "2020"], var.S4HANA_VERSION)
+ error_message = "The version of S/4HANA is not valid. The allowed values should be one of the following: 2023, 2022, 2021, 2020"
+ }
+}
+
variable "HANA_SID" {
type = string
description = "The SAP system ID identifies the SAP HANA system."
@@ -219,7 +229,7 @@ variable "HANA_COMPONENTS" {
variable "KIT_SAPHANA_FILE" {
type = string
description = "Path to SAP HANA ZIP file. As downloaded from SAP Support Portal."
- default = "/storage/HANADB/51055299.ZIP"
+ default = "/storage/HANADB/51057281_SPS07_rev73.ZIP"
}
variable "SAP_SID" {
@@ -281,25 +291,25 @@ variable "KIT_SAPCAR_FILE" {
variable "KIT_SWPM_FILE" {
type = string
description = "Path to SWPM archive (SAR). As downloaded from SAP Support Portal."
- default = "/storage/S4HANA/SWPM20SP09_4-80003424.SAR"
+ default = "/storage/S4HANA/SWPM20SP17_0-80003424.SAR"
}
variable "KIT_SAPEXE_FILE" {
type = string
description = "Path to SAP Kernel OS archive (SAR). As downloaded from SAP Support Portal."
- default = "/storage/S4HANA/SAPEXE_100-70005283.SAR"
+ default = "/storage/S4HANA/KERNEL/793/SAPEXE_60-70007807.SAR"
}
variable "KIT_SAPEXEDB_FILE" {
type = string
description = "Path to SAP Kernel DB archive (SAR). As downloaded from SAP Support Portal."
- default = "/storage/S4HANA/SAPEXEDB_100-70005282.SAR"
+ default = "/storage/S4HANA/KERNEL/793/SAPEXEDB_60-70007806.SAR"
}
variable "KIT_IGSEXE_FILE" {
type = string
description = "Path to IGS archive (SAR). As downloaded from SAP Support Portal."
- default = "/storage/S4HANA/igsexe_1-70005417.sar"
+ default = "/storage/S4HANA/KERNEL/793/igsexe_4-70005417.sarr"
}
variable "KIT_IGSHELPER_FILE" {
@@ -311,19 +321,19 @@ variable "KIT_IGSHELPER_FILE" {
variable "KIT_SAPHOSTAGENT_FILE" {
type = string
description = "Path to SAP Host Agent archive (SAR). As downloaded from SAP Support Portal."
- default = "/storage/S4HANA/SAPHOSTAGENT51_51-20009394.SAR"
+ default = "/storage/S4HANA/SAPHOSTAGENT61_61-80004822.SAR"
}
variable "KIT_HDBCLIENT_FILE" {
type = string
description = "Path to HANA DB client archive (SAR). As downloaded from SAP Support Portal."
- default = "/storage/S4HANA/IMDB_CLIENT20_009_28-80002082.SAR"
+ default = "/storage/S4HANA/IMDB_CLIENT20_018_27-80002082.SAR"
}
variable "KIT_S4HANA_EXPORT" {
type = string
description = "Path to S/4HANA Installation Export dir. The archives downloaded from SAP Support Portal should be present in this path."
- default = "/storage/S4HANA/export"
+ default = "/storage/S4HANA/2023"
}
# ATR variables and conditions
@@ -347,4 +357,3 @@ data "ibm_resource_instance" "activity_tracker" {
location = var.REGION
service = "logdnaat"
}
-