deploy/test-environments/modules/azure/vm/main.tf (117 lines of code) (raw):

resource "random_id" "id" { byte_length = 4 } resource "azurerm_resource_group" "resource_group" { name = "${local.deploy_name}-res-group" location = var.location } locals { vm_private_key_file = "${path.module}/azure-vm-${random_id.id.hex}.pem" vm_username = "ubuntu" deploy_name = "${var.deployment_name}-${random_id.id.hex}" tags = merge({ name = var.deployment_name }, var.specific_tags) } resource "tls_private_key" "azure_vm_key" { algorithm = "RSA" rsa_bits = 4096 } resource "local_file" "ssh_private_key" { filename = local.vm_private_key_file content = tls_private_key.azure_vm_key.private_key_pem file_permission = 0400 } #=== Network Configuration === resource "azurerm_virtual_network" "vm_virtual_network" { name = "${local.deploy_name}-vnet" address_space = ["10.0.0.0/16"] location = azurerm_resource_group.resource_group.location resource_group_name = azurerm_resource_group.resource_group.name } resource "azurerm_subnet" "vm_subnet" { name = "${local.deploy_name}-internal" resource_group_name = azurerm_resource_group.resource_group.name virtual_network_name = azurerm_virtual_network.vm_virtual_network.name address_prefixes = ["10.0.2.0/24"] } resource "azurerm_public_ip" "pip" { name = "${local.deploy_name}-pip" location = azurerm_resource_group.resource_group.location resource_group_name = azurerm_resource_group.resource_group.name allocation_method = "Dynamic" idle_timeout_in_minutes = 30 tags = local.tags } resource "azurerm_network_interface" "vm_nic" { name = "${local.deploy_name}-nic" location = azurerm_resource_group.resource_group.location resource_group_name = azurerm_resource_group.resource_group.name ip_configuration { name = "internal" subnet_id = azurerm_subnet.vm_subnet.id private_ip_address_allocation = "Dynamic" public_ip_address_id = azurerm_public_ip.pip.id } } resource "azurerm_network_security_group" "nsg" { name = "${local.deploy_name}-nsg" location = azurerm_resource_group.resource_group.location resource_group_name = azurerm_resource_group.resource_group.name security_rule { name = "AllowSSHInbound" priority = 100 direction = "Inbound" access = "Allow" protocol = "Tcp" source_port_range = "*" destination_port_range = "22" source_address_prefix = "*" destination_address_prefix = "*" } security_rule { name = "AllowAllOutbound" priority = 200 direction = "Outbound" access = "Allow" protocol = "*" source_port_range = "*" destination_port_range = "*" source_address_prefix = "*" destination_address_prefix = "*" } tags = local.tags } resource "azurerm_network_interface_security_group_association" "azure_vm_nsg_association" { network_interface_id = azurerm_network_interface.vm_nic.id network_security_group_id = azurerm_network_security_group.nsg.id } data "azurerm_public_ip" "data-pip" { name = azurerm_public_ip.pip.name resource_group_name = azurerm_linux_virtual_machine.linux_vm.resource_group_name } # ========================================== resource "azurerm_linux_virtual_machine" "linux_vm" { name = "${local.deploy_name}-vm" resource_group_name = azurerm_resource_group.resource_group.name location = azurerm_resource_group.resource_group.location size = var.size admin_username = local.vm_username depends_on = [azurerm_network_interface_security_group_association.azure_vm_nsg_association] network_interface_ids = [ azurerm_network_interface.vm_nic.id ] admin_ssh_key { username = local.vm_username public_key = tls_private_key.azure_vm_key.public_key_openssh } os_disk { caching = "ReadWrite" storage_account_type = "Standard_LRS" } source_image_reference { publisher = "Canonical" offer = "0001-com-ubuntu-server-jammy" sku = "22_04-lts" version = "latest" } tags = local.tags }