src/terraform/modules/proxy/main.tf (66 lines of code) (raw):
locals {
# send the script file to custom data, adding env vars
script_file_b64 = base64gzip(replace(file("${path.module}/install.sh"), "\r", ""))
cloud_init_file = templatefile("${path.module}/cloud-init.tpl", { installcmd = local.script_file_b64 })
}
data "azurerm_subnet" "vnet" {
name = var.virtual_network_subnet_name
virtual_network_name = var.virtual_network_name
resource_group_name = var.virtual_network_resource_group
}
data "azurerm_subscription" "primary" {}
data "azurerm_resource_group" "vm" {
name = var.resource_group_name
}
resource "azurerm_network_interface" "vm" {
name = "${var.unique_name}-nic"
resource_group_name = data.azurerm_resource_group.vm.name
location = var.location
ip_configuration {
name = "${var.unique_name}-ipconfig"
subnet_id = data.azurerm_subnet.vnet.id
private_ip_address_allocation = var.private_ip_address != null ? "Static" : "Dynamic"
private_ip_address = var.private_ip_address != null ? var.private_ip_address : null
}
}
resource "azurerm_linux_virtual_machine" "vm" {
name = "${var.unique_name}-vm"
location = var.location
resource_group_name = data.azurerm_resource_group.vm.name
network_interface_ids = [azurerm_network_interface.vm.id]
computer_name = var.unique_name
custom_data = base64encode(local.cloud_init_file)
size = var.vm_size
os_disk {
name = "${var.unique_name}-osdisk"
caching = "ReadWrite"
storage_account_type = "Standard_LRS"
}
source_image_reference {
publisher = "OpenLogic"
offer = "CentOS"
sku = "7.7"
version = "latest"
}
admin_username = var.admin_username
admin_password = (var.ssh_key_data == null || var.ssh_key_data == "") && var.admin_password != null && var.admin_password != "" ? var.admin_password : null
disable_password_authentication = (var.ssh_key_data == null || var.ssh_key_data == "") && var.admin_password != null && var.admin_password != "" ? false : true
dynamic "admin_ssh_key" {
for_each = var.ssh_key_data == null || var.ssh_key_data == "" ? [] : [var.ssh_key_data]
content {
username = var.admin_username
public_key = var.ssh_key_data
}
}
}
resource "azurerm_virtual_machine_extension" "cse" {
name = "${var.unique_name}-cse"
virtual_machine_id = azurerm_linux_virtual_machine.vm.id
publisher = "Microsoft.Azure.Extensions"
type = "CustomScript"
type_handler_version = "2.0"
settings = <<SETTINGS
{
"commandToExecute": " ADMIN_USER_NAME=${var.admin_username} /bin/bash /opt/install.sh"
}
SETTINGS
}