main.storage.tf (92 lines of code) (raw):
locals {
elastic_san_attachments = flatten([for ds_key, datastore in var.elastic_san_datastores : [
for cluster_name in datastore.cluster_names : {
attachment_name = "${ds_key}-${cluster_name}"
esan_volume_resource_id = datastore.esan_volume_resource_id
cluster_name = cluster_name
}
]])
netapp_attachments = flatten([for ds_key, datastore in var.netapp_files_datastores : [
for cluster_name in datastore.cluster_names : {
attachment_name = "${ds_key}-${cluster_name}"
netapp_volume_resource_id = datastore.netapp_volume_resource_id
cluster_name = cluster_name
}
]])
}
resource "azurerm_vmware_netapp_volume_attachment" "attach_datastores" {
for_each = { for datastore in local.netapp_attachments : datastore.attachment_name => datastore }
name = each.value.attachment_name
netapp_volume_id = each.value.netapp_volume_resource_id
vmware_cluster_id = "${azapi_resource.this_private_cloud.id}/clusters/${each.value.cluster_name}"
depends_on = [
azapi_resource.this_private_cloud,
azapi_resource.clusters,
azurerm_role_assignment.this_private_cloud,
azurerm_monitor_diagnostic_setting.this_private_cloud_diags,
#azapi_update_resource.managed_identity,
azapi_update_resource.customer_managed_key,
azapi_resource.hcx_addon,
azapi_resource.hcx_keys,
azapi_resource.srm_addon,
azapi_resource.vr_addon,
azurerm_express_route_connection.avs_private_cloud_connection,
azurerm_express_route_connection.avs_private_cloud_connection_additional,
azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection,
azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection_additional,
azapi_resource.globalreach_connections,
azapi_resource.avs_interconnect,
azapi_resource.dns_forwarder_zones,
azapi_resource_action.dns_service,
azapi_resource.dhcp,
azapi_resource.segments,
#azapi_resource.current_status_identity_sources,
azapi_resource.remove_existing_identity_source,
azapi_resource.configure_identity_sources
]
}
#provision an external storage block
resource "azapi_resource" "iscsi_path_network" {
count = var.external_storage_address_block != null ? 1 : 0
type = "Microsoft.AVS/privateClouds/iscsiPaths@2023-09-01"
body = { properties = {
networkBlock = var.external_storage_address_block
} }
name = "default"
parent_id = azapi_resource.this_private_cloud.id
}
resource "azapi_resource" "this_esan_attachment" {
for_each = { for datastore in local.elastic_san_attachments : datastore.attachment_name => datastore }
type = "Microsoft.AVS/privateClouds/clusters/datastores@2023-09-01"
body = {
properties = {
elasticSanVolume = {
targetId = each.value.esan_volume_resource_id
}
}
}
name = each.value.attachment_name
parent_id = "${azapi_resource.this_private_cloud.id}/clusters/${each.value.cluster_name}"
depends_on = [
azapi_resource.this_private_cloud,
azapi_resource.clusters,
azurerm_role_assignment.this_private_cloud,
azurerm_monitor_diagnostic_setting.this_private_cloud_diags,
#azapi_update_resource.managed_identity,
azapi_update_resource.customer_managed_key,
azapi_resource.hcx_addon,
azapi_resource.hcx_keys,
azapi_resource.srm_addon,
azapi_resource.vr_addon,
azurerm_express_route_connection.avs_private_cloud_connection,
azurerm_express_route_connection.avs_private_cloud_connection_additional,
azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection,
azapi_resource.avs_private_cloud_expressroute_vnet_gateway_connection_additional,
azapi_resource.globalreach_connections,
azapi_resource.avs_interconnect,
azapi_resource.dns_forwarder_zones,
azapi_resource_action.dns_service,
azapi_resource.dhcp,
azapi_resource.segments,
#azapi_resource.current_status_identity_sources,
azapi_resource.remove_existing_identity_source,
azapi_resource.configure_identity_sources,
azurerm_vmware_netapp_volume_attachment.attach_datastores,
azapi_resource.iscsi_path_network
]
}