156 lines
4.0 KiB
HCL
156 lines
4.0 KiB
HCL
# ESXi
|
|
|
|
variable "skylab_ssh_public_key_path" {
|
|
default = "/home/student/.ssh/skylab.pub"
|
|
}
|
|
|
|
data "local_file" "ssh_key" {
|
|
filename = var.skylab_ssh_public_key_path
|
|
}
|
|
|
|
# Render userdata template with SSH key
|
|
data "template_file" "userdata" {
|
|
template = file("${path.module}/userdata.tftpl")
|
|
vars = {
|
|
ssh-key = trimspace(data.local_file.ssh_key.content)
|
|
}
|
|
}
|
|
|
|
# resource "esxi_vswitch" "myvswitch" {
|
|
# name = "${var.prefix}-vswitch"
|
|
# uplink {
|
|
# name = "vmnic0"
|
|
# }
|
|
# }
|
|
|
|
resource "esxi_portgroup" "week-2-opdracht-2" {
|
|
name = "${var.prefix}-network"
|
|
vswitch = "vSwitch0"
|
|
}
|
|
|
|
resource "esxi_guest" "webserver" {
|
|
guest_name = "${var.prefix}-webserver-${count.index}"
|
|
disk_store = "datastore1"
|
|
count = 2
|
|
|
|
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-2-opdracht-2.name
|
|
}
|
|
|
|
guestinfo = {
|
|
"metadata" = base64encode(templatefile("${path.module}/metadata.yaml", {
|
|
hostname = "${var.prefix}-webserver-${count.index}" # Directly using count.index for hostname
|
|
}))
|
|
"metadata.encoding" = "base64"
|
|
"userdata" = base64encode(data.template_file.userdata.rendered)
|
|
"userdata.encoding" = "base64"
|
|
}
|
|
}
|
|
|
|
resource "esxi_guest" "databaseserver" {
|
|
guest_name = "${var.prefix}-databaseserver-${count.index}"
|
|
disk_store = "datastore1"
|
|
count = 1
|
|
|
|
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-2-opdracht-2.name
|
|
}
|
|
|
|
guestinfo = {
|
|
"metadata" = base64encode(templatefile("${path.module}/metadata.yaml", {
|
|
hostname = "${var.prefix}-databaseserver-${count.index}" # Directly using count.index for hostname
|
|
}))
|
|
"metadata.encoding" = "base64"
|
|
"userdata" = base64encode(data.template_file.userdata.rendered)
|
|
"userdata.encoding" = "base64"
|
|
}
|
|
}
|
|
|
|
# Azure
|
|
|
|
# resource "azurerm_virtual_network" "main" {
|
|
# name = "${var.prefix}-network"
|
|
# address_space = ["10.0.0.0/16"]
|
|
# location = var.azure_location
|
|
# resource_group_name = var.azure_resourcegroup
|
|
# }
|
|
|
|
# resource "azurerm_subnet" "main" {
|
|
# name = "internal"
|
|
# resource_group_name = var.azure_resourcegroup
|
|
# virtual_network_name = azurerm_virtual_network.main.name
|
|
# address_prefixes = ["10.0.2.0/24"]
|
|
# }
|
|
|
|
# resource "azurerm_network_interface" "main" {
|
|
# name = "${var.prefix}-nic"
|
|
# location = var.azure_location
|
|
# resource_group_name = var.azure_resourcegroup
|
|
|
|
# ip_configuration {
|
|
# name = "internal"
|
|
# subnet_id = azurerm_subnet.main.id
|
|
# private_ip_address_allocation = "Dynamic"
|
|
# }
|
|
# }
|
|
|
|
# resource "azurerm_linux_virtual_machine" "main" {
|
|
# name = "${var.prefix}-vm"
|
|
# location = var.azure_location
|
|
# resource_group_name = var.azure_resourcegroup
|
|
# network_interface_ids = [
|
|
# azurerm_network_interface.main.id,
|
|
# ]
|
|
# size = "Standard_B2ats_v2"
|
|
|
|
# admin_username = "adminuser"
|
|
# admin_ssh_key {
|
|
# username = "adminuser"
|
|
# public_key = data.azurerm_ssh_public_key.azure.public_key
|
|
# }
|
|
|
|
# os_disk {
|
|
# caching = "ReadWrite"
|
|
# storage_account_type = "Standard_LRS"
|
|
# }
|
|
|
|
# source_image_reference {
|
|
# publisher = "Canonical"
|
|
# offer = "ubuntu-24_04-lts"
|
|
# sku = "server"
|
|
# version = "latest"
|
|
# }
|
|
# }
|
|
|
|
# Write ESXi IP adresses to file
|
|
resource "local_file" "vm_info" {
|
|
content = join("\n", concat(
|
|
[
|
|
for guest in esxi_guest.webserver :
|
|
"${guest.guest_name} - ${guest.ip_address}"
|
|
],
|
|
[
|
|
for guest in esxi_guest.databaseserver :
|
|
"${guest.guest_name} - ${guest.ip_address}"
|
|
]
|
|
))
|
|
|
|
filename = "${path.module}/vm_info.txt"
|
|
}
|
|
|
|
output "ip_addresses" {
|
|
value = local_file.vm_info.content
|
|
}
|