At Logilab we are big fans of SaltStack, we use it quite extensivelly to centralize,
configure and automate deployments.

We've talked on this blog about how to build a Debian AMI "by hand" and we wanted to automate
this fully. Hence the salt way seemed to be the obvious way to go.

So we wrote salt-ami-cloud-builder. It is mainly glue between
existing pieces of software that we use and like. If you already have
some definition of a type of host that you provision using salt-stack,
salt-ami-cloud-builder should be able to generate the corresponding
AMI.

Building a Debian based OpenStack
private cloud using salt made us realize
that we needed a way to generate various flavours of AMIs for the
following reasons:

Some of our openstack users need "preconfigured" AMIs (for example a
Debian system with Postgres 9.1 and the appropriate Python bindings)
without doing the modifications by hand or waiting for an automated
script to do the job at AMI boot time.

Some cloud use cases require that you boot many (hundreds for
instance) machines with the same configuration. While tools like
salt automate the job, waiting while the same download and install
takes place hundreds of times is a waste of resources. If the
modifications have already been integrated into a specialized ami,
you save a lot of computing time. And especially in the Amazon (or
other pay-per-use cloud infrastructures), these resources are not
free.

Sometimes one needs to repeat a computation on an instance with the
very same packages and input files, possibly years after the first
run. Freezing packages and files in one preconfigured AMI helps this
a lot. When relying only on a salt configuration the installed
packages may not be (exactly) the same from one run to the other.

While multiple tools like build-debian-cloud exist, their objective
is to build a vanilla AMI from scratch. The salt-ami-cloud-builder
starts from such vanilla AMIs to create variations. Other
tools like salt-cloud focus instead on the boot phase of the
deployment of (multiple) machines.

Chef & Puppet do the same job as Salt, however Salt being already extensively deployed at Logilab, we continue to build on it.