tf/2_storage/main.tf (114 lines of code) (raw):
terraform {
required_providers {
azurerm = {
source = "hashicorp/azurerm"
version = "=3.111.0"
}
random = {
source = "hashicorp/random"
version = "~> 3.3.0"
}
}
required_version = ">= 0.13"
}
provider "azurerm" {
skip_provider_registration = true
storage_use_azuread = true
features {}
}
module global {
source = "../0_base/cfg"
}
module network {
source = "../1_network/cfg"
}
module storage {
source = "./cfg"
}
data "azurerm_resource_group" "core_rg" {
name = module.global.core_rg_name
}
data "azurerm_subnet" "infra_subnet" {
name = module.network.infra_subnet_name
virtual_network_name = module.network.vnet_name
resource_group_name = module.network.vnet_rg
}
data "azurerm_subnet" "compute_subnet" {
name = module.network.compute_subnet_name
virtual_network_name = module.network.vnet_name
resource_group_name = module.network.vnet_rg
}
data "azurerm_subnet" "amlfs_subnet" {
count = module.storage.amlfs.create ? 1 : 0
name = module.network.amlfs_subnet_name
virtual_network_name = module.network.vnet_name
resource_group_name = module.network.vnet_rg
}
resource azurerm_storage_account "storage" {
name = module.storage.storage_acct_name
resource_group_name = data.azurerm_resource_group.core_rg.name
location = data.azurerm_resource_group.core_rg.location
account_tier = "Standard"
account_replication_type = "LRS"
}
resource "azurerm_shared_image_gallery" "gallery" {
count = module.storage.gallery.create ? 1 : 0
name = module.storage.gallery.name
resource_group_name = data.azurerm_resource_group.core_rg.name
location = data.azurerm_resource_group.core_rg.location
description = "Image Gallery for HPC Infrastructure"
}
module "anf" {
count = module.storage.create_anf && module.network.anf_subnet_name != null ? 1 : 0
source = "../modules/storage/anf"
name_prefix = module.storage.anf_prefix
resource_group_name = module.global.core_rg_name
ntap_pool_service_level = module.storage.ntap_pool_service_level
ntap_pool_size_in_tb = module.storage.ntap_pool_size_in_tb
ntap_volume_name = module.storage.ntap_volume_name
ntap_volume_path = module.storage.ntap_volume_path
ntap_volume_size_in_gb = module.storage.ntap_volume_size_in_gb
vnet = {
name = module.network.vnet_name
rg = module.network.vnet_rg
subnet = module.network.anf_subnet_name
}
}
module "amlfs" {
count = module.storage.amlfs.create ? 1 : 0
source = "../modules/storage/amlfs"
name_prefix = module.storage.amlfs.name_prefix
rg = module.global.core_rg_name
location = data.azurerm_resource_group.core_rg.location
sku = module.storage.amlfs.sku
storageCapacity = module.storage.amlfs.storageCapacity
zone = module.storage.amlfs.zone
vnet = {
name = module.network.vnet_name
rg = module.network.vnet_rg
subnet = module.network.amlfs_subnet_name
}
maintenance = {
dayOfWeek = module.storage.amlfs.maintenance_day
timeOfDay = module.storage.amlfs.maintenance_time
}
enable_hsm = module.storage.amlfs.enable_hsm
hsm_sa = {
storage_acct_name = module.storage.amlfs.hsm_sa
rg = module.storage.amlfs.hsm_sa_rg
create_containers = module.storage.amlfs.create_containers
data_container_name = module.storage.amlfs.data_container_name
logging_container_name = module.storage.amlfs.logging_container_name
import_path = module.storage.amlfs.import_path
}
depends_on = [ azurerm_storage_account.storage ]
}
resource "azurerm_storage_account_network_rules" "acls" {
storage_account_id = azurerm_storage_account.storage.id
default_action = "Deny"
virtual_network_subnet_ids = module.storage.use_locker_for_hsm ? [data.azurerm_subnet.infra_subnet.id,
data.azurerm_subnet.compute_subnet.id,
data.azurerm_subnet.amlfs_subnet[0].id, ] : [data.azurerm_subnet.infra_subnet.id,
data.azurerm_subnet.compute_subnet.id]
depends_on = [ azurerm_storage_account.storage, module.amlfs ]
}