Files
les-06/terraform/main.tf
2025-06-11 15:00:23 +00:00

157 lines
4.7 KiB
HCL

# ESXi
# Render userdata template with skylab SSH key
data "template_file" "esxi_userdata" {
template = file("${path.module}/userdata.tftpl")
vars = {
skylab-ssh-public-key = trimspace(var.skylab_ssh_public_key)
# azure-ssh-private-key = indent(6, trimspace(var.azure_ssh_private_key))
# azure-vm-ip = azurerm_linux_virtual_machine.week-6.public_ip_address
}
}
resource "esxi_portgroup" "week-6" {
name = "${var.prefix}-portgoup"
vswitch = "vSwitch0"
}
resource "esxi_guest" "week-6" {
guest_name = var.prefix
disk_store = "datadisk1"
memsize = "2048"
numvcpus = "1"
power = "on"
ovf_source = "https://cloud-images.ubuntu.com/releases/24.04/release/ubuntu-24.04-server-cloudimg-amd64.ova"
network_interfaces {
virtual_network = esxi_portgroup.week-6.name
}
guestinfo = {
"metadata" = base64encode(templatefile("${path.module}/metadata.yaml", {
hostname = var.prefix
}))
"metadata.encoding" = "base64"
"userdata" = base64encode(data.template_file.esxi_userdata.rendered)
"userdata.encoding" = "base64"
}
}
# Azure
# resource "azurerm_virtual_network" "week-6" {
# name = "${var.prefix}-network"
# address_space = ["10.0.0.0/16"]
# location = var.azure_location
# resource_group_name = var.azure_resourcegroup
# }
# resource "azurerm_subnet" "week-6" {
# name = "internal"
# resource_group_name = var.azure_resourcegroup
# virtual_network_name = azurerm_virtual_network.week-6.name
# address_prefixes = ["10.0.2.0/24"]
# }
# resource "azurerm_public_ip" "week-6" {
# name = "${var.prefix}-pip"
# resource_group_name = var.azure_resourcegroup
# location = var.azure_location
# allocation_method = "Static"
# }
# resource "azurerm_network_interface" "week-6" {
# name = "${var.prefix}-nic"
# location = var.azure_location
# resource_group_name = var.azure_resourcegroup
# ip_configuration {
# name = "internal"
# subnet_id = azurerm_subnet.week-6.id
# private_ip_address_allocation = "Dynamic"
# public_ip_address_id = azurerm_public_ip.week-6.id
# }
# }
# resource "azurerm_network_security_group" "week-6" {
# name = "${var.prefix}-nsg"
# location = var.azure_location
# resource_group_name = var.azure_resourcegroup
# security_rule {
# access = "Allow"
# direction = "Inbound"
# name = "tls"
# priority = 100
# protocol = "Tcp"
# source_port_range = "*"
# source_address_prefix = "*"
# destination_port_range = "22"
# destination_address_prefix = azurerm_network_interface.week-6.private_ip_address
# }
# }
# resource "azurerm_network_interface_security_group_association" "week-6" {
# network_interface_id = azurerm_network_interface.week-6.id
# network_security_group_id = azurerm_network_security_group.week-6.id
# }
# # Render userdata template with skylab SSH key
# data "template_file" "azure_cloudinit" {
# template = file("${path.module}/cloudinit-azure.yaml")
# vars = {
# hostname = var.prefix
# azure_ssh_public_key = trimspace(var.azure_ssh_public_key)
# }
# }
# resource "azurerm_linux_virtual_machine" "week-6" {
# name = var.prefix
# location = var.azure_location
# resource_group_name = var.azure_resourcegroup
# network_interface_ids = [
# azurerm_network_interface.week-6.id,
# ]
# size = "Standard_B2ats_v2"
# admin_username = "adminuser"
# admin_ssh_key {
# username = "adminuser"
# public_key = trimspace(var.azure_ssh_public_key)
# }
# custom_data = base64encode(data.template_file.azure_cloudinit.rendered)
# os_disk {
# caching = "ReadWrite"
# storage_account_type = "Standard_LRS"
# }
# source_image_reference {
# publisher = "Canonical"
# offer = "ubuntu-24_04-lts"
# sku = "server"
# version = "latest"
# }
# }
locals {
inventory = templatefile("${path.module}/ansible-inventory.tmpl", {
esxi_name = esxi_guest.week-6.guest_name
esxi_ip = esxi_guest.week-6.ip_address
esxi_private_key_file = "~/.ssh/skylab"
# azure_name = azurerm_linux_virtual_machine.week-6.name
# azure_ip = azurerm_linux_virtual_machine.week-6.public_ip_address
# azure_private_key_file = "~/.ssh/azure"
})
}
resource "local_file" "ansible_inventory" {
content = local.inventory
filename = "${path.module}/../ansible/inventory.ini"
}
output "ip_addresses" {
value = local_file.ansible_inventory.content
}