terraform { required_version = ">= 0.13" required_providers { libvirt = { source = "dmacvicar/libvirt" version = "0.8.3" } } } provider "libvirt" { uri = "qemu:///system" } resource "libvirt_pool" "ubuntu-bios" { name = "ubuntu-bios" type = "dir" target { path = "/tmp/ubuntu-bios" } } resource "libvirt_volume" "ubuntu-qcow2" { name = "ubuntu-qcow2" pool = libvirt_pool.ubuntu-bios.name source = "https://cloud-images.ubuntu.com/noble/current/noble-server-cloudimg-amd64.img" format = "qcow2" } data "template_file" "user_data" { template = file("${path.module}/cloud_init.cfg") } resource "libvirt_cloudinit_disk" "commoninit" { name = "commoninit.iso" user_data = data.template_file.user_data.rendered pool = libvirt_pool.ubuntu-bios.name } resource "libvirt_domain" "domain" { count = 1 name = "ubuntu-cloud-server-2404-${count.index}" memory = "4092" vcpu = 2 cloudinit = libvirt_cloudinit_disk.commoninit.id cpu { mode = "host-model" } disk { volume_id = libvirt_volume.ubuntu-qcow2.id } console { type = "pty" target_port = "0" target_type = "virtio" } video { type = "virtio" } tpm { backend_type = "emulator" backend_version = "2.0" } network_interface { network_name = "default" } }