3.File.Storage/DataLoad/vm.tf (121 lines of code) (raw):
#########################################################################
# Virtual Machines (https://learn.microsoft.com/azure/virtual-machines) #
#########################################################################
variable dataLoad {
type = object({
mount = object({
type = string
path = string
target = string
options = string
})
machine = object({
name = string
size = string
image = object({
publisher = string
product = string
name = string
version = string
})
osDisk = object({
storageType = string
cachingMode = string
sizeGB = number
})
adminLogin = object({
userName = string
userPassword = string
sshKeyPublic = string
passwordAuth = object({
disable = bool
})
})
})
network = object({
acceleration = object({
enable = bool
})
})
})
}
locals {
dataLoad = merge(var.dataLoad, {
machine = merge(var.dataLoad.machine, {
image = merge(var.dataLoad.machine.image, {
publisher = var.dataLoad.machine.image.publisher != "" ? var.dataLoad.machine.image.publisher : module.core.image.linux.publisher
product = var.dataLoad.machine.image.product != "" ? var.dataLoad.machine.image.product : module.core.image.linux.offer
name = var.dataLoad.machine.image.name != "" ? var.dataLoad.machine.image.name : module.core.image.linux.sku
version = var.dataLoad.machine.image.version != "" ? var.dataLoad.machine.image.version : module.core.image.linux.version
})
adminLogin = merge(var.dataLoad.machine.adminLogin, {
userName = var.dataLoad.machine.adminLogin.userName != "" ? var.dataLoad.machine.adminLogin.userName : data.azurerm_key_vault_secret.admin_username.value
userPassword = var.dataLoad.machine.adminLogin.userPassword != "" ? var.dataLoad.machine.adminLogin.userPassword : data.azurerm_key_vault_secret.admin_password.value
sshKeyPublic = var.dataLoad.machine.adminLogin.sshKeyPublic != "" ? var.dataLoad.machine.adminLogin.sshKeyPublic : data.azurerm_key_vault_secret.ssh_key_public.value
})
})
})
}
resource azurerm_network_interface storage_data_load {
name = var.dataLoad.machine.name
resource_group_name = azurerm_resource_group.storage_data_load.name
location = azurerm_resource_group.storage_data_load.location
ip_configuration {
name = "ipConfig"
private_ip_address_allocation = "Dynamic"
subnet_id = data.azurerm_subnet.storage.id
}
accelerated_networking_enabled = var.dataLoad.network.acceleration.enable
}
resource azurerm_linux_virtual_machine storage_data_load {
name = var.dataLoad.machine.name
resource_group_name = azurerm_resource_group.storage_data_load.name
location = azurerm_resource_group.storage_data_load.location
size = var.dataLoad.machine.size
admin_username = local.dataLoad.machine.adminLogin.userName
admin_password = local.dataLoad.machine.adminLogin.userPassword
disable_password_authentication = local.dataLoad.machine.adminLogin.passwordAuth.disable
identity {
type = "UserAssigned"
identity_ids = [
data.azurerm_user_assigned_identity.studio.id
]
}
network_interface_ids = [
azurerm_network_interface.storage_data_load.id
]
os_disk {
storage_account_type = var.dataLoad.machine.osDisk.storageType
caching = var.dataLoad.machine.osDisk.cachingMode
disk_size_gb = var.dataLoad.machine.osDisk.sizeGB > 0 ? var.dataLoad.machine.osDisk.sizeGB : null
}
source_image_reference {
publisher = local.dataLoad.machine.image.publisher
offer = local.dataLoad.machine.image.product
sku = local.dataLoad.machine.image.name
version = local.dataLoad.machine.image.version
}
dynamic admin_ssh_key {
for_each = local.dataLoad.machine.adminLogin.sshKeyPublic != "" ? [1] : []
content {
username = local.dataLoad.machine.adminLogin.userName
public_key = local.dataLoad.machine.adminLogin.sshKeyPublic
}
}
}
resource azurerm_virtual_machine_extension storage_data_load {
name = "DataLoad"
type = "CustomScript"
publisher = "Microsoft.Azure.Extensions"
type_handler_version = data.azurerm_app_configuration_keys.studio.items[index(data.azurerm_app_configuration_keys.studio.items[*].key, data.terraform_remote_state.core.outputs.appConfig.key.scriptExtensionLinux)].value
automatic_upgrade_enabled = false
auto_upgrade_minor_version = true
virtual_machine_id = azurerm_linux_virtual_machine.storage_data_load.id
protected_settings = jsonencode({
script = base64encode(
templatefile("cse.sh", {
dataLoadMount = var.dataLoad.mount
})
)
})
timeouts {
create = "90m"
}
}