3.File.Storage/netapp.tf (156 lines of code) (raw):

####################################################################################################### # NetApp Files (https://learn.microsoft.com/azure/azure-netapp-files/azure-netapp-files-introduction) # ####################################################################################################### variable netAppFiles { type = object({ enable = bool name = string capacityPools = list(object({ enable = bool name = string type = string sizeTiB = number # coolAccess = object({ # enable = bool # period = number # }) volumes = list(object({ enable = bool name = string path = string sizeGiB = number permissions = number network = object({ features = string protocols = list(string) }) exportPolicies = list(object({ ruleIndex = number ownerMode = string readOnly = bool readWrite = bool rootAccess = bool networkProtocols = list(string) allowedClients = list(string) })) })) })) backup = object({ enable = bool name = string policy = object({ enable = bool name = string retention = object({ daily = number weekly = number monthly = number }) }) }) }) } data azurerm_subnet storage_netapp { count = var.netAppFiles.enable ? 1 : 0 name = "StorageNetApp" resource_group_name = data.azurerm_virtual_network.studio.resource_group_name virtual_network_name = data.azurerm_virtual_network.studio.name } locals { netAppVolumes = flatten([ for capacityPool in var.netAppFiles.capacityPools : [ for volume in capacityPool.volumes : merge(volume, { capacityPoolName = capacityPool.name capacityPoolType = capacityPool.type # capacityPoolCoolAccess = capacityPool.coolAccess }) if volume.enable ] if var.netAppFiles.enable && capacityPool.enable ]) } resource azurerm_resource_group netapp { count = var.netAppFiles.enable ? 1 : 0 name = "${var.resourceGroupName}.NetApp" location = data.azurerm_virtual_network.studio.location tags = { AAA = basename(path.cwd) } } resource azurerm_netapp_account studio { count = var.netAppFiles.enable ? 1 : 0 name = var.netAppFiles.name resource_group_name = azurerm_resource_group.netapp[0].name location = azurerm_resource_group.netapp[0].location identity { type = "UserAssigned" identity_ids = [ data.azurerm_user_assigned_identity.studio.id ] } dynamic active_directory { for_each = var.activeDirectory.enable ? [1] : [] content { domain = var.activeDirectory.domainName username = local.activeDirectory.machine.adminLogin.userName password = local.activeDirectory.machine.adminLogin.userPassword smb_server_name = var.activeDirectory.machine.name dns_servers = [ var.activeDirectory.machine.ip ] } } } resource azurerm_netapp_pool studio { for_each = { for capacityPool in var.netAppFiles.capacityPools : capacityPool.name => capacityPool if var.netAppFiles.enable && capacityPool.enable } name = each.value.name resource_group_name = azurerm_resource_group.netapp[0].name location = azurerm_resource_group.netapp[0].location service_level = each.value.type size_in_tb = each.value.sizeTiB account_name = var.netAppFiles.name depends_on = [ azurerm_netapp_account.studio ] } resource azurerm_netapp_volume studio { for_each = { for volume in local.netAppVolumes : "${volume.capacityPoolName}-${volume.name}" => volume } name = each.value.name resource_group_name = azurerm_resource_group.netapp[0].name location = azurerm_resource_group.netapp[0].location pool_name = each.value.capacityPoolName service_level = each.value.capacityPoolType volume_path = each.value.path storage_quota_in_gb = each.value.sizeGiB network_features = each.value.network.features protocols = each.value.network.protocols subnet_id = data.azurerm_subnet.storage_netapp[0].id account_name = var.netAppFiles.name snapshot_directory_visible = false dynamic export_policy_rule { for_each = each.value.exportPolicies content { rule_index = export_policy_rule.value["ruleIndex"] unix_read_only = export_policy_rule.value["readOnly"] unix_read_write = export_policy_rule.value["readWrite"] root_access_enabled = export_policy_rule.value["rootAccess"] protocols_enabled = export_policy_rule.value["networkProtocols"] allowed_clients = export_policy_rule.value["allowedClients"] } } depends_on = [ azurerm_netapp_pool.studio ] } ################################################################################################# # NetApp Files Backup (https://learn.microsoft.com/azure/azure-netapp-files/backup-introduction # ################################################################################################# resource azurerm_netapp_backup_vault studio { count = var.netAppFiles.enable && var.netAppFiles.backup.enable ? 1 : 0 name = var.netAppFiles.backup.name resource_group_name = azurerm_netapp_account.studio[0].resource_group_name location = azurerm_netapp_account.studio[0].location account_name = azurerm_netapp_account.studio[0].name } resource azurerm_netapp_backup_policy studio { count = var.netAppFiles.enable && var.netAppFiles.backup.enable ? 1 : 0 name = var.netAppFiles.backup.policy.name resource_group_name = azurerm_netapp_account.studio[0].resource_group_name location = azurerm_netapp_account.studio[0].location account_name = azurerm_netapp_account.studio[0].name daily_backups_to_keep = var.netAppFiles.backup.policy.retention.daily weekly_backups_to_keep = var.netAppFiles.backup.policy.retention.weekly monthly_backups_to_keep = var.netAppFiles.backup.policy.retention.monthly enabled = var.netAppFiles.backup.policy.enable }