finds.dev← search

// the find

dmacvicar/terraform-provider-libvirt

★ 1,856 · Go · updated Jun 2026

Terraform provider to provision infrastructure with Linux's KVM using libvirt

A complete rewrite of the Terraform provider for libvirt/KVM, now built on the Terraform Plugin Framework instead of the deprecated SDK v2. It models libvirt XML schemas directly rather than abstracting them, which means you get full feature access but also need to know libvirt's XML structure. Aimed at homelabbers and infra teams who run KVM on bare metal and want to manage it declaratively.

The no-abstraction design is the right call for a hypervisor provider — libvirt's XML is already well-documented and abstracting it just creates a lossy translation layer. Code generation from libvirtxml structs means schema coverage tracks upstream automatically without manual maintenance. Migration to Plugin Framework is necessary work since SDK v2 is going end-of-life, and the new provider is already on the right foundation. The `wait_for_ip` and lifecycle controls (`create`/`destroy` blocks) solve real operational pain points that the old provider handled poorly.

This is a v0.9 rewrite with no stable release yet — the lifecycle controls are explicitly marked experimental and the migration path from v0.8 breaks HCL compatibility in multiple places (IP addresses, volume sources), so existing users are stuck on the old branch until they can afford a rewrite. The no-abstraction philosophy is principled but punishing to newcomers: to create a VM you need to know what `type_machine = q35` means and what `os.type = hvm` does. Cloud-init support exists but combustion/ignition resources aren't in the main coverage table, suggesting uneven maturity. The docgen tooling calls out to OpenAI (`internal/codegen/docgen/openai.go`) for schema descriptions, which is a odd dependency to pull into a build pipeline.

View on GitHub →

// want more like this?

We dig through GitHub every week and send a few repos picked for what you actually care about — each with an honest take like this one.

Get finds in your inbox → Search again →