Many solutions exist to configure virtual machines for joining a specific deployment context. While some simple configurations can be performed with shell scripts, more complex customizations benefit from using configuration management software. This page presents several popular solutions.
Chef is a configuration management tool developed by Opscode. It allows to describe configuration through cookbooks and recipes written in Ruby. Those recipes can perform all kinds of configuration on nodes, such as installing packages, modifying configuration files using templates, etc. Chef can be used as a stand-alone program (chef-solo) or using a client/server system (chef-client and chef-server). While these tools are open-source, Opscode also provides improved versions as an SaaS product (Hosted Chef) or as a system that can be installed locally (Private Chef).
Puppet is a configuration management tool developed by Puppet Labs. Configuration is described using Puppet’s own domain specific language. Puppet Labs provide both an open-source version and a commercial version.