Trying to use Terraform to mount disks in an azure vm properly

I have terraform vm.tf that uses a shell script mount.sh that I want to replace with just using terraform , any ideas

//Generate a random password:

resource “random_password” “vm_password” {

length = 16

special = true

}

//Store the password in the Key Vault:

resource “azurerm_key_vault_secret” “vm_password_store” {

name = “${var.name}-pwd”

value = random_password.vm_password.result

key_vault_id = var.key_vault_id

}

// Network Interface Card

module “nic” {

source = “./nic”

name = “${var.name}-01-nic”

resource_group_name = var.rg_name

location = var.location

tags = var.tags

ip_config_name = “${var.name}-01-nic-config”

primary = “true”

subnet_id = var.subnet_id

private_ip_address_allocation_type = “Static”

private_ip_address = var.ip_address

}

/*

module “nic-diagnostic_setting” {

source = “../diagnostic_setting”

id = module.nic.id

name = “${var.name}-01-nic-diagnosticsetting”

log_analytics_workspace_id = var.log_analytics_workspace_id

log_storage_account_id = var.log_storage_account_id

}*/

// Virtual Machine

resource “azurerm_linux_virtual_machine” “linux-vm” {

resource_group_name = var.rg_name

location = var.location

# Basic Information

name = var.name

network_interface_ids = [module.nic.id]

size = var.size

# User Account

disable_password_authentication = false

admin_username = “tfadmin”

admin_password = azurerm_key_vault_secret.vm_password_store.value

# Patching

provision_vm_agent = true

patch_assessment_mode = “AutomaticByPlatform”

patch_mode = “AutomaticByPlatform”

bypass_platform_safety_checks_on_user_schedule_enabled = true

# Encryption

encryption_at_host_enabled = true

# OS Image & Disk

source_image_reference {

publisher = "RedHat"

offer     = "RHEL"

sku       = "8-lvm-gen2"

version   = "latest"

}

// az vm image list --publisher RedHat --offer RHEL --sku 85gen2 --all --output table

os_disk {

name                 = "${var.name}os0"

caching              = "ReadWrite"

storage_account_type = var.storage_account_type #"Standard_LRS"

}

identity {

type         = "SystemAssigned, UserAssigned"

identity_ids = var.user_identities

}

# Script to mount data disks

user_data = base64encode(templatefile(“/modules/vm/mount.sh”, {

disks = var.disks

}))

boot_diagnostics {

storage_account_uri = null

}

lifecycle {

ignore_changes = \[ 

  user_data

 \]

}

tags = merge(var.tags, { ServerVersion = “RedHat Enterprise Linux 8” })

}

# Backups

resource “azurerm_backup_protected_vm” “backup-vm-link” {

resource_group_name = var.recovery_vault_rg

recovery_vault_name = var.recovery_vault_name

source_vm_id = azurerm_linux_virtual_machine.linux-vm.id

backup_policy_id = var.backup_policy_id

}

# Application / Data Disks

module “disk” {

source = “./disk”

rg_name = var.rg_name

location = var.location

vm_id = azurerm_linux_virtual_machine.linux-vm.id

name = var.name

storage_account_type = var.storage_account_type

# for_each = var.disks

# lun = each.value[0]

# mount_point = each.value[1]

# size = each.value[2]

count = length(var.disks)

lun = var.disks[count.index][0]

mount_point = var.disks[count.index][1]

size = var.disks[count.index][2]

creation_option = var.disks[count.index][3] #disk refactor add

tags = var.tags

}

data “azurerm_managed_disk” “os_disk” {

resource_group_name = var.rg_name

name = azurerm_linux_virtual_machine.linux-vm.os_disk[0].name

}

# Run disk mount script once disks are attached

resource “azurerm_virtual_machine_extension” “mount_disk” {

depends_on = [module.disk]

name = “AutoDiskMount”

virtual_machine_id = azurerm_linux_virtual_machine.linux-vm.id

publisher = “Microsoft.Azure.Extensions”

type = “CustomScript”

type_handler_version = “2.1”

# Command to execute the script on the VM

settings = jsonencode({

commandToExecute = "/tmp/mount.sh && exit 0"

})

tags = var.tags

}

# Logging

resource “azurerm_virtual_machine_extension” “monitor_agent” {

depends_on = [azurerm_linux_virtual_machine.linux-vm]

name = “AzureMonitorLinuxAgent”

virtual_machine_id = azurerm_linux_virtual_machine.linux-vm.id

publisher = “Microsoft.Azure.Monitor”

type = “AzureMonitorLinuxAgent” # Use “AzureMonitorWindowsAgent” for Windows

type_handler_version = “1.33”

auto_upgrade_minor_version = “true”

tags = var.tags

}

resource “azurerm_monitor_data_collection_rule_association” “dcr_assoc” {

depends_on = [azurerm_linux_virtual_machine.linux-vm, azurerm_virtual_machine_extension.monitor_agent]

name = “${azurerm_linux_virtual_machine.linux-vm.name}-dcra0”

description = “Rule Association to Accenture Law”

target_resource_id = azurerm_linux_virtual_machine.linux-vm.id

data_collection_rule_id = var.dcr_id

}

# Guest Configuration

resource “azurerm_virtual_machine_extension” “guest_configuration” {

depends_on = [azurerm_linux_virtual_machine.linux-vm]

name = “AzurePolicyforLinux”

virtual_machine_id = azurerm_linux_virtual_machine.linux-vm.id

publisher = “Microsoft.GuestConfiguration”

type = “ConfigurationForLinux”

type_handler_version = “1.0”

auto_upgrade_minor_version = “true”

tags = var.tags

}

# Patching

resource “azurerm_maintenance_assignment_virtual_machine” “maintenance_assignment” {

depends_on = [azurerm_linux_virtual_machine.linux-vm]

location = var.location

maintenance_configuration_id = var.tags[“ServerRole”] == “Database” || var.tags[“ServerRole”] == “Reporting” ? var.db_maintenance_configuration_id : var.maintenance_configuration_id

virtual_machine_id = azurerm_linux_virtual_machine.linux-vm.id

}

and here is the script I want to replace

#!/bin/bash

cat >> /tmp/mount.sh << EOF

%{ for index, disk in disks ~}

DEVICE=“/dev/disk/azure/scsi1/lun${disk[0]}”

# Format only if no filesystem exists

if ! blkid \$${DEVICE} > /dev/null 2>&1; then

mkfs.ext4 \$${DEVICE}

fi

mkdir -p ${disk[1]}

# Mount only if not already mounted

if ! mountpoint -q ${disk[1]}; then

mount \$${DEVICE} ${disk[1]}

fi

# Add to fstab only if entry does not already exist

if ! grep -q “\$${DEVICE}” /etc/fstab; then

echo “\$${DEVICE} ${disk[1]} ext4 defaults,nofail,x-systemd.device-timeout=30 0 2” >> /etc/fstab

fi

%{ endfor ~}

systemctl daemon-reload

EOF

chmod a+x /tmp/mount.sh

# cat >> /tmp/mount.sh << EOF

# %{ for index, disk in disks ~}

# mkfs.ext4 /dev/disk/by-path/*lun-${disk[0]}

# mkdir -p ${disk[1]}

# mount /dev/disk/by-path/*lun-{disk\[0\]} {disk[1]}

# echo /dev/disk/by-path/*lun-{disk\[0\]} {disk[1]} ext4 defaults 0 2 >> /etc/fstab

# %{ endfor ~}

# systemctl daemon-reload

# EOF

# chmod a+x /tmp/mount.sh