SDAF 3.20.0.0 - Release Notes
Release: May 2026 | Terraform: 1.15.1 | azurerm provider: 4.70.0 | Repository:
Azure/sap-automation
What's New
Network Security Perimeter Support
SDAF now supports Azure Network Security Perimeter across all deployment layers. Terraform configurations for the deployer, library, landscape, and SAP system modules have been extended with full NSP association coverage — including storage accounts, Key Vault, App Configuration, Web App, and HANA shared resources. The access mode defaults to Enforced. This is a significant addition for customers with strict network isolation requirements.
Azure Extended Monitoring for SAP VMs
Enhanced monitoring is now deployable via an Ansible task that installs the Azure VM extension for SAP. The extension name is determined dynamically, and a new deploy_monitoring_extension variable controls whether deployment occurs. This replaces the previously removed monitoring extension logic and brings SAP monitoring back in a cleaner, parameterised form.
JAVA Stack Installation Support
SDAF can now automate the full installation of SAP JAVA-based products across SCS, PAS, and Application Server tiers. This includes conditional JAVA/ABAP detection paths for SCS, SAPHANADB and SAPJAVA1 schema handling, TCP parameter net.ipv4.tcp_retries2 configuration, and PD-path replacement for JAVA product IDs. Community contribution from LEGO's SAP team.
HANA-Only Deployments
The deployment playbooks now support HANA-only topologies — scenarios where the database tier is provisioned without a full SAP application stack. This addresses a recurring customer request for staged or standalone HANA deployments.
MSI-Based Deployments
Deployers can now authenticate using Managed Service Identity throughout the deployment lifecycle. The azurerm provider configuration conditionally applies use_msi, the ARM_USE_MSI condition handling has been corrected, and TF_VAR_subscription_id is consistently exported across both installer and remover scripts when MSI is in use.
New SAP Software Acquisition Pipeline
A dedicated pipeline for SAP software download is now available (04-sap-software-download.sh), alongside improvements to download_menu.sh and configuration_menu.sh for BOM-driven acquisition workflows.
Control Plane Scripts — Significant Overhaul
This release includes a comprehensive readability and correctness pass across the V1 and V2 control plane deployment scripts. The changes are structural rather than behavioural, but operators should be aware of several substantive corrections carried within:
TFE_PARALLELISM— The environment variable was misspelled asTF_PARALLELLISMacross multiple scripts. This has been corrected; the previously exported variable was silently ignored by Terraform.--auto-approve— Flag syntax was inconsistent (-auto-approvevs--auto-approve). Standardised throughout.- Exit handling — Fixed
set -e/-o errexitinteraction when scripts are sourced rather than executed directly. - Variable Group save failures — Scripts now exit and reset
step = 0on failure to persist state to ADO Variable Groups, preventing silent deployment state corruption. - TF401019 error — Fixed the ADO
az pipelines variable-groupfailure that occurred whenBUILD_SOURCEDIRECTORYhad changed. azure.azcollection— The Ansible collection is now explicitly registered in bothconfigure_deployer.shand its extension template.- Parameter arrays — Terraform parameter construction now uses arrays throughout, improving readability and reducing quoting-related bugs.
Security & IAM
- Role assignment model updated:
Role Based Access Control Administratorreplaced withUser Access AdministratoracrossNew-SDAFADOProjectandNew-SDAFADOWorkloadZone. Role assignment conditions now useGuidNotEqualsfor specific role definitions. - Network Contributor added to role assignments in multiple functions to support network resource management by the service principal.
- Public network access now defaults to
falseacross all Terraform variable files. Exceptions (e.g., SAP mount storage account) are handled explicitly. user_assigned_identity_idnow validates for a correct Azure resource identifier format, rejecting blank or malformed values early.- App Configuration Data Owner role added in
New-SDAFADOProject. - Key Vault Secrets Officer corrected from the previously misspelled
Secret Officer. - PAT secret management in Key Vault improved, with a corrected count condition to prevent spurious resource creation.
Terraform & Infrastructure
- Terraform upgraded to 1.15.1 (interim versions 1.14.8, 1.14.9, and 1.15.0 were evaluated during the release cycle).
azurermprovider updated to 4.70.0.- A
wait_for_subnetsresource has been added to gate VNET peering on subnet readiness, addressing a race condition in greenfield deployments. try()guard added insap_library/transform.tffor deployer state access, eliminating an invalid-index risk during first-run provisioning.- Retry attempts for Terraform import during
applyhave been increased, reducing failures in environments with eventual-consistency resource registration. deployer_tfstate_keyvariable added for explicit infrastructure state referencing.- Terraform state storage account resource group and subscription IDs are now sourced from disk when the backend is remote, improving reliability in multi-subscription deployments.
- AFS/storage and inventory generation improved: Terraform modules now include storage blob resources for inventory management, and AFS handling logic has been refined across
sap_landscapeandsap_system. - System-assigned identity null values in
output.tfare now handled safely.
Ansible & OS Configuration
/etc/hosts Management
The hosts file role has been refactored to use a dedicated Ansible filter plugin (sap_hosts_filters.py) for generating and managing SAP entries. The plugin is topology-aware, handles scale-out scenarios, avoids duplicate entries, and includes a strip_sap_managed_blocks method for cleaning orphaned SAP-managed blocks. Unit tests are included.
Pacemaker — Scale-Out & iSCSI Fencing
- Concurrent fencing enabled in Pacemaker configuration, with refined
stonithsettings for improved fencing reliability in multi-node topologies. - iSCSI-based fencing on Red Hat: iSCSI fencing support has been extended to RHEL environments, a capability previously limited to SUSE. ACL generation now covers both DB and observer nodes across both distributions, with consolidated host indexing and an explicit observer ACL count computation task.
- Retry logic added for secondary node cluster join operations.
SAPHanaSRprovider path is now configured for both SUSE and scale-out tasks.
BOM Processing
- Microsoft-supplied BOM is now searched across multiple directories, with improved debug output when not found.
- BOM media list aggregation and patch information handling refactored for correctness.
- Validation host list generation is now topology-aware.
- Platform checks added to repository and package handling in BOM tasks.
SAPINST.CD.PACKAGE.CD1parameter added; redundant CD package entries removed.
Oracle
- Oracle Linux 9.7 added to supported distributions.
CV_ASSUME_DISTIDlogic updated across multiple roles to correctly identify distribution from kernel version.- NFS service name determination updated to accommodate additional Oracle Linux versions.
- Stale process and shared memory cleanup in Oracle ASM database installation improved.
General
oinstallgroup limits added to kernel parameter configuration with updated configuration file path.- NVMe detection for swap setup improved: now uses
lsblkand correctly identifies Microsoft NVMe Direct disks. requestslibrary pinned to2.32.5inrequirements.txt.- Sybase disk sizes corrected to 256 GB (hotfix for incorrect sizing configuration).
Platform & Region Additions
| Category | Additions |
|---|---|
| Distributions | New SUSE, Red Hat, Windows, and Oracle Linux entries in sdaf_distros.json |
| Azure Regions | New regions added including indonesiacentral; max_fault_domain_count.json updated |
| SAP IPs | sdaf_urls.json updated with revised SAP connectivity endpoints |
Bug Fixes
| Area | Fix |
|---|---|
| Key Vault secret lookup | Full workload zone name now used for KV secret resolution in sap_system (#1096) |
| SUSE subscription | Condition for suse_subscription_id handling in registration tasks corrected (#1094) |
| Python requirements | requests pinned to 2.32.5; Python version requirement corrected (#1086, #1087) |
| Sybase disk sizing | Disk sizes corrected to 256 GB in sybase_sizes.json (#1065) |
| HANA replication | Retry parameters updated; cluster type settings adjusted |
| iSCSI ACL generation | Scale-out nodes now correctly included in ACL computation |
| Key Vault existence check | Now validates key_vault_id rather than DEPLOYER_KEYVAULT variable |
| Pacemaker Azure fencing | Conditionals for Azure fencing agent updated; job status check in DBLOAD tasks refined |
| Role assignment | role_assignments.tf typo corrected; scope uses correct WorkloadZoneSubscriptionId |
| DBLOAD path | Path variable handling in SAP DB load playbook corrected |
download_directory |
Removed redundant conditional pre-check (#1066) |
suse_subscription_id |
Property is now non-nullable in SystemModel |
Full commit history available in the sap-automation repository.