3.File.Storage/Hammerspace/cluster.tf (67 lines of code) (raw):
######################################################################################################
# Hammerspace (https://azuremarketplace.microsoft.com/marketplace/apps/hammerspace.hammerspace-byol) #
######################################################################################################
resource azurerm_virtual_machine_extension node {
for_each = {
for node in concat(local.hsMetadataNodes, local.hsDataNodes) : node.machine.name => node
}
name = "Custom"
type = "CustomScript"
publisher = "Microsoft.Azure.Extensions"
type_handler_version = "2.1"
automatic_upgrade_enabled = false
auto_upgrade_minor_version = true
virtual_machine_id = "${azurerm_resource_group.hammerspace.id}/providers/Microsoft.Compute/virtualMachines/${each.value.machine.name}"
protected_settings = jsonencode({
script = base64encode(
templatefile("${path.module}/node.sh", {
adminPassword = each.value.machine.adminLogin.userPassword
})
)
})
depends_on = [
azurerm_virtual_machine_data_disk_attachment.metadata,
azurerm_virtual_machine_data_disk_attachment.data
]
}
resource terraform_data cluster_init {
provisioner local-exec {
command = "az vm extension set --resource-group ${azurerm_resource_group.hammerspace.name} --vm-name ${local.hsMetadataNodes[0].machine.name} --name CustomScript --publisher Microsoft.Azure.Extensions --protected-settings ${jsonencode({script = base64encode(templatefile("${path.module}/cluster.init.sh", {activeDirectory = var.activeDirectory}))})}"
}
depends_on = [
azurerm_virtual_machine_extension.node
]
}
resource terraform_data cluster_config {
provisioner local-exec {
command = "az vm extension set --resource-group ${azurerm_resource_group.hammerspace.name} --vm-name ${local.hsMetadataNodes[0].machine.name} --name CustomScript --publisher Microsoft.Azure.Extensions --protected-settings ${jsonencode({script = base64encode(templatefile("${path.module}/cluster.config.sh", {storageAccounts = var.hammerspace.storageAccounts, shares = var.hammerspace.shares, volumes = var.hammerspace.volumes, volumeGroups = var.hammerspace.volumeGroups}))})}"
}
depends_on = [
terraform_data.cluster_init
]
}
##############################################################################################
# Proximity Placement Group (https://learn.microsoft.com/azure/virtual-machines/co-location) #
##############################################################################################
resource azurerm_proximity_placement_group hammerspace {
count = var.hammerspace.proximityPlacementGroup.enable ? 1 : 0
name = var.hammerspace.namePrefix
resource_group_name = azurerm_resource_group.hammerspace.name
location = azurerm_resource_group.hammerspace.location
}
############################################################################
# Private DNS (https://learn.microsoft.com/azure/dns/private-dns-overview) #
############################################################################
resource azurerm_private_dns_a_record hammerspace {
name = "${lower(var.dnsRecord.name)}-hs"
resource_group_name = var.virtualNetwork.privateDNS.resourceGroupName
zone_name = var.virtualNetwork.privateDNS.zoneName
ttl = var.dnsRecord.ttlSeconds
records = var.dnsRecord.metadataTier.enable ? local.hsHighAvailability ? [
azurerm_lb.metadata[0].frontend_ip_configuration[0].private_ip_address
] : [
for node in local.hsMetadataNodes : azurerm_linux_virtual_machine.metadata[node.machine.name].private_ip_address
] : [
for node in local.hsDataNodes : azurerm_linux_virtual_machine.data[node.machine.name].private_ip_address
]
}
output privateDNS {
value = {
fqdn = azurerm_private_dns_a_record.hammerspace.fqdn
records = azurerm_private_dns_a_record.hammerspace.records
metadataTier = {
enable = var.dnsRecord.metadataTier.enable
}
}
}