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