terraform { backend "pg" { schema_name = "dmz_dns" } required_providers { libvirt = { source = "dmacvicar/libvirt" } template = { source = "hashicorp/template" } } } provider "libvirt" { uri = var.libvirt_endpoint } resource "libvirt_volume" "main_disk" { name = "${var.name}.iso" pool = "disk" size = 1024 * 1024 * 1024 * 15 base_volume_name = "debian-bookworm.qcow2" base_volume_pool = "iso" } resource "libvirt_cloudinit_disk" "cloudinit" { name = "${var.name}.iso" pool = "init" user_data = templatefile("cloud_init.cfg.tftpl", { name = var.name, host_public_key = var.host_public_key }) network_config = templatefile("network_config.cfg.tftpl", { internal_ip = var.internal_ip }) } resource "libvirt_domain" "ubuntu" { name = "hermes" memory = 1024 vcpu = 4 disk { volume_id = libvirt_volume.main_disk.id } network_interface { bridge = "dmzbr" hostname = var.name mac = "CA:FE:C0:FF:EE:07" } cloudinit = libvirt_cloudinit_disk.cloudinit.id provisioner "local-exec" { command = "ansible-playbook -e internal_ip=${var.internal_ip} -T 60 -u root -i ${var.ansible_inventory} ${var.ansible_playbook}" environment = { ANSIBLE_HOST_KEY_CHECKING = "False" ANSIBLE_CONFIG = "${var.ansible_cfg}" } } lifecycle { replace_triggered_by = [ libvirt_cloudinit_disk.cloudinit.id ] } }