Packer, from hashicorp, allows you to create various image-types from a JSON configuration file.
It's a little bit more low-level, but I use it to build images which run under VMWare and on EC2 in AWS. I tend to just use the configuration file to install ansible inside the new instance, then configure the actual system like that.