dmacvicar / terraform-provider-libvirt

Terraform provider to provision infrastructure with Linux's KVM using libvirt
Apache License 2.0
1.54k stars 457 forks source link

Allow assignment of the Domain ID (UUID) in libvirt_domain #988

Open jbeisser opened 1 year ago

jbeisser commented 1 year ago

_

Checklist

Description of Issue/Question

Ideally, we can pass some additional optional information to libvirt_domain and other components while building the VM. If you attempt to pass information like libvirt_domain.foo.id to another resource during the same invocation, you get a cycle error. What would be useful is creating the UUID external from the domain, and passing that to libvirt_domain as a resource:

resource "random_uuid" "vmid" {}

resource "libvirt_domain" "foo" {
  [...[
  id = random_uuid.vmid.id
}

resource "libvirt_cloudinit_disk" "cloud-init" {
  user_data = data.cloudinit_config.cloud-init.rendered
  meta_data = templatefile("${path.module}/templates/meta-data.tftpl",
    {
      instance-id = random_uuid.vmid.id
      hostname    = var.hostname
    })
}

When invoked using libvirt_domain.foo.id, the resource libvirt_cloudinit_disk will bomb out with a cycle error:

  provider["registry.terraform.io/dmacvicar/libvirt"].cloud0 (close)
  provider["registry.terraform.io/hashicorp/cloudinit"] (close)
  provider["registry.terraform.io/hashicorp/random"] (close)
╷
│ Error: Cycle: module.test.libvirt_cloudinit_disk.cloud-init, module.test.libvirt_domain.default