Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 18 additions & 38 deletions terraform/nfs-provision/main.tf
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ terraform {
required_providers {
netapp-ontap = {
source = "NetApp/netapp-ontap"
version = "~> 1.0"
version = "~> 2.5"
}
}
}
Expand All @@ -25,42 +25,11 @@ provider "netapp-ontap" {
]
}

locals {
export_policy_name = "${var.volume_name}_export_policy"
}

# Step 1 — Create the export policy (before volume so we can reference it)
resource "netapp-ontap_protocols_nfs_export_policy" "vol_policy" {
cx_profile_name = "cluster1"
name = local.export_policy_name
svm = {
name = var.svm_name
}
}

# Step 2 — Add a client-match rule to the policy
resource "netapp-ontap_protocols_nfs_export_policy_rule" "client_rule" {
cx_profile_name = "cluster1"
export_policy = {
name = netapp-ontap_protocols_nfs_export_policy.vol_policy.name
}
svm = {
name = var.svm_name
}
clients_match = var.client_match
ro_rule = ["any"]
rw_rule = ["any"]
superuser = ["any"]
protocols = ["nfs"]
}

# Step 3 — Create the FlexVol volume with the export policy assigned
resource "netapp-ontap_storage_volume" "nfs_vol" {
# Step 1 — Create the FlexVol volume with NFS enabled
resource "netapp-ontap_volume" "nfs_vol" {
cx_profile_name = "cluster1"
name = var.volume_name
svm = {
name = var.svm_name
}
svm_name = var.svm_name
aggregates = [
{ name = var.aggregate_name },
]
Expand All @@ -69,11 +38,22 @@ resource "netapp-ontap_storage_volume" "nfs_vol" {
size_unit = var.volume_size_unit
}
nas = {
path = "/${var.volume_name}"
export_policy = local.export_policy_name
junction_path = "/${var.volume_name}"
}
}

# Step 2 — Add a client-match rule to the default export policy
resource "netapp-ontap_nfs_export_policy_rule" "client_rule" {
cx_profile_name = "cluster1"
svm_name = var.svm_name
export_policy_name = "default"
clients_match = [var.client_match]
ro_rule = ["any"]
rw_rule = ["any"]
superuser = ["any"]
protocols = ["nfs"]

depends_on = [
netapp-ontap_protocols_nfs_export_policy_rule.client_rule,
netapp-ontap_volume.nfs_vol,
]
}
9 changes: 2 additions & 7 deletions terraform/nfs-provision/outputs.tf
Original file line number Diff line number Diff line change
@@ -1,16 +1,11 @@
output "volume_name" {
description = "Name of the created volume"
value = netapp-ontap_storage_volume.nfs_vol.name
value = netapp-ontap_volume.nfs_vol.name
}

output "mount_path" {
description = "NAS junction path for mounting"
value = netapp-ontap_storage_volume.nfs_vol.nas.path
}

output "export_policy" {
description = "Name of the export policy assigned to the volume"
value = netapp-ontap_protocols_nfs_export_policy.vol_policy.name
value = netapp-ontap_volume.nfs_vol.nas.junction_path
}

output "client_match" {
Expand Down
Loading