Here's what I've tried:
Terraform + libvirt
There's unofficial libvirt provider for terraform. It works, but there are a few gotchas:
Doesn't support block devices: https://github.com/dmacvicar/terraform-provider-libvirt/issues/418
Existing state not being removed: https://github.com/dmacvicar/terraform-provider-libvirt/issues/423
Docker machine
Docker machine has unofficial kvm driver.
- Works quite well
- Isn't supported anymore
- kvm plugin lacks remote qemu+ssh: https://github.com/dhiltgen/docker-machine-kvm/pull/63