I'm looking for something similar to vagrant, but working with KVM. I'd like to setup a couple of machines with packages I point at using a single command, but I don't really want to write the whole script from scratch. The things which are required:
- setting up a single network between those machines and a nat for the world
- setting up groups of servers separately (for example I want a separate group of database-like servers and a group of app servers so that i can redeploy one of them)
- some interaction with chef, so that I can push the right config at the beginning and spawn some machines only after another machine finished its first chef-client run
- extensibility so that I can easily add missing functionality (I'd like a package rebuild / apt repository update as a part of the deployment)
First rule of thumb with VMs (KVM or other) is that you can always treat them as normal physical machines. So chef, cobbler, puppet etc are all valid solutions for their purpose. Deploying VMs is easier than physical machines, because you have the option of creating a template of a certain generic setup, and simply clone or snapshot the existing image, turning it into a new VM.