From 3da3aa5cc40deefe3d6b12e90da924ae70945e2d Mon Sep 17 00:00:00 2001 From: Lukas Greve Date: Thu, 18 Sep 2025 16:36:09 +0200 Subject: [PATCH] first implementation of UEFI support --- multiple/shared_modules/domain.tf | 20 +++++++++++++++++++ multiple/shared_modules/variables.tf | 30 ++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+) diff --git a/multiple/shared_modules/domain.tf b/multiple/shared_modules/domain.tf index 04e67f8..b2e50be 100644 --- a/multiple/shared_modules/domain.tf +++ b/multiple/shared_modules/domain.tf @@ -4,6 +4,26 @@ resource "libvirt_domain" "domain" { memory = var.memory vcpu = var.vcpu cloudinit = libvirt_cloudinit_disk.commoninit.id + + # ---- optional UEFI support ------------------------------------ + # Firmware – only add the string when a path is supplied + firmware = can(var.uefi_firmware) && length(var.uefi_firmware) > 0 ? var.uefi_firmware : null + + # NVRAM block – dynamic block that is evaluated once per VM + dynamic "nvram" { + # create the block once if a firmware path *and* a template were given + for_each = (can(var.uefi_firmware) && length(var.uefi_firmware) > 0 + && can(var.uefi_nvram_template) && length(var.uefi_nvram_template) > 0 + ) ? [1] : [] + + content { + # The NVRAM filename is per‑VM, but we can honour an optional suffix + file = "/var/lib/libvirt/qemu/nvram/${var.vm_name}-${count.index}${var.uefi_nvram_file_suffix}_VARS.fd" + template = var.uefi_nvram_template + } + } + # ---------------------------------------------------------------- + cpu { mode = "host-passthrough" } diff --git a/multiple/shared_modules/variables.tf b/multiple/shared_modules/variables.tf index 7b8b45d..6df61da 100644 --- a/multiple/shared_modules/variables.tf +++ b/multiple/shared_modules/variables.tf @@ -101,4 +101,34 @@ variable "dns_local_only" { description = "DNS requests only resolved by virtual network's DNS server" type = bool default = false +} + +variable "uefi_firmware" { + description = <