Skip to content

Commit abe5301

Browse files
authored
Merge pull request #834 from yeoldegrove/aws_nw_efs
aws: adapt netweaver EFS shared storage to mechanisms from other cloud providers
2 parents 8cf1a94 + e8e1cda commit abe5301

File tree

12 files changed

+75
-42
lines changed

12 files changed

+75
-42
lines changed

aws/infrastructure.tf

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -33,18 +33,6 @@ locals {
3333
for index in range(2) : cidrsubnet(local.vpc_address_range, 8, index + var.hana_count + 2 + 1)]
3434
}
3535

36-
# EFS storage for nfs share used by Netweaver for /usr/sap/{sid} and /sapmnt
37-
# It will be created for netweaver only when drbd is disabled
38-
resource "aws_efs_file_system" "netweaver-efs" {
39-
count = var.netweaver_enabled == true && var.drbd_enabled == false ? 1 : 0
40-
creation_token = "${local.deployment_name}-netweaver-efs"
41-
performance_mode = var.netweaver_efs_performance_mode
42-
43-
tags = {
44-
Name = "${local.deployment_name}-efs"
45-
}
46-
}
47-
4836
# AWS key pair
4937
resource "aws_key_pair" "key-pair" {
5038
key_name = "${local.deployment_name} - terraform"

aws/main.tf

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -125,7 +125,7 @@ module "common_variables" {
125125
netweaver_swpm_sar = var.netweaver_swpm_sar
126126
netweaver_sapexe_folder = var.netweaver_sapexe_folder
127127
netweaver_additional_dvds = var.netweaver_additional_dvds
128-
netweaver_nfs_share = var.drbd_enabled ? "${local.drbd_cluster_vip}:/${var.netweaver_sid}" : "${join("", aws_efs_file_system.netweaver-efs.*.dns_name)}:"
128+
netweaver_nfs_share = var.drbd_enabled ? "${local.drbd_cluster_vip}:/${var.netweaver_sid}" : var.netweaver_nfs_share
129129
netweaver_sapmnt_path = var.netweaver_sapmnt_path
130130
netweaver_hana_ip = var.hana_ha_enabled ? local.hana_cluster_vip : element(local.hana_ips, 0)
131131
netweaver_hana_sid = var.hana_sid
@@ -227,8 +227,7 @@ module "netweaver_node" {
227227
key_name = aws_key_pair.key-pair.key_name
228228
security_group_id = local.security_group_id
229229
route_table_id = aws_route_table.route-table.id
230-
efs_enable_mount = var.netweaver_enabled == true && var.drbd_enabled == false ? true : false
231-
efs_file_system_id = join("", aws_efs_file_system.netweaver-efs.*.id)
230+
efs_performance_mode = var.netweaver_efs_performance_mode
232231
aws_credentials = var.aws_credentials
233232
aws_access_key_id = var.aws_access_key_id
234233
aws_secret_access_key = var.aws_secret_access_key

aws/modules/netweaver_node/main.tf

Lines changed: 19 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
locals {
2-
vm_count = var.xscs_server_count + var.app_server_count
3-
create_ha_infra = local.vm_count > 1 && var.common_variables["netweaver"]["ha_enabled"] ? 1 : 0
4-
app_start_index = local.create_ha_infra == 1 ? 2 : 1
5-
hostname = var.common_variables["deployment_name_in_hostname"] ? format("%s-%s", var.common_variables["deployment_name"], var.name) : var.name
2+
vm_count = var.xscs_server_count + var.app_server_count
3+
create_ha_infra = local.vm_count > 1 && var.common_variables["netweaver"]["ha_enabled"] ? 1 : 0
4+
app_start_index = local.create_ha_infra == 1 ? 2 : 1
5+
hostname = var.common_variables["deployment_name_in_hostname"] ? format("%s-%s", var.common_variables["deployment_name"], var.name) : var.name
6+
shared_storage_efs = var.common_variables["netweaver"]["shared_storage_type"] == "efs" ? 1 : 0
67
}
78

89
# Network resources: subnets, routes, etc
@@ -54,9 +55,21 @@ resource "aws_route" "nw-app-route" {
5455
network_interface_id = aws_instance.netweaver[local.app_start_index + count.index].primary_network_interface_id
5556
}
5657

58+
# EFS storage for nfs share used by Netweaver for /usr/sap/{sid} and /sapmnt
59+
# It will be created for netweaver only when drbd is disabled
60+
resource "aws_efs_file_system" "netweaver-efs" {
61+
count = local.vm_count > 0 ? local.shared_storage_efs : 0
62+
creation_token = "${var.common_variables["deployment_name"]}-netweaver-efs"
63+
performance_mode = var.efs_performance_mode
64+
65+
tags = {
66+
Name = "${var.common_variables["deployment_name"]}-efs"
67+
}
68+
}
69+
5770
resource "aws_efs_mount_target" "netweaver-efs-mount-target" {
58-
count = local.vm_count > 0 && var.efs_enable_mount ? min(local.vm_count, 2) : 0
59-
file_system_id = var.efs_file_system_id
71+
count = local.vm_count > 0 && local.shared_storage_efs == 1 ? min(local.vm_count, 2) : 0
72+
file_system_id = aws_efs_file_system.netweaver-efs.0.id
6073
subnet_id = element(aws_subnet.netweaver-subnet.*.id, count.index)
6174
security_groups = [var.security_group_id]
6275
}

aws/modules/netweaver_node/salt_provisioner.tf

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,8 @@ iscsi_srv_ip: ${var.iscsi_srv_ip}
4242
app_server_count: ${var.app_server_count}
4343
netweaver_inst_disk_device: /dev/nvme1n1
4444
s3_bucket: ${var.s3_bucket}
45+
efs_mount_ip:
46+
sapmnt: [ ${local.shared_storage_efs == 1 ? join("", aws_efs_file_system.netweaver-efs.*.dns_name) : ""} ]
4547
EOF
4648
destination = "/tmp/grains"
4749
}

aws/modules/netweaver_node/variables.tf

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -61,14 +61,10 @@ variable "route_table_id" {
6161
description = "Route table id"
6262
}
6363

64-
variable "efs_enable_mount" {
65-
type = bool
66-
description = "Enable the mount operation on the EFS storage"
67-
}
68-
69-
variable "efs_file_system_id" {
64+
variable "efs_performance_mode" {
7065
type = string
71-
description = "AWS efs file system ID to be used by EFS mount target"
66+
description = "Performance mode of the EFS storage used by Netweaver"
67+
default = "generalPurpose"
7268
}
7369

7470
variable "aws_credentials" {

aws/terraform.tfvars.example

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -335,8 +335,6 @@ hana_inst_master = "s3://sapdata/sap_inst_media/51053381"
335335
#netweaver_os_image = "suse-sles-sap-15-sp1-byos"
336336
#netweaver_os_owner = "amazon"
337337

338-
#AWS efs performance mode used by netweaver nfs share, if efs storage is used
339-
#netweaver_efs_performance_mode = "generalPurpose"
340338
#netweaver_ips = ["10.0.2.7", "10.0.3.8", "10.0.2.9", "10.0.3.10"]
341339
#netweaver_virtual_ips = ["192.168.1.20", "192.168.1.21", "192.168.1.22", "192.168.1.23"]
342340

@@ -381,6 +379,14 @@ hana_inst_master = "s3://sapdata/sap_inst_media/51053381"
381379
# Example:
382380
#netweaver_product_id = "NW750.HDB.ABAPHA"
383381

382+
#########################
383+
# Netweaver shared storage variables
384+
# Needed if Netweaver is deployed HA
385+
#########################
386+
#netweaver_shared_storage_type = "efs" # drbd,efs supported at the moment (default: "efs")
387+
#AWS efs performance mode used by netweaver nfs share, if efs storage is used
388+
#netweaver_efs_performance_mode = "generalPurpose"
389+
384390
# Path where netweaver sapmnt data is stored.
385391
#netweaver_sapmnt_path = "/sapmnt"
386392

aws/variables.tf

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -805,6 +805,12 @@ variable "netweaver_cluster_fencing_mechanism" {
805805
}
806806
}
807807

808+
variable "netweaver_nfs_share" {
809+
description = "URL of the NFS share where /sapmnt and /usr/sap/{sid}/SYS will be mounted. This folder must have the sapmnt and usrsapsys folders. This parameter can be omitted if drbd_enabled is set to true, as a HA nfs share will be deployed by the project. Finally, if it is not used or set empty, these folders are created locally (for single machine deployments)"
810+
type = string
811+
default = ""
812+
}
813+
808814
variable "netweaver_sapmnt_path" {
809815
description = "Path where sapmnt folder is stored"
810816
type = string
@@ -866,14 +872,14 @@ variable "netweaver_ha_enabled" {
866872
}
867873

868874
variable "netweaver_shared_storage_type" {
869-
description = "shared Storage type to use for Netweaver deployment - not supported yet for this cloud provider yet"
875+
description = "shared Storage type to use for Netweaver deployment"
870876
type = string
871-
default = ""
877+
default = "efs"
872878
validation {
873879
condition = (
874-
can(regex("^(|)$", var.netweaver_shared_storage_type))
880+
can(regex("^(drbd|efs)$", var.netweaver_shared_storage_type))
875881
)
876-
error_message = "Invalid Netweaver shared storage type. Options: none."
882+
error_message = "Invalid Netweaver shared storage type. Options: drbd|efs."
877883
}
878884
}
879885

generic_modules/common_variables/netweaver_variables.tf

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -172,8 +172,8 @@ variable "netweaver_shared_storage_type" {
172172
type = string
173173
validation {
174174
condition = (
175-
can(regex("^(|drbd|anf|nfs)$", var.netweaver_shared_storage_type))
175+
can(regex("^(|drbd|anf|efs|nfs)$", var.netweaver_shared_storage_type))
176176
)
177-
error_message = "Invalid Netweaver shared storage type. Options: drbd|anf|nfs."
177+
error_message = "Invalid Netweaver shared storage type. Options: drbd|anf|efs|nfs."
178178
}
179179
}

pillar_examples/automatic/netweaver/cluster.sls

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -65,6 +65,11 @@ cluster:
6565
ascs_fstype: xfs
6666
ers_device: {{ netweaver.netweaver.nodes[1].shared_disk_dev }}3
6767
ers_fstype: xfs
68+
{%- elif grains['provider'] == 'aws' and grains['netweaver_shared_storage_type'] == 'efs' %}
69+
ascs_device: {{ grains['efs_mount_ip']['sapmnt'][0] }}:/ASCS
70+
ascs_fstype: nfs4
71+
ers_device: {{ grains['efs_mount_ip']['sapmnt'][0] }}:/ERS
72+
ers_fstype: nfs4
6873
{%- elif grains['provider'] == 'azure' and grains['netweaver_shared_storage_type'] == 'anf' %}
6974
ascs_device: {{ grains['anf_mount_ip']['sapmnt'][0] }}:/netweaver-sapmnt/ASCS
7075
ascs_fstype: nfs4

pillar_examples/automatic/netweaver/netweaver.sls

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ netweaver:
4141
sid_adm_password: {{ grains['netweaver_master_password'] }}
4242
sap_adm_password: {{ grains['netweaver_master_password'] }}
4343
master_password: {{ grains['netweaver_master_password'] }}
44-
{%- if grains['provider'] == 'azure' and grains['netweaver_shared_storage_type'] == 'anf' %}
44+
{%- if grains['provider'] == 'aws' and grains['netweaver_shared_storage_type'] == 'efs' %}
45+
sapmnt_inst_media: "{{ grains['efs_mount_ip']['sapmnt'][0] }}:/"
46+
{%- elif grains['provider'] == 'azure' and grains['netweaver_shared_storage_type'] == 'anf' %}
4547
sapmnt_inst_media: "{{ grains['anf_mount_ip']['sapmnt'][0] }}:/netweaver-sapmnt"
4648
{%- else %}
4749
sapmnt_inst_media: "{{ grains['netweaver_nfs_share'] }}"
@@ -108,7 +110,9 @@ netweaver:
108110
shared_disk_dev: /dev/vdb
109111
init_shared_disk: True
110112
{%- elif grains['ha_enabled'] %}
111-
{%- if grains['provider'] == 'azure' and grains['netweaver_shared_storage_type'] == 'anf' %}
113+
{%- if grains['provider'] == 'aws' and grains['netweaver_shared_storage_type'] == 'efs' %}
114+
shared_disk_dev: {{ grains['efs_mount_ip']['sapmnt'][0] }}:/ASCS
115+
{%- elif grains['provider'] == 'azure' and grains['netweaver_shared_storage_type'] == 'anf' %}
112116
shared_disk_dev: {{ grains['anf_mount_ip']['sapmnt'][0] }}:/netweaver-sapmnt/ASCS
113117
{%- elif grains['provider'] == 'openstack' and grains['netweaver_shared_storage_type'] == 'nfs' %}
114118
shared_disk_dev: {{ grains['netweaver_nfs_share'] }}/ASCS{{ '{:0>2}'.format(grains['ascs_instance_number']) }}
@@ -130,7 +134,9 @@ netweaver:
130134
{%- if grains['provider'] == 'libvirt' %}
131135
shared_disk_dev: /dev/vdb
132136
{%- else %}
133-
{%- if grains['provider'] == 'azure' and grains['netweaver_shared_storage_type'] == 'anf' %}
137+
{%- if grains['provider'] == 'aws' and grains['netweaver_shared_storage_type'] == 'efs' %}
138+
shared_disk_dev: {{ grains['efs_mount_ip']['sapmnt'][0] }}:/ERS
139+
{%- elif grains['provider'] == 'azure' and grains['netweaver_shared_storage_type'] == 'anf' %}
134140
shared_disk_dev: {{ grains['anf_mount_ip']['sapmnt'][0] }}:/netweaver-sapmnt/ERS
135141
{%- elif grains['provider'] == 'openstack' and grains['netweaver_shared_storage_type'] == 'nfs' %}
136142
shared_disk_dev: {{ grains['netweaver_nfs_share'] }}/ERS{{ '{:0>2}'.format(grains['ers_instance_number']) }}

0 commit comments

Comments
 (0)