54 lines
1.5 KiB
HCL
54 lines
1.5 KiB
HCL
resource "libvirt_domain" "domain" {
|
||
count = var.instance_count
|
||
name = "${var.vm_name}-${count.index}"
|
||
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"
|
||
}
|
||
|
||
disk {
|
||
volume_id = element(libvirt_volume.vm_disk.*.id, count.index)
|
||
scsi = "true"
|
||
}
|
||
|
||
console {
|
||
type = "pty"
|
||
target_port = "0"
|
||
target_type = "virtio"
|
||
}
|
||
|
||
video {
|
||
type = "virtio"
|
||
}
|
||
|
||
tpm {
|
||
backend_type = "emulator"
|
||
backend_version = "2.0"
|
||
}
|
||
|
||
network_interface {
|
||
network_name = "${var.vm_name}-network"
|
||
}
|
||
} |